また、 API キー を安全に保つことは、ユーザーデータの保護とApp Storeのルール遵守において極めて重要です。 キーの露出は、データ漏洩、サービスの悪用、アカウントの乗っ取りにつながる恐れがあります。
要点:
- codeにキーを保存するのは避けましょう: 環境変数やセキュアなファイルを使用してください。
- プラットフォームツールの活用: iOS KeychainおよびAndroidの EncryptedSharedPreferences.
- API キーの暗号化: AES-256暗号化でセキュリティを強化します。
- セキュアな通信: 常にHTTPSを使用し、SSL証明書のピン留めを検討してください。
- キーの監視とローテーション: 定期的にキーをローテーションし、異常な使用状況を追跡してください。
これらのプラクティスを導入することで、アプリを保護し、AppleやGoogleのガイドラインを遵守しながら、ユーザーを守ることができます。
セキュアな API キー保存方法
ソース Code から API キーを削除する
code に API キーを直接含めると、デコンパイルやリポジトリの流出によって漏洩する恐れがあります。これを防ぐために、以下の方法を検討してください:
- 使用するのは 環境変数 ローカル開発用として。
- キーを以下に保存: セキュアな設定ファイル (バージョン管理から除外すること)。
- 以下を活用: リモート構成サービス キーの管理に使用します。
iOSの場合は、以下を検討してください: XCConfigファイル を使用して、設定をcodebaseから分離します。Androidでは、以下を使用してキーを管理できます: gradle.properties:
# Store in ~/.gradle/gradle.properties
API_KEY=your_key_here
# Reference in build.gradle
buildConfigField "String", "API_KEY", "\"${project.API_KEY}\""
プラットフォーム固有のセキュリティツール
API キーを保存する際、プラットフォーム固有のツールを活用してセキュリティを強化しましょう。
iOSでは、安全な保存のために Keychain Services を使用します:
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: "APIKey",
kSecValueData as String: apiKey.data(using: .utf8)!
]
let status = SecItemAdd(query as CFDictionary, nil)
Androidでは、安全なキー保存のために EncryptedSharedPreferences を活用してください:
val masterKey = MasterKey.Builder(context)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()
val sharedPreferences = EncryptedSharedPreferences.create(
context,
"secret_shared_prefs",
masterKey,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
環境ごとにキーを分離する
開発、ステージング、本番環境で異なる API キーを使用してください。各環境には以下が必要です:
- 独自のキーローテーションスケジュール。
- 利用状況のモニタリング。
- 厳格なアクセス制御。
ストア環境ごとのキーを 安全なCI/CD変数に保存し、 設定ファイルの使用を避けます。これにより、自動ビルドプロセスをサポートしつつ、キーの保護を確実にします。また、通信中のキーを保護するために、安全な転送メカニズムを導入してください。
高度なiOSモバイルセキュリティ – ランタイム攻撃と API キー …
API キーの転送セキュリティ
ユーザーデータを保護し、App Storeの要件を遵守するためには、API キーの転送中の安全性を確保することが不可欠です。強力な転送セキュリティ対策により、中間者攻撃や不正アクセスを防ぐことができます。
HTTPSの実装
API 通信を保護するため、常にHTTPトラフィックをHTTPSにリダイレクトしてください。TLS 1.3以降を使用し、信頼できる認証局からSSL証明書を取得してください。
Node.jsの Express application:
const express = require('express');
const app = express();
// Redirect HTTP to HTTPS
app.use((req, res, next) => {
if (!req.secure) {
return res.redirect('https://' + req.headers.host + req.url);
}
next();
});
さらなる保護レイヤーとして、証明書ピンニング(Certificate Pinning)の導入を検討してください。
SSL証明書ピンニング
証明書ピンニングは、サーバーのSSL証明書が信頼できるコピーと一致することを確認し、偽造証明書の使用を防ぎます。
iOSでは、次を使用して証明書ピンニングを実装できます: URLSession。以下に例を示します:
class APIManager: NSObject, URLSessionDelegate {
func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
guard let serverTrust = challenge.protectionSpace.serverTrust,
let certificate = SecTrustGetCertificateAtIndex(serverTrust, 0) else {
completionHandler(.cancelAuthenticationChallenge, nil)
return
}
// Compare certificate with pinned certificate
if validateCertificate(certificate) {
completionHandler(.useCredential, URLCredential(trust: serverTrust))
} else {
completionHandler(.cancelAuthenticationChallenge, nil)
}
}
}
通信の保護に加え、アプリケーションレベルで API キーを暗号化してください。
API キーの暗号化
API キーを暗号化することで、 セキュリティがさらに強化されます。例えば Capgo では、アプリのアップデートにエンドツーエンド暗号化を使用しています。
「真のエンドツーエンド暗号化を実現している唯一のソリューション。他社はアップデートに署名しているだけだ」 — Capgo [1]
API キーを暗号化するには、信頼性の高い暗号化アルゴリズムを使用してください。以下は、Node.js で AES-256-GCM を使用して API キーを暗号化する例です。
const crypto = require('crypto');
function encryptAPIKey(apiKey, encryptionKey) {
const iv = crypto.randomBytes(16);
const cipher = crypto.createCipheriv('aes-256-gcm', encryptionKey, iv);
let encrypted = cipher.update(apiKey, 'utf8', 'hex');
encrypted += cipher.final('hex');
return {
encrypted: encrypted,
iv: iv.toString('hex'),
tag: cipher.getAuthTag().toString('hex')
};
}
HTTPS、証明書ピンニング、および暗号化を組み合わせることで、API キーを強力に保護できます。
API キーのセキュリティ管理
API キーを効果的に管理するには、使用状況を注意深く監視し、定期的にローテーションを行い、厳格なアクセス制御を適用することが重要です。これらのステップにより、機密データを保護し、App Store の要件への準拠を確実にできます。
使用状況のモニタリング
API キーの使用状況を追跡することは、異常なアクティビティを検知するために不可欠です。リアルタイム分析を使用して、以下を監視してください:
- リクエストのパターンとボリューム
- アクセスの地理的な場所
- エラー率とエラータイプ
- 認証の失敗
Node.js での例はこちらです:
const apiMetrics = {
trackRequest: (apiKey, endpoint) => {
// Log request details
const requestData = {
timestamp: new Date().toISOString(),
endpoint,
apiKey: hashKey(apiKey),
geoLocation: getRequestLocation(),
responseTime: calculateResponseTime()
};
// Alert on suspicious patterns
if (isAnomalous(requestData)) {
notifySecurityTeam(requestData);
}
}
};
キーのローテーション・スケジュール
利用状況を把握できたら、定期的にキーをローテーションするようにしましょう。ローテーションを自動化することで、App Storeの要件への準拠を容易にできます。以下にいくつかの戦略を紹介します:
- 緊急ローテーション: 漏洩の疑いがある場合は、直ちにキーを無効化してください。
- 定期ローテーション: 本番環境のキーは四半期ごとに更新します。
- 開発環境ローテーション: テスト環境のキーは毎月リフレッシュします。
ダウンタイムを最小限に抑えるため、キーの変更時には移行期間を設けましょう:
const keyRotation = {
oldKey: process.env.OLD_API_KEY,
newKey: process.env.NEW_API_KEY,
transitionPeriod: 7 * 24 * 60 * 60 * 1000, // 7 days
startDate: new Date()
};
アクセス制御の設定
監視とローテーションは対策の一部に過ぎません。厳格なアクセス制御も必要です。必要最小限の権限のみを割り当てる「最小権限の原則」を徹底してください:
const accessControl = {
validateAccess: (apiKey, requestedOperation) => {
const keyPermissions = getKeyPermissions(apiKey);
const environmentType = getCurrentEnvironment();
return isOperationAllowed(keyPermissions, requestedOperation, environmentType);
}
};
アクセス権限を定期的にレビューし、必要に応じて調整してください。また、異常なアクティビティに対して自動アラートを設定しましょう。これらの対策により、App Storeのルールを遵守しながら、強固なセキュリティを維持できます。
Capgo セキュリティ機能

