PowerShellでAzure Key Vaultの秘密情報をセキュアに管理する方法

PowerShellを使用してAzure Key Vault内の秘密情報をセキュアに管理する方法について、その利便性と重要性を紹介します。クラウド環境が一般化する中、機密情報(APIキー、データベース接続文字列、認証情報など)を適切に保護することは、セキュリティ上不可欠です。

Azure Key Vaultは、これらの秘密情報を安全に保存し、アクセス管理を簡略化するためのツールを提供します。さらに、PowerShellを利用することで、自動化と効率化を実現し、管理作業を大幅に簡素化できます。

この記事では、Azure Key Vaultの基本的な使い方から、PowerShellを活用した効率的な操作方法、セキュリティを向上させるベストプラクティスまでを解説します。これにより、クラウドベースのプロジェクトにおける機密情報管理の信頼性を向上させる方法を理解できます。

目次

Azure Key Vaultとは


Azure Key Vaultは、Microsoft Azureが提供するクラウドベースのセキュリティサービスで、機密情報を安全に管理するための機能を提供します。APIキー、パスワード、証明書、暗号化キーなどの秘密情報を保管し、アクセス制御を効率的に行うことができます。

主な機能


Azure Key Vaultが提供する主な機能は以下の通りです:

秘密情報の安全な保存


Key Vaultは、高度な暗号化アルゴリズムを使用して、保存された機密情報を保護します。これにより、データが不正アクセスされるリスクを最小限に抑えます。

アクセス制御


Azure Active Directory (AAD)と統合され、詳細なアクセス制御を設定することができます。これにより、必要な権限を持つユーザーやサービスだけが機密情報にアクセスできます。

バージョン管理


Key Vaultは、秘密情報の変更履歴を追跡する機能を提供します。これにより、過去のバージョンを確認したり、必要に応じて復元することが可能です。

統合性


Azure Functions、App Service、KubernetesなどのAzureサービスと簡単に統合でき、機密情報をコードに埋め込むことなく利用できます。

Azure Key Vaultのメリット

  • セキュリティ強化: 機密情報を暗号化し、安全に保管できます。
  • 管理の簡略化: PowerShellやAzure CLIを使用して、Key Vaultの操作を簡単に自動化できます。
  • コンプライアンス: 規制要件を満たすための監査機能を提供します。

Azure Key Vaultは、セキュリティを重視する開発者や運用チームにとって欠かせないツールです。本記事では、このKey VaultをPowerShellで操作し、セキュリティと利便性を最大化する方法について詳しく解説していきます。

PowerShellによるAzure Key Vaultのセットアップ

PowerShellを使用してAzure Key Vaultをセットアップすることで、迅速かつ効率的に秘密情報を管理できる環境を構築できます。このセクションでは、Key Vaultの作成からアクセス制御の設定までの基本手順を解説します。

前提条件


Key Vaultをセットアップする前に以下を確認してください:

  • Azureアカウントがあり、サブスクリプションにアクセス可能であること
  • Azure PowerShellモジュールがインストールされていること(Install-Module -Name Az -AllowClobberでインストール可能)
  • 適切な権限が付与されていること(「Contributor」または「Owner」ロールなど)

手順1: Azure PowerShellのログイン


以下のコマンドでAzureにログインします。認証情報の入力が求められます。

Connect-AzAccount

手順2: リソースグループの作成


Key Vaultを作成するためには、まずリソースグループを作成します。以下の例では、MyResourceGroupという名前のリソースグループを東日本リージョンに作成しています。

New-AzResourceGroup -Name "MyResourceGroup" -Location "JapanEast"

手順3: Key Vaultの作成


リソースグループ内にKey Vaultを作成します。以下のコマンドを使用します:

New-AzKeyVault -ResourceGroupName "MyResourceGroup" -VaultName "MyKeyVault" -Location "JapanEast"

このコマンドでは、MyKeyVaultという名前でKey Vaultが作成されます。

