シークレットを保護するためのベスト プラクティス

この記事は秘密を守り、不正アクセスのリスクを減らすのに役立ちます。 このガイダンスに従い、認証情報などの機密情報がコード、GitHubリポジトリ、ログ、継続的インテグレーション/継続的デプロイメント(CI/CD)パイプラインに保存されないようにしましょう。 この記事の指針は、個別のサービス推奨とMicrosoft Cloudセキュリティベンチマーク(MCSB)に基づいています。

この記事は、Microsoftの ゼロ トラスト セキュリティ モデルに合わせて説明します。これには、明示的な検証、最小特権アクセス、侵害の想定が必要です。 Azure Policyの強制を含む規定的なセキュリティ管理については、Microsoft Cloud Security Benchmark v2: Privileged AccessおよびMCSB v2: Data Protectionを参照してください。

シークレットの検出と防止

秘密を守る前に、その存在場所を把握しておく必要があります。 また、曝露が起こる前に防ぐための管理も必要です。

  • 秘密を特定するための監査を行う:パスワード、APIキー、接続文字列、その他の認証情報など、保護が必要な機密情報を特定するためにシステムやアプリケーションを監査します。 定期的な監査は、新しい秘密を在庫に反映し、既存の秘密を適切に管理するのに役立つ。 Safeguardは、一時的なOAuthトークンなどの動的に作成された秘密を、長期秘密と同じ厳密さで管理します。

  • 秘密のハードコーディングを避ける:秘密をコードや設定ファイルに直接埋め込むことは重大なセキュリティリスクを生み出します。 攻撃者があなたのコードベースを侵害すれば、同時に秘密も侵害されます。 代わりに、ソースコードから秘密を隠す環境変数や構成管理ツールを使いましょう。 この方法は偶発的な漏洩のリスクを最小限に抑え、秘密の更新を簡素化します。 シークレットリトリーバルを自動化されたデプロイパイプラインに統合し、シークレットインジェクションパターンを使ってログやバージョン管理での誤った露出を防ぎましょう。 詳細については、「アプリケーション シークレットを保護するための推奨事項」を参照してください。

  • 秘密スキャンツールの導入:誤って漏洩を防ぐために、埋め込まれた秘密を定期的にコードベースでスキャンしましょう。 Azure DevOps Credential ScannerGitHubのシークレットスキャンなどのツールは、リポジトリ内のシークレットを自動的に検出し、警告してくれます。 これらのツールをCI/CDパイプラインに統合し、継続的なモニタリングを行ってください。 スキャンツールで見つけた秘密は、侵害されたものとして扱いましょう。 セキュリティ体制の健全性を維持するために、直ちに取り消して交換してください。

セキュリティで保護されたストレージと暗号化

シークレットを保護するには、すべての段階でセキュリティで保護されたストレージ メカニズムと適切な暗号化が必要です。

  • 安全な鍵ストアの使用:Azure Key VaultAzure Key Vault Managed HSMなどのサービスは、アクセス制御、ログ記録、自動回転などのセキュリティ機能を提供します。 このアプローチは秘密管理を一元化し、不正アクセスのリスクを低減します。 高度に機密性の高い秘密情報については、ソフトウェアベースの秘密ストアと比べて強化された保護のために、ハードウェアセキュリティモジュール(HSM)支援のキーストアを使用します。 顧客管理の鍵シナリオでは、最低でもHSM支援のAzure Key Vault Premiumティアを使いましょう。 鍵主権要件にはAzure Key Vault Managed HSMを使いましょう。 Azureの鍵管理サービスの概要と選択すべきガイダンスについては、「Azureのキー管理」および「適切な鍵管理ソリューションの選び方」をご覧ください。

  • 静止状態および輸送中の秘密を暗号化:Azure Key Vaultはエンベロープ暗号化によって秘密を安全に保存します。鍵の暗号化鍵がデータの暗号化鍵を暗号化し、さらにセキュリティ層を提供します。 HTTPSなどの安全な通信プロトコルを使って、アプリケーションとキーボールト間でデータを暗号化しましょう。 Azureでは、さまざまなサービスがAES 256暗号化を用いて静止時の暗号化を実装しています。 TLSとMACsecは転送中のデータを保護します。 詳細は「 静止時および転送中の暗号化」をご覧ください。

  • ネットワーク分離を実装する: ファイアウォールとネットワーク セキュリティ グループ を構成して、キー コンテナーへのアクセスを制限します。 信頼されたアプリケーションやサービスのみが秘密にアクセスできるようにしましょう。 このアプローチは攻撃対象を最小限に抑え、不正アクセスを防ぐのに役立ちます。 複数のキーボールトを使って、異なるコンポーネントごとに隔離境界を作ることを検討してください。 攻撃者が一つのコンポーネントを侵害すると、そのコンポーネントは他のシークレットや全体のワークロードを制御できません。

