Azure Key Vault を使用したシークレットと証明書の管理
2024 年 8 月 14 日
この技術的および教育的な記事は、セキュリティ アナリスト、IT 管理者、システム エンジニアが Azure Key Vault を使用してシークレット (パスワード、API キー、接続文字列など) と証明書 (SSL/TLS) を安全に管理する方法をガイドすることを目的としています。 Azure Key Vault は、これらの重要なアイテムを保存およびアクセスするための一元化された安全なソリューションを提供するクラウド サービスであり、セキュリティ上不適切な方法であるコードまたは構成ファイルにアイテムを直接埋め込む必要がなくなります [1]。
はじめに
最新のアプリケーションの開発と運用では、シークレットと証明書の管理が常に課題となっています。データベース認証情報、サードパーティ サービス API キー、暗号化キー、および SSL/TLS 証明書は機密資産であり、侵害されると重大なデータ侵害につながる可能性があります。これらをプレーン テキスト ファイル、環境変数、またはソース コードに直接保存するなど、安全でない方法で保存すると、重大なリスクが生じます。 Azure Key Vault は、これらの資産を保護する安全なハードウェア ベースのリポジトリ (HSM) を提供し、アクセスを厳密に制御し、ライフサイクル管理を簡素化することで、これらの問題を解決するように設計されました [2]。
このハウツー ガイドでは、Azure Key Vault の作成、シークレットと証明書の追加と取得、アクセス ポリシーの構成、Azure App Service などの他の Azure サービスとの統合について説明します。読者がシークレットと証明書の安全な管理を実装し、アプリケーションとクラウド インフラストラクチャのセキュリティ体制を強化できるように、段階的な手順、Azure CLI コマンドの例、および検証方法が提供されます。
Azure Key Vault が重要なのはなぜですか?
- 安全なストレージ: FIPS 140-2 レベル 2 で検証されたハードウェア セキュリティ モジュール (HSM) を使用してシークレットと暗号化キーを保護します。
- 集中アクセス制御: Azure ロールベースのアクセス制御 (RBAC) または Key Vault アクセス ポリシーを使用して、シークレットと証明書へのアクセス許可を詳細なレベルで管理できます。
- ライフサイクル管理: シークレットと証明書のローテーション、自動有効期限切れ、イベント通知を容易にします。
- リスク軽減: 資格情報をコードまたは構成ファイルに保存する必要がなくなり、漏洩のリスクが最小限に抑えられます。
- 監視と監査: Key Vault で実行されたすべての操作を記録し、コンプライアンスとセキュリティの調査のための監査証跡を提供します。
- 統合の簡素化: Azure App Service、Azure Functions、Azure Virtual Machines、Azure DevOps などの他の Azure サービスと簡単に統合できます。
前提条件
Azure Key Vault を使用するには、次のものが必要です。
- アクティブな Azure サブスクリプション: リソースを作成および管理するための Azure サブスクリプション。
- 管理アクセス: Azure サブスクリプションの「所有者」または「共同作成者」ロールを持つアカウント、または Key Vault を作成および管理する権限を持つカスタム ロール。
- Azure CLI または Azure PowerShell: Azure と対話するためのコマンド ライン ツールをインストールおよび構成しました。
- オプション: Visual Studio Code: 開発および統合テスト用。
ステップバイステップ: Azure Key Vault を使用したシークレットと証明書の管理
Key Vault を作成し、シークレットと証明書を追加して、アクセスを構成しましょう。
1. Azure Key Vault の作成
Azure CLI を使用して Key Vault を作成しましょう。 Azure ポータルを使用することもできます。
- ターミナルまたは PowerShell を開き、Azure にログインします。 「」バッシュ az ログイン 「」
-
リソース グループを作成します (まだ作成していない場合)。 「」バッシュ az group create --name RG-KeyVault-Artigos --location eastus 「」
-
Azure Key Vault を作成します。 Key Vault のグローバルに一意な名前を選択します。 「」バッシュ az keyvault create --name kv-artigos-seguranca-01 --resource-group RG-KeyVault-Artigos --location eastus --enabled-for-template-deployment true 「」
--enabled-for-template-deployment true: テンプレートのデプロイに Key Vault を使用できるようになり、自動化に役立ちます。
2. Key Vault へのシークレットの追加
データベースのパスワードをシークレットとして追加しましょうの。
-
サンプル値を使用して「DatabasePassword」というシークレットを追加します。 「」バッシュ az keyvault Secret set --vault-name kv-artigos-seguranca-01 --name DatabasePassword --value "S3cur3P@ssw0rd!" 「」
-
シークレットを取得して、正しく保存されていることを確認します。 「」バッシュ az keyvault Secret show --vault-name kv-artigos-segranca-01 --name DatabasePassword --query value -o tsv 「」
3. Key Vault への証明書の追加
デモの目的で自己署名証明書を追加してみましょう。運用環境では、信頼できる CA からの証明書を使用します。
-
Key Vault で自己署名証明書を作成します。 「」バッシュ az keyvaultcertificate create --vault-name kv-artigos-seguranca-01 --name MyWebAppCert --policy "$(az keyvaultcertificate get-default-policy)" 「」
-
証明書の詳細を確認します。 「」バッシュ az keyvault 証明書 show --vault-name kv-artigos-seguranca-01 --name MyWebAppCert 「」
4. アクセスポリシーの構成
アプリケーションまたはユーザーがシークレットと証明書にアクセスできるようにするには、アクセス ポリシーを構成する必要があります。 Azure のロールベースのアクセス制御 (RBAC) を使用してみましょう。
- アクセスが必要なアプリケーションまたはユーザーの「オブジェクト ID」を取得します。アプリケーション(サービス プリンシパル)の場合は、Azure AD に登録すると取得できます。ユーザーの場合は、
az ad user show --id <user-principal-name> --query id -o tsvを使用します。 - Key Vault にロールを割り当てます。たとえば、アプリケーションにシークレットの読み取りを許可するには、次のようにします。
「」バッシュ
# 例: ロール「Key Vault Secrets ユーザー」をサービス プリンシパルに割り当てる
az role assign create --role "Key Vault Secrets User" --assignee-object-id <オブジェクト アプリケーション/ユーザー ID> --scope /subscriptions/<サブスクリプション ID>/resourceGroups/RG-KeyVault-Artigos/providers/Microsoft.KeyVault/vaults/kv-artigos-seguranca-01
「」
- ヒント: 証明書の場合は、「Key Vault Certificate User」機能を使用できます。
5. Azure App Service との統合 (例)
アプリケーションが Key Vault からシークレットを使用する方法を示してみましょう。
- Azure App Service を作成します (まだ作成していない場合)。 「」バッシュ az appservice plan create --name AppServicePlan-Artigos --resource-group RG-KeyVault-Artigos --sku B1 --is-linux az webapp create --resource-group RG-KeyVault-Artigos --plan AppServicePlan-Artigos --name webapp-artigos-seguranca-01 「」
-
App Service のマネージド ID を有効にします。これにより、App Service は明示的な資格情報なしで Azure Key Vault に対して認証できるようになります。 「」バッシュ az webapp id assign --resource-group RG-KeyVault-Artigos --name webapp-artigos-seguranca-01 「」
-
Key Vault のシークレットにアクセスするためのアクセス許可を App Service マネージド ID に付与します。前のステップで取得した「principalId」を使用します。 「」バッシュ az keyvault set-policy --name kv-artigos-segranca-01 --object-id
--secret-permissions get list 「」 - ヒント: RBAC を使用するには、マネージド ID の
principalIdにKey Vault Secrets Userロールを割り当てます。
- ヒント: RBAC を使用するには、マネージド ID の
-
App Service でシークレット参照を構成します。これにより、アプリケーションは環境変数としてシークレットにアクセスできるようになります。 「」バッシュ az webapp config appsettings set --resource-group RG-KeyVault-Artigos --name webapp-artigos-seguranca-01 --settings DatabasePassword="@Microsoft.KeyVault(SecretUri=https://kv-artigos-seguranca-01.vault.azure.net/secrets/DatabasePassword/)" 「」
-
これで、アプリケーション (ASP.NET Core、Node.js など) は、「DatabasePassword」 シークレットを通常の環境変数として読み取ることができ、Azure App Service が安全な方法で Key Vault からシークレットを取得します。
検証とテスト
シークレットと証明書の管理の検証には、許可されたエンティティのみにアクセスが許可されていること、およびシークレットが正しく取得できることの検証が含まれます。
1. Azure CLI を介したシークレットへのアクセスのテスト
-
権限のないアカウントでシークレットへのアクセスを試みます。 「」バッシュ az login # 権限のないアカウントでログインします az keyvault Secret show --vault-name kv-artigos-seguranca-01 --name DatabasePassword --query value -o tsv 「」
- 期待される結果: コマンドは「AuthorizationFailed」エラーで失敗するはずです。
-
権限を持つアカウント (例: キー V を作成したアカウント) を使用してシークレットへのアクセスを試みます。ault またはアプリケーション内からテストしている場合は App Service マネージド ID)。 「」バッシュ az login # アクセス許可のあるアカウントでログインします az keyvault Secret show --vault-name kv-artigos-seguranca-01 --name DatabasePassword --query value -o tsv 「」
- 期待される結果: コマンドはシークレット値を返す必要があります。
2. 証明書アクセスのテスト
- 認可されたエンティティによって証明書がリストされ、取得できることを確認します。
「」バッシュ
az keyvault 証明書リスト --vault-name kv-artigos-segranca-01
az keyvault 証明書 show --vault-name kv-artigos-seguranca-01 --name MyWebAppCert
「」
- 期待される結果: コマンドは証明書の詳細を返す必要があります。
3. Key Vault 監査ログの確認
Key Vault のすべての操作はログに記録され、監査できます。
- Azure portal で、Key Vault (
kv-articles-segranca-01) に移動します。 - 左側のナビゲーション ペインで、アクティビティ ログを選択します。
- シークレット、証明書、アクセス試行の作成など、実行されたすべての操作のログが表示されます。
セキュリティのヒントとベスト プラクティス
- 最小権限の原則: シークレットと証明書に必要なアクセス許可 (取得、一覧表示、設定、削除) のみを付与します。過剰な権限を付与しないでください。
- シークレットの定期的なローテーション: セキュリティ侵害のリスクを軽減するために、シークレットと証明書を定期的にローテーションするプロセスを実装します。
- マネージド ID: Key Vault への認証には可能な限り Azure リソースのマネージド ID (マネージド ID) を使用してください。これにより、コード内で資格情報を管理する必要がなくなります。
- 詳細なアクセス ポリシー: Key Vault または Azure RBAC アクセス ポリシーを使用して、誰が何にアクセスできるかを制御します。より細かく制御するには RBAC を推奨します。
- 監視とアラート: アクセス試行の失敗やシークレットの削除など、Key Vault の不審なアクティビティに対するアラートを構成します。
- 論理的な削除とパージ保護: Key Vault で論理的な削除とパージ保護を有効にして、シークレットと証明書の偶発的または悪意による損失を防ぎます。
- 定期的なバックアップ: Key Vault は可用性が高いですが、特に災害復旧シナリオのために、シークレットと証明書をバックアップすることを検討してください。
- シークレットの有効期限: シークレットと証明書の有効期限を設定して、ローテーションを強制し、古い認証情報の使用を回避します。
一般的なトラブルシューティング
- 承認エラー (403 禁止): アクセスしようとしているエンティティの Key Vault アクセス ポリシーまたは RBAC ロールの割り当てを確認してください。正しい「Object ID」または「principalId」が使用されていることを確認してください。
- シークレット/証明書が見つかりません: シークレット/証明書名と Key Vault 名を確認してください。シークレット/証明書が存在し、削除されたり期限切れになっていないことを確認してください。
- マネージド ID に関する問題: Azure リソースに対してマネージド ID が有効になっていること、および Key Vault で正しいアクセス許可が付与されていることを確認してください。
- シークレット取得の遅延: 場合によっては、シークレットの取得にわずかな遅延が発生する可能性があります。アプリケーションがこれを非同期的に処理していることを確認してください。
- 接続エラー: アプリケーションまたは仮想マシンのネットワーク設定を確認してください。 Key Vault へのアクセスをブロックしているファイアウォールやネットワーク セキュリティ グループがないことを確認してください。
結論
Azure Key Vault は、クラウド内の最も機密性の高いデジタル資産を保護しようとしている組織にとって重要なサービスです。シークレットと証明書の管理を安全で可用性の高いリポジトリに一元化することで、コンプライアンスが簡素化され、データ侵害のリスクが軽減され、全体的なセキュリティ体制が向上します。 Azure Key Vault を効果的に実装し、セキュリティと自動化のベスト プラクティスと組み合わせることで、開発者とオペレーターは資格情報とキーが保護されていることを認識しながらイノベーションに集中できます。この実践的なガイドにより、セキュリティ専門家は Azure Key Vault を使用してシークレットと証明書を安全かつ効率的に管理し、Azure 内のアプリケーションとデータの整合性と機密性を確保できるようになります。
参考文献:
[1】マイクロソフトラーニング。 Azure Key Vault とは何ですか?。入手可能場所: https://learn.microsoft.com/pt-br/azure/key-vault/general/overview [2] Microsoft Learn。 Azure Key Vault でシークレットを管理するためのベスト プラクティス。入手可能場所: https://learn.microsoft.com/pt-br/azure/key-vault/secrets/secrets-best-practices [3] Microsoft Learn。 Azure Key Vault 証明書について。入手可能場所: https://learn.microsoft.com/pt-br/azure/key-vault/certificates/about-certificates