この記事では、シークレットを保護し、不正アクセスのリスクを軽減するためのガイダンスを提供します。 このガイダンスに従って、資格情報などの機密情報をコード、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 Vault やAzure 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 MonitorやAzure Event Gridなどのサービスを使用して、シークレットに関連するすべてのアクティビティを監視します。 これにより、シークレットにアクセスしたユーザーを可視化し、疑わしい動作や潜在的なセキュリティ インシデントを検出するのに役立ちます。 詳細な監査証跡を維持することは、シークレットへのアクセスを検査および検証するために重要です。これは、なりすましを防ぎ、否認を回避し、不要な露出を減らすのに役立ちます。
シークレット処理に関するサービス固有のガイダンス
個々のサービスには、シークレットを保護するための追加のベスト プラクティスとガイダンスがある場合があります。 次に例をいくつか示します。
- API Management: Key Vault 統合を使用して Azure API Management のポリシーで名前付き値を使う
- App Service: App Service 及び Azure Functions に対して Key Vault の参照を使用する
- Application Gateway: Azure ポータルを使用して、TLS 終了で Application Gateway を構成します
- Automation: Azure Automation で資格情報を管理する
- Azure App Configuration: Tutorial: ASP.NET Core アプリでKey Vault参照を使用します
- Azure Bot Service: Azure Bot Service静止データの暗号化
- Azure Center for SAP ソリューション: Azure Center for SAP ソリューション - 展開 - 展開のためのネットワーク準備
- Azure Communications Gateway: シークレットの作成と格納
- Azure Communications Service: アクセス トークンの作成と管理
- Azure Container Apps: Azure Container Apps のシークレットを管理する
- Azure Cosmos DB: Azure Cosmos DB アカウントのカスタマー マネージド キーを構成する
- Azure Database for PostgreSQL - フレキシブル サーバー: Azure Database for PostgreSQL - カスタマー マネージド キーを使用したフレキシブル サーバー データ暗号化
- Azure Databricks: Databricks における Key Vault 統合
- Azure DevTest Labs:
Azure DevTest Labs - Azure Event Hubs: Azure Event Hubs の保存データを暗号化するためのカスタマー マネージド キーを構成します
- Azure Front Door: Azure Front Door シークレット
- Azure HDInsight on AKS: リソースの前提条件 - Azure Key Vault を作成
- Azure Information Protection: Azure Information Protection Key Vault サポートの詳細
- Azure Kubernetes Service (AKS): CSI シークレット ストア
- Azure Managed Applications: Azure Managed Applications のデプロイ時に Access Key Vault シークレットにアクセスします
- Azure OpenAI: Key Vaultを使用してFoundry Toolsアプリケーションを開発する
- Azure Pipelines: Azure Pipelines でのシークレットの保護
- Azure Purview: Microsoft Purview での認証のための資格情報
- Azure Service Bus: Service Connector を使用して Service Bus を統合する
- Azure SignalR Service: Key Vault URL テンプレート設定のシークレット参照
- Azure Spring Apps: Azure Key Vault を Service Connector と統合する
- Azure Stack Edge: Azure Key Vault を使用して Azure Stack Edge のシークレットを管理する
- Azure Stack Hub: シークレットを更新する
- Azure Web PubSub: カスタム証明書を追加します
- Backup: カスタマー マネージド キーを使用して暗号化するようにボールトを構成する
- Cognitive Services: Azure Cognitive Services アプリケーションを Key Vault と共に開発する
- Data Factory: 資格情報を Azure Key Vault に保存する
- ExpressRoute: ExpressRoute Direct の MACsec 暗号化を構成する。
- 関数 App Service と Azure Functions の Key Vault 参照を使用します
- Key Vault: Azure Key Vault のシークレットについて
- Logic Apps: Logic Apps の標準アプリ設定
- Machine Learning サービス: Azure Machine Learning ジョブで認証資格情報シークレットを使用します
- Service Fabric: Service Fabric アプリケーションの KeyVaultReference サポート
- SQL IaaS: Azure VM (Resource Manager) 上の SQL Server における Azure Key Vault 統合の構成
- ストレージ:
Key VaultとAzure CLI
次のステップ
セキュリティ リスクを最小限に抑えることは、共同責任です。 ワークロードをセキュリティで保護するための手順を率先して行う必要があります。 クラウドでの共同責任について詳細を学びます。
- Azureを使用してクラウド ソリューションを設計、デプロイ、管理する際に使用するセキュリティのベスト プラクティスについてはAzureセキュリティのベスト プラクティスとパターンを参照してください。
- Microsoft クラウド セキュリティ ベンチマーク v2 - Privileged Access コントロールで、包括的なシークレットとAzure Policy マッピングを使用した特権アクセス ガイダンスを確認します。
- お客様にも推奨される ID とシークレットを保護するための Microsoft の内部セキュリティベスト プラクティスである Microsoft Secure Future Initiative (SFI) について説明します。
- Zero Trust デプロイ を調べて、IDとアクセス管理のZero Trust 原則の実装に関するガイダンスを確認します。