アクセス制御と ID

セキュリティを維持するためには、シークレットにアクセスできるユーザーと、アクセスできるものを管理することが重要です。

  • 管理型IDの活用:Azureの管理型IDは、コードに認証情報を保存せずにアプリケーションがAzureサービスに安全に認証できる方法を提供します。 AzureリソースのマネージドIDを有効にし、Azure Key Vaultやその他のサービスに安全にアクセスし、秘密を手動で処理する必要を減らすことができます。 この方法は秘密作成を最小限に抑え、プラットフォームが認証情報を管理するため、潜在的な漏洩の発生リスクを減らします。

  • 詳細なアクセス制御を適用する: シークレットに詳細なアクセス制御を適用することで、最小限の特権の原則に従います。 Azureの役割ベースのアクセス制御(Azure RBAC)を使って、特定の秘密にアクセスできるのは認可されたエンティティだけであることを確認しましょう。 定期的にアクセス許可を確認して更新し、不正アクセスを防ぎます。 シークレットへのアクセスを管理するために、ユーザー、管理者、監査人といった明確な役割を実装します。 この慣行により、信頼できるアイデンティティのみが適切な権限レベルを持つことが保証されます。 詳細については、Azure Key Vault RBACガイドをご覧ください。

シークレット ライフサイクル管理

シークレットには、作成から廃止まで、ライフサイクル全体を通じて継続的な管理が必要です。

  • シークレットを定期的にローテーションする: シークレットは時間の経過と同時に漏えいや露出の影響を受けやすくなります。 不正アクセスのリスクを減らすために、秘密情報を定期的にローテーションしましょう。 Azure Key Vaultで特定のシークレットをローテーションできます。 自動で回転できない秘密については、手動で回転させるプロセスを確立し、使われなくなったら削除しましょう。 シークレットローテーションを自動化し、シークレット管理に冗長性を組み込んで、ローテーションがサービスの可用性を妨げないようにしましょう。 コードにリトライロジックや並行アクセスパターンを実装し、ローテーションウィンドウ中の問題を最小限に抑えましょう。

  • 秘密を安全に配布する:秘密を配布する際は、組織内外で安全に共有しましょう。 安全な共有を目的としたツールを使用し、災害復旧計画に秘密の復旧手順を取り入れましょう。 攻撃者が鍵を侵害または漏洩した場合は、すぐに再生成してください。 利用者ごとに異なるキーを使い、アクセスパターンが似ていても、鍵を共有するのではなく別々のキーを使いましょう。 この方法は鍵の管理と取り消しを簡素化し、他の利用者に影響を与えずに漏洩した鍵を取り消すことができます。

監視およびログ記録

継続的な監視により、不審な活動を検出し、コンプライアンス要件をサポートします。

  • アクセスの監視とログ記録: シークレット管理システムのログ記録と監視を有効にして、アクセスと使用状況を追跡します。 Key VaultのログAzure MonitorAzure Event Gridを使って、秘密に関連するすべての活動を監視してください。 監視は誰が秘密にアクセスしたかを把握し、不審な行動や潜在的なセキュリティインシデントの検出に役立ちます。 秘密へのアクセスを検査・検証するための詳細な監査記録を維持し、個人情報盗難を防ぎ、否認を防ぎ、不要な露出を減らすのに役立ちます。

シークレット処理に関するサービス固有のガイダンス

個別のサービスは、秘密を守るためのベストプラクティスやガイダンスがより多いかもしれません。 その例は次のとおりです。

次のステップ

セキュリティ リスクを最小限に抑えることは、共同責任です。 積極的にワークロードの安全対策を講じましょう。 詳細については、「クラウドにおける共同責任」を参照してください。