次の方法で共有


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

この記事では、シークレットを保護し、不正アクセスのリスクを軽減するためのガイダンスを提供します。 このガイダンスに従って、資格情報などの機密情報をコード、GitHub リポジトリ、ログ、継続的インテグレーション/継続的デプロイ (CI/CD) パイプラインなどに格納しないようにします。 この記事のガイダンスは、個々のサービスの推奨事項と、Microsoft クラウド セキュリティ ベンチマーク (MCSB) からまとめられたものです。

この記事では、Microsoft の Zero Trust セキュリティ モデルに合わせて説明します。これには、明示的な検証、最小特権アクセス、侵害の想定が必要です。 Azure Policy適用による規範的なセキュリティ制御については、Microsoft クラウド セキュリティ ベンチマーク v2 - Privileged Access および MCSB v2 - Data Protection を参照してください。

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

シークレットをセキュリティで保護する前に、シークレットが存在する場所を可視化し、最初に公開されないようにする必要があります。

  • 監査を実施してシークレットを特定する: システムとアプリケーションの完全な監査を実施すると、保護が必要なすべての機密情報を特定するのに役立ちます。 これには、パスワード、API キー、接続文字列、その他の資格情報が含まれます。 定期的な監査により、新しいシークレットが把握され、既存のものが適切に管理されていることを確認できます。 一時的な可能性がある OAuth トークンなどの動的に作成されたシークレットであっても、長期的なシークレットと同じ厳密さで保護する必要があります。

  • シークレットのハードコーディングを回避する: コードまたは構成ファイルにシークレットを直接埋め込むのは、重大なセキュリティ リスクです。 コードベースが侵害されると、シークレットも侵害されます。 代わりに、環境変数または構成管理ツールを使用してソース コードに機密情報が含まれないようにしてください。 これにより、不注意による露出のリスクが最小限に抑えられ、シークレットの更新プロセスが簡略化されます。 さらに、シークレットの取得を自動化されたデプロイ パイプラインに統合し、シークレットインジェクション パターンを使用すると、シークレットが誤ってログやバージョン管理で公開されるのを防ぐことができます。 詳細については、「アプリケーション シークレットを保護するための推奨事項」を参照してください。

  • シークレット スキャン ツールを実装する: コードベースで埋め込みシークレットを定期的にスキャンすると、誤って公開されるのを防ぐことができます。 Azure DevOps資格情報スキャナーGitHubシークレットスキャンリポジトリ内にあるシークレットを自動的に検出して警告することができます。 これらのツールを CI/CD パイプラインに統合することで、継続的な監視が保証されます。 これらのスキャン ツールによって検出されたシークレットは侵害されたものとして扱います。つまり、セキュリティ体制の整合性を維持するには、すぐに取り消して置き換える必要があります。

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

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

  • セキュリティで保護されたキー ストアを使用する: Azure Key VaultAzure Managed HSMアクセス制御、ログ記録、自動ローテーションなどの堅牢なセキュリティ機能を提供します。 このアプローチにより、シークレットの管理が一元化され、不正アクセスのリスクが軽減されます。 特に機密性の高いシークレットや重要なシークレットのセキュリティをさらに強化するには、ハードウェア セキュリティ モデル (HSM) のキー ストアを使用してシークレットを暗号化することを検討してください。ハードウェア セキュリティ モデル (HSM) では、ソフトウェア ベースのシークレット ストアと比較して保護が強化されます。 Azureにおけるすべてのキー管理提供サービスの概要と、どのサービスを選択すべきかのガイダンスについては、「Azureでのキー管理」および「適切なキー管理ソリューションの選び方」を参照してください。

  • 保存時および転送中のシークレットの暗号化: Azure Key Vaultはエンベロープ暗号化を使用してシークレットを安全に格納します。この場合、データ暗号化キー (DEK) はキー暗号化キー (KEK) によって暗号化され、セキュリティの追加レイヤーが提供されます。 HTTPS などのセキュリティで保護された通信プロトコルを使用して、アプリケーションとキー コンテナーの間で転送中のデータを暗号化します。 Azureでは、保存時の暗号化は AES 256 暗号化を使用してさまざまなサービスに実装されますが、転送中のデータは TLS と MACsec を介してセキュリティで保護されます。 詳細については、保存時および転送時の暗号化に関するページを参照してください。

  • ネットワーク分離を実装する: ファイアウォールとネットワーク セキュリティ グループ を構成して、キー コンテナーへのアクセスを制限します。 信頼できるアプリケーションとサービスのみにシークレットへのアクセスを許可し、攻撃面を最小限に抑え、不正アクセスを防ぎます。 複数のキー コンテナーを使用して異なるコンポーネントの分離境界を作成することを検討し、1 つのコンポーネントが侵害された場合に、他のシークレットまたはワークロード全体を制御できないようにします。