Capgo は、セキュアなストレージと転送方式にプラットフォーム独自の高度な機能を組み合わせることで、アプリのセキュリティを強化します。
Capgo のセキュリティアーキテクチャ
Capgo のシステムは、これまでに 2,350 万件以上の 安全なアップデートを 750 個のプロダクションアプリへ [1]を配信してきました。また、 エンドツーエンド暗号化を採用しており、許可されたユーザーのみがアップデートを復号できるようにしています。セキュリティ構成の詳細は以下の通りです:
const capgoSecurity = {
encryptionType: 'end-to-end',
keyStorage: {
separate: true,
encrypted: true,
environment: process.env.NODE_ENV
},
updateVerification: async (update) => {
const isValid = await verifySignature(update);
const isAuthorized = await checkUserPermissions(update.userId);
return isValid && isAuthorized;
}
};
この設計により、API のキーを保護するだけでなく、App Store の要件への準拠も容易になります。
App Store ガイドラインへの準拠
Capgo は、迅速かつ安全なアップデート配信を実現し、世界中で 82% の成功率を達成しています。アクティブユーザーの 95% が 24 時間以内にアップデートを受け取っています。 [1]その機能は、潜在的な脆弱性への対策に役立ちます:
- App Store のポリシーに準拠したキーの自動ローテーション
- 特定の環境に合わせたデプロイ制御
- アップデート管理のためのきめ細かな権限設定
CI/CD セキュリティ統合
Capgo は CI/CD プラットフォームとシームレスに連携し、API キーの保護を強化します。統合の例は以下の通りです:
capgo_deployment:
environment:
- CAPGO_API_KEY: ${SECURED_API_KEY}
- APP_ENV: production
security:
- signature_verification: true
- key_rotation: enabled
- access_control: role_based
| セキュリティ機能 | 実装 |
|---|---|
| キーの暗号化 | ビルドおよびデプロイ時のエンドツーエンド暗号化 |
| アクセス制御 | デプロイ・トリガーのロールベース権限 |
| 監査ログ | すべてのデプロイ活動を網羅するログ |
| バージョン管理 | デプロイ済みアップデートの安全な追跡 |
「エンドツーエンド暗号化。アップデートを復号できるのはユーザーのみで、他の誰もアクセスできません。」 [1] - Capgo
概要
API キーの安全性を保つことは、App Storeの要件を満たし、ユーザーデータを保護するために不可欠です。以下に主要なプラクティスと次のステップの概要をまとめました。
セキュリティ・チェックリスト
以下の表は、AppleとGoogleの基準に準拠しながら、API キーを保護するための重要なステップをまとめたものです。
| セキュリティ対策 | 実装要件 | コンプライアンスへの影響 |
|---|---|---|
| ストレージのセキュリティ | E2E暗号化と環境の分離 | Apple/Googleのデータ保護規則に準拠 |
| トランスポート層 | HTTPSの強制とSSLピン留め | 通信中のデータを保護 |
| アクセス制御 | ロールベースの権限管理と アクセスログの追跡 | 不正アクセスをブロック |
| キー管理 | キーの自動ローテーションと環境ごとの使い分け | 強固で継続的なセキュリティを維持 |
API キーを安全に管理するためのガイドとして、このチェックリストを活用してください。
次のステップ
-
現在の実装を監査する
既存のキー保存方法や転送方法に脆弱性がないか確認します。特に暗号化とソースコード内での code 露出に注意してください。
-
セキュリティ対策を実装する
エンドツーエンド暗号化を適用してリスクを軽減し、App Store の要件を満たします。
-
監視体制を構築する
自動アラートを設定し、定期的な監査を行うことで、継続的なセキュリティを確保します。
「App Storeのコンプライアンス準拠」— Capgo [1]
API Key Security for App Store Compliance の続きを読む
以下を使用している場合: API App Storeのコンプライアンスに向けたAPIキーのセキュリティ対策 セキュリティとコンプライアンスの計画に使う場合は、以下と連携してください: 暗号化 実装の詳細は「暗号化」を参照: コンプライアンス 実装の詳細は「コンプライアンス」を参照: Capgo セキュリティスキャナー Capgo セキュリティスキャナーの製品ワークフローについては: Capgo セキュリティ Capgo Security でのプロダクトワークフロー向け、および Capgo トラストセンター Capgo Trust Center でのプロダクトワークフロー向け。