お使いの API のキー を安全に保つことは、ユーザーデータの保護とApp Storeの規約遵守において極めて重要です。 キーの露出は、データ漏洩、サービスの悪用、アカウントの乗っ取りにつながる恐れがあります。
要点:
- キーを code に保存するのは避けましょう: 環境変数やセキュアなファイルを使用してください。
- プラットフォームツールの活用: iOS KeychainおよびAndroidの EncryptedSharedPreferences.
- API キーの暗号化: AES-256暗号化により、セキュリティレイヤーを追加します。
- セキュアな通信: 常にHTTPSを使用し、SSL証明書のピンニングを検討してください。
- キーの監視とローテーション: 定期的にキーをローテーションし、異常な使用状況を追跡します。
これらのプラクティスを導入することで、アプリを保護し、AppleやGoogleのガイドラインを遵守しながら、ユーザーを守ることができます。
API キーのセキュアな保存方法
ソース Code から API キーを削除する
API キーをソース code に直接含めると、デコンパイルやリポジトリの流出によって漏洩する恐れがあります。これを防ぐために、以下の方法を検討してください:
- 使用する 環境変数 ローカル開発用として使用します。
- キーを以下に保存します: セキュアな設定ファイル バージョン管理から除外してください。
- 以下の活用を検討してください: リモート構成サービス キーの管理に使用します。
iOSの場合は、以下を使用することを検討してください: XCConfigファイル を使用して、設定をコードベースから分離します。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 キーを効果的に管理するには、使用状況を注意深く監視し、定期的にローテーションし、厳格なアクセス制御を適用することが重要です。これらの手順により、機密データを保護し、アプリストアの要件への準拠を確実にします。
使用状況のモニタリング
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()
};
アクセス制御の設定
監視とローテーションは対策の一部に過ぎません。厳格なアクセス制御も必要です。権限は必要最小限の原則(Least Privilege)に基づき、必要に応じて割り当ててください:
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 キーを保護するための重要なステップをまとめたものです。
| セキュリティ対策 | 実装要件 | コンプライアンスへの影響 |
|---|---|---|
| ストレージのセキュリティ | E2EE(エンドツーエンド暗号化)と環境の分離を活用 | Apple/Googleのデータ保護規則に準拠 |
| トランスポートレイヤー | HTTPSの強制とSSL証明書ピンニングの導入 | 通信中のデータを保護 |
| アクセス制御 | ロールベースの権限管理と アクセスログの追跡 | 不正アクセスをブロック |
| キー管理 | キーの自動ローテーションと環境ごとの使い分け | 強固で継続的なセキュリティを維持 |
API キーを安全に管理するためのガイドとして、このチェックリストを活用してください。
次のステップ
-
現在の実装を監査する
既存のキーの保存方法や転送方法に脆弱性がないか確認します。特に暗号化とソースコード内での code 露出に注意してください。
-
セキュリティ対策を実装する
エンドツーエンド暗号化を適用してリスクを軽減し、App Store の要件を満たします。
-
監視体制を構築する
自動アラートを設定し、定期的な監査を行うことで、継続的なセキュリティを確保します。
「App Store準拠」 - Capgo [1]
「API App Store コンプライアンスのためのキーセキュリティ」から続きを読む
使用している場合 App StoreコンプライアンスのためのAPIキーセキュリティ セキュリティとコンプライアンスを計画するには、これを以下と連携させてください 暗号化 暗号化の実装詳細について コンプライアンス コンプライアンスの実装詳細について Capgo セキュリティスキャナー Capgo Security Scanner のプロダクトワークフローについて Capgo のセキュリティ Capgo Security のプロダクトワークフロー向け、および Capgo トラストセンター Capgo Trust Center のプロダクトワークフロー向け。