手順4: アクセス制御の設定


Key Vaultにアクセスするための権限を付与します。以下の例では、現在ログインしているユーザーに「Key Vault Contributor」ロールを付与します:

Set-AzKeyVaultAccessPolicy -VaultName "MyKeyVault" -ObjectId (Get-AzADUser -UserPrincipalName "<あなたのメールアドレス>").Id -PermissionsToSecrets get,set,delete,list

確認


以下のコマンドでKey Vaultの設定を確認できます:

Get-AzKeyVault -VaultName "MyKeyVault"

これで、Azure Key Vaultの基本セットアップが完了しました。次のセクションでは、秘密情報の保存と取得方法について解説します。

秘密情報の保存と取得

Azure Key Vaultは、機密情報を安全に保存し、必要なときに効率的に取得できる便利なツールです。このセクションでは、PowerShellを使ってKey Vaultに秘密情報を保存し、取得する手順を解説します。

手順1: 秘密情報を保存する


以下のコマンドを使用して、Key Vaultに秘密情報を保存します。たとえば、データベース接続文字列やAPIキーを保存する場合の例です:

Set-AzKeyVaultSecret -VaultName "MyKeyVault" -Name "DatabaseConnectionString" -SecretValue (ConvertTo-SecureString "Server=myServer;Database=myDB;User=myUser;Password=myPassword;" -AsPlainText -Force)
  • -VaultName: 保存先のKey Vault名
  • -Name: 保存する秘密情報の名前(例: DatabaseConnectionString
  • -SecretValue: 保存する値。ConvertTo-SecureStringを使用してセキュアに変換します。

手順2: 秘密情報を取得する


保存した秘密情報を取得するには、以下のコマンドを使用します:

$secret = Get-AzKeyVaultSecret -VaultName "MyKeyVault" -Name "DatabaseConnectionString"

取得された秘密情報の値を表示するには、次のコマンドを実行します:

$secret.SecretValueText

手順3: 保存されている秘密情報の一覧を表示する


Key Vault内のすべての秘密情報を一覧表示するには、次のコマンドを使用します:

Get-AzKeyVaultSecret -VaultName "MyKeyVault"

このコマンドは、秘密情報の名前や状態(有効期限など)を一覧で表示します。

手順4: 秘密情報を更新する


既存の秘密情報を更新する場合は、新しい値を使用して再度Set-AzKeyVaultSecretコマンドを実行します:

Set-AzKeyVaultSecret -VaultName "MyKeyVault" -Name "DatabaseConnectionString" -SecretValue (ConvertTo-SecureString "Server=newServer;Database=newDB;User=newUser;Password=newPassword;" -AsPlainText -Force)

手順5: 秘密情報を削除する


不要になった秘密情報を削除するには、以下のコマンドを使用します:

Remove-AzKeyVaultSecret -VaultName "MyKeyVault" -Name "DatabaseConnectionString"

補足: 失効日と有効期限の設定


秘密情報に有効期限を設定することで、期限切れになった場合の自動失効を実現できます。以下の例では、有効期限を指定して保存します:

Set-AzKeyVaultSecret -VaultName "MyKeyVault" -Name "TemporaryKey" -SecretValue (ConvertTo-SecureString "TemporaryValue" -AsPlainText -Force) -Expires (Get-Date).AddDays(30)

セキュリティ上の注意点

  • 必要な権限のみを付与し、不要なアクセスを防止する。
  • 機密情報はスクリプトにハードコーディングしない。Key Vaultを利用して外部管理する。
  • 定期的に秘密情報を更新し、セキュリティリスクを軽減する。

これで、PowerShellを使用したAzure Key Vaultでの秘密情報の保存と取得が完了しました。次のセクションでは、バージョン管理について説明します。

バージョン管理の重要性と実践

Azure Key Vaultは、保存された秘密情報にバージョン管理機能を提供し、過去の値を追跡および復元することができます。この機能により、変更履歴の確認やトラブルシューティングが容易になり、セキュリティと信頼性が向上します。

バージョン管理の重要性

  1. 変更履歴の追跡
    秘密情報の変更内容や更新日時を記録することで、誰が何を変更したかを確認できます。
  2. 復元可能性
    誤って変更した場合でも、過去のバージョンに簡単に戻すことが可能です。
  3. セキュリティ強化
    過去の状態を監査できるため、不正な変更やセキュリティインシデントの検知に役立ちます。

手順1: バージョンの確認


Key Vaultに保存されている秘密情報のすべてのバージョンを確認するには、以下のコマンドを使用します:

Get-AzKeyVaultSecret -VaultName "MyKeyVault" -Name "DatabaseConnectionString" -IncludeVersions

このコマンドは、各バージョンのID、作成日、有効期限などをリストとして出力します。

手順2: 特定のバージョンを取得


過去のバージョンの秘密情報を取得するには、バージョンIDを指定します:

Get-AzKeyVaultSecret -VaultName "MyKeyVault" -Name "DatabaseConnectionString" -Version "<VersionId>"

取得した秘密情報を表示する場合:

$secret.SecretValueText

手順3: バージョンを復元する


過去のバージョンを現在の値として復元するには、そのバージョンを再度保存します:

Set-AzKeyVaultSecret -VaultName "MyKeyVault" -Name "DatabaseConnectionString" -SecretValue (Get-AzKeyVaultSecret -VaultName "MyKeyVault" -Name "DatabaseConnectionString" -Version "<VersionId>").SecretValue

これにより、指定したバージョンの値が最新のバージョンとして保存されます。

手順4: バージョンの削除


不要なバージョンを削除することも可能です。ただし、削除は慎重に行う必要があります:

Remove-AzKeyVaultSecret -VaultName "MyKeyVault" -Name "DatabaseConnectionString" -Version "<VersionId>"

ベストプラクティス

  • 定期的なバックアップ: 秘密情報の状態をエクスポートし、災害復旧用に保管します。
  • バージョンの管理ポリシー: 古いバージョンを定期的に削除し、不要なデータを削減します。
  • 監査ログの確認: Key Vaultの監査ログを使用して、すべての変更を記録し、必要に応じて確認します。

補足: 自動化による効率化


PowerShellスクリプトを使用してバージョン管理の操作を自動化することで、時間を節約し、作業エラーを減らすことができます。以下のスクリプトは、特定の秘密情報のすべてのバージョンをリストし、有効期限が切れているバージョンを削除する例です:

$secrets = Get-AzKeyVaultSecret -VaultName "MyKeyVault" -Name "DatabaseConnectionString" -IncludeVersions
foreach ($secret in $secrets) {
    if ($secret.Expires -lt (Get-Date)) {
        Remove-AzKeyVaultSecret -VaultName "MyKeyVault" -Name "DatabaseConnectionString" -Version $secret.Version
    }
}

これで、Azure Key Vaultのバージョン管理機能の活用方法が理解できました。次のセクションでは、セキュリティベストプラクティスについて説明します。

セキュリティベストプラクティス

Azure Key Vaultを使用する際、セキュリティを確保することは最重要課題です。適切な設定や運用を行うことで、不正アクセスやデータ漏洩のリスクを最小限に抑えることができます。このセクションでは、Key Vaultのセキュリティを強化するためのベストプラクティスを紹介します。

1. アクセス制御を厳格に設定する


Azure Key VaultはAzure Active Directory (AAD)と連携してアクセス制御を行います。以下の点を考慮して設定を行いましょう。

1.1 必要最小限の権限付与


「最小権限の原則」に基づき、ユーザーやアプリケーションに必要最小限の権限のみを付与します。たとえば、以下のコマンドで特定のユーザーにシークレットの読み取り権限のみを付与します:

Set-AzKeyVaultAccessPolicy -VaultName "MyKeyVault" -ObjectId "<UserObjectId>" -PermissionsToSecrets get

1.2 アクセス制御の定期的なレビュー


定期的にアクセス権を確認し、不要な権限を削除します。以下のコマンドで現在のアクセス制御ポリシーを確認できます:

Get-AzKeyVaultAccessPolicy -VaultName "MyKeyVault"

2. ネットワークの制限を有効化する


Key Vaultにアクセスできるネットワークを制限することで、セキュリティを向上させます。

2.1 ファイアウォールの設定


Azure Key Vaultのファイアウォールを構成し、許可されたIPアドレスや仮想ネットワークのみがアクセスできるように設定します:

Set-AzKeyVaultNetworkRuleSet -VaultName "MyKeyVault" -Bypass AzureServices -DefaultAction Deny -IpAddressRange @("203.0.113.0/24")

2.2 プライベートリンクの活用


Key VaultへのアクセスをAzureのプライベートリンク経由に限定することで、セキュリティをさらに強化できます。

3. 監査とログの活用


すべての操作を記録し、セキュリティインシデントを迅速に特定できるようにすることが重要です。

3.1 Azure Monitorの統合


Azure MonitorやLog Analyticsを活用して、Key Vaultの操作ログを監視します。以下のコマンドで監査ログを有効化できます:

Set-AzDiagnosticSetting -ResourceId (Get-AzKeyVault -VaultName "MyKeyVault").ResourceId -WorkspaceId "<LogAnalyticsWorkspaceId>" -Enabled $true

3.2 アラートの設定


異常なアクセスや失敗した操作を検知するアラートを設定し、問題が発生した際に即時対応できるようにします。

4. 秘密情報の自動ローテーション


秘密情報が長期間にわたり同じ状態で使用されることはセキュリティリスクを高めます。Key Vaultのシークレット更新を自動化することで、このリスクを軽減します。

4.1 Azure Automationによるローテーション


Azure Automationアカウントを使用して定期的なローテーションスクリプトを実行します。

4.2 イベントトリガーによる更新


Key Vaultのイベント機能を使用して、特定の条件でシークレットを自動更新するプロセスを構築します。

5. データ暗号化の設定


Azure Key Vaultは保存時にデータを暗号化しますが、さらにセキュリティを強化するために、カスタムキーを使用することも可能です。

5.1 カスタムキーによる暗号化


Key Vaultのカスタムキーを作成して使用します。以下は例です:

Add-AzKeyVaultKey -VaultName "MyKeyVault" -Name "MyCustomKey" -Destination Software

6. ベストプラクティスの運用例

  • 定期的な秘密情報の更新スケジュールを設定する。
  • セキュリティスキャンツールを使用してKey Vaultの構成をチェックする。
  • Key Vaultに保存するデータの種類と数を最小限に抑える。

これらのベストプラクティスを実践することで、Azure Key Vaultを最大限に活用し、安全で信頼性の高いシークレット管理を実現できます。次のセクションでは、Key Vaultを他のAzureサービスと統合する方法について解説します。

応用例:Key Vaultと他サービスの統合

Azure Key Vaultは、他のAzureサービスと簡単に統合することで、秘密情報管理を効率化し、セキュリティを強化できます。このセクションでは、Key VaultをAzure FunctionsやApp Serviceと統合する方法を紹介します。

1. Azure Functionsとの統合


Azure Functionsは、サーバーレス環境でコードを実行できるサービスです。Key Vaultと統合することで、機密情報を関数コードに埋め込むことなく安全に利用できます。

1.1 マネージドIDの有効化


Azure FunctionsでKey Vaultを利用するには、マネージドIDを有効化し、Key Vaultへのアクセス権を設定します。

# Azure FunctionsにマネージドIDを有効化
Set-AzFunctionApp -ResourceGroupName "MyResourceGroup" -Name "MyFunctionApp" -AssignIdentity $true

# Key Vaultへのアクセス権を付与
Set-AzKeyVaultAccessPolicy -VaultName "MyKeyVault" -ObjectId (Get-AzFunctionApp -ResourceGroupName "MyResourceGroup" -Name "MyFunctionApp").Identity.PrincipalId -PermissionsToSecrets get

1.2 Key Vaultのシークレットを関数で利用


Key Vaultから秘密情報を取得するには、環境変数で参照する方法が推奨されます。Azure Functionsの設定にKey Vaultリファレンスを追加します:

@Microsoft.KeyVault(SecretUri=https://MyKeyVault.vault.azure.net/secrets/DatabaseConnectionString/)

関数コードでは環境変数を使用して秘密情報を取得します:

string dbConnectionString = Environment.GetEnvironmentVariable("DatabaseConnectionString");

2. Azure App Serviceとの統合


Azure App ServiceもKey Vaultと統合することで、安全な秘密情報管理が可能です。

2.1 App ServiceにマネージドIDを有効化


以下のコマンドでApp ServiceにマネージドIDを有効化します:

Set-AzWebApp -ResourceGroupName "MyResourceGroup" -Name "MyAppService" -AssignIdentity $true

2.2 Key Vaultのアクセス権を設定


App ServiceのマネージドIDにKey Vaultのアクセス権を付与します:

Set-AzKeyVaultAccessPolicy -VaultName "MyKeyVault" -ObjectId (Get-AzWebApp -ResourceGroupName "MyResourceGroup" -Name "MyAppService").Identity.PrincipalId -PermissionsToSecrets get

2.3 App Serviceの設定でKey Vaultを参照


App Serviceの「設定」セクションで、Key Vaultリファレンスを設定します:

@Microsoft.KeyVault(SecretUri=https://MyKeyVault.vault.azure.net/secrets/MySecret/)

アプリケーションコード内では環境変数を使用してシークレットを取得します。

3. Azure DevOpsとの統合


Azure DevOpsのパイプラインでKey Vaultの秘密情報を使用することも可能です。以下はその設定方法です。

3.1 Key Vaultタスクを追加


Azure DevOpsパイプラインにAzureKeyVault@2タスクを追加し、Key Vaultの秘密情報を読み取ります:

- task: AzureKeyVault@2
  inputs:
    azureSubscription: 'MyAzureServiceConnection'
    KeyVaultName: 'MyKeyVault'

3.2 シークレットの利用


取得したシークレットは、パイプライン内の変数として利用可能です:

- script: echo $(MySecret)

4. Kubernetes(AKS)との統合


Azure Key VaultをAzure Kubernetes Service (AKS) と統合し、Pod内でKey Vaultのシークレットを利用することも可能です。

4.1 Azure Key Vault Providerの設定


AKSクラスターでKey Vault Provider for Secrets Store CSI Driverを構成します。

4.2 マネージドIDの設定


AKSクラスターのノードにマネージドIDを割り当て、Key Vaultへのアクセス権を付与します。

まとめ


Key Vaultは、多くのAzureサービスとシームレスに統合でき、機密情報管理の効率化とセキュリティ強化を実現します。これにより、各サービスの設定やコードに機密情報を直接記述するリスクを大幅に軽減できます。次のセクションでは、これまでの内容を総括します。

まとめ

本記事では、PowerShellを活用してAzure Key Vaultを効率的かつセキュアに管理する方法を解説しました。Azure Key Vaultの基本的な機能、セットアップ手順、秘密情報の保存と取得、バージョン管理、セキュリティベストプラクティス、そしてAzure FunctionsやApp Serviceなどの他サービスとの統合方法について詳しく説明しました。

Azure Key Vaultを適切に活用することで、機密情報の漏洩リスクを最小化し、効率的な管理を実現できます。また、マネージドIDやネットワーク制限、ログ監視などを組み合わせることで、より強固なセキュリティ対策が可能です。

この記事の内容を参考に、Azure Key Vaultを活用した安全な秘密情報管理を始めてみてください。

コメント

コメントする

目次