アクセス制御と ID

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

  • Leverage マネージド ID: 管理された ID Azureでは、資格情報をコードに格納せずにAzureサービスに対してアプリケーションを認証するための安全な方法が提供されます。 Azure リソースのマネージド ID を有効にすると、Azure Key Vaultやその他のサービスに安全にアクセスできるため、シークレットを手動で処理する必要が減ります。 このアプローチでは、シークレットの作成が最小限に抑えられるだけでなく、資格情報の管理責任がプラットフォームに委任されるため、潜在的な侵害の対象となる領域も削減されます。

  • 詳細なアクセス制御を適用する: シークレットに詳細なアクセス制御を適用することで、最小限の特権の原則に従います。 Azureロールベースのアクセス制御 (RBAC) を使用して、承認されたエンティティのみが特定のシークレットにアクセスできるようにします。 定期的にアクセス許可を確認して更新し、不正アクセスを防ぎます。 ユーザー、管理者、監査者などの個別のロールを実装してシークレットへのアクセスを管理し、信頼できる ID のみが適切なレベルのアクセス許可を持っていることを確認します。 Azure Key Vault RBAC ガイドを参照してください。

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

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

  • シークレットを定期的にローテーションする: シークレットは時間の経過と同時に漏えいや露出の影響を受けやすくなります。 シークレットを定期的にローテーションすると、不正アクセスのリスクが軽減されます。 特定のシークレットのAzure Key Vaultでシークレットをローテーションできます。自動的にローテーションできないシークレットの場合は、手動ローテーション プロセスを確立し、使用されなくなったときに削除されるようにします。 シークレットのローテーション プロセスを自動化し、シークレット管理に冗長性を組み込むことで、ローテーションによってサービスの可用性が中断されないようにすることができます。 再試行ロジックと同時アクセス パターンをコードに実装すると、ローテーション期間中の問題を最小限に抑えるのに役立ちます。

  • シークレットを安全に配布する: シークレットを配布するときは、組織内外で安全に共有されるようにします。 安全に共有できるように設計されたツールを使用し、ディザスター リカバリー計画にシークレットの回復手順を組み込みます。 キーが侵害された、または漏洩した場合は、直ちに再生成する必要があります。 同様のアクセス パターンがある場合でも、キーを共有するのではなく、コンシューマーごとに個別のキーを使用します。 これにより、キーの管理と失効が簡略化され、侵害されたキーを他のコンシューマーに影響を与えることなく取り消すことができます。

監視およびログ記録

継続的な監視により、疑わしいアクティビティの検出が可能になり、コンプライアンス要件がサポートされます。

  • アクセスの監視とログ記録: シークレット管理システムのログ記録と監視を有効にして、アクセスと使用状況を追跡します。 Key Vaultログ記録Azure MonitorAzure Event Gridなどのサービスを使用して、シークレットに関連するすべてのアクティビティを監視します。 これにより、シークレットにアクセスしたユーザーを可視化し、疑わしい動作や潜在的なセキュリティ インシデントを検出するのに役立ちます。 詳細な監査証跡を維持することは、シークレットへのアクセスを検査および検証するために重要です。これは、なりすましを防ぎ、否認を回避し、不要な露出を減らすのに役立ちます。

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

個々のサービスには、シークレットを保護するための追加のベスト プラクティスとガイダンスがある場合があります。 次に例をいくつか示します。

次のステップ

セキュリティ リスクを最小限に抑えることは、共同責任です。 ワークロードをセキュリティで保護するための手順を率先して行う必要があります。 クラウドでの共同責任について詳細を学びます