PowerShell を使用した Azure Stack Hub での Key Vault の管理
この記事では、Azure Stack Hub で PowerShell を使用してキー コンテナーを作成および管理する方法について説明します。 Key Vault の PowerShell コマンドレットを使用して以下を行う方法について説明します。
- キー コンテナーを作成してください。
- 暗号化キーとシークレットを格納および管理する。
- ユーザーまたはアプリに対して、コンテナーで操作を呼び出すことを許可する。
Note
この記事で説明する Key Vault の PowerShell コマンドレットは、Azure PowerShell SDK で提供されます。
前提条件
- Azure Key Vault サービスを含むプランをサブスクライブする必要があります。
- PowerShell for Azure Stack Hub をインストールします。
- Azure Stack Hub の PowerShell 環境を構成します。
Key Vault 操作のためのテナント サブスクリプションの有効化
キー コンテナーに対してなんらかの操作を発行するには、テナント サブスクリプションでコンテナー操作が有効になっていることを確認する必要があります。 キー コンテナー操作が有効になっていることを確認するには、次のコマンドを実行します。
Get-AzResourceProvider -ProviderNamespace Microsoft.KeyVault | ft -Autosize
サブスクリプションでコンテナー操作が有効になっている場合は、出力のキー コンテナーのすべてのリソースの種類で RegistrationState が Registered と表示されます。
コンテナー操作が有効になっていない場合は、次のコマンドを発行して、自分のサブスクリプションで Key Vault サービスを登録します。
Register-AzResourceProvider -ProviderNamespace Microsoft.KeyVault
登録に成功した場合は、次の出力が返されます。
Key Vault コマンドを呼び出すと、"サブスクリプションは名前空間 'Microsoft.KeyVault' を使用するように登録されていません" などのエラーが表示されることがあります。エラーが発生した場合は、前の手順に従って Key Vault リソース プロバイダーを有効にしたことを確認します。
Key Vault を作成します
キー コンテナーを作成する前に、リソース グループを作成し、このリソース グループに、キー コンテナー関連のすべてのリソースが存在するようにしておきます。 次のコマンドを使用して、新しいリソース グループを作成します。
New-AzResourceGroup -Name "VaultRG" -Location local -verbose -Force
次のコマンドレットを使用して、以前に作成したリソース グループ内にキー コンテナーを作成します。 このコマンドは、3 つの必須パラメーター (リソース グループ名、キー コンテナー名、地理的な場所) を読み取ります。
次のコマンドを実行して、キー コンテナーを作成します。
New-AzKeyVault -VaultName "Vault01" -ResourceGroupName "VaultRG" -Location local -verbose
このコマンドの出力は、作成したキー コンテナーのプロパティを示します。 アプリでは、このコンテナーにアクセスするときに、Vault URI プロパティ (この例では https://vault01.vault.local.azurestack.external
) を使用する必要があります。
Active Directory フェデレーション サービス (AD FS) のデプロイ
AD FS のデプロイでは、"アクセス ポリシーが設定されていません。 このコンテナーを使用するためのアクセス許可が与えられたユーザーまたはアプリケーションはありません。" この問題を解決するには Set-AzKeyVaultAccessPolicy コマンドを使用してコンテナーのアクセス ポリシーを設定します。
# Obtain the security identifier(SID) of the active directory user
$adUser = Get-ADUser -Filter "Name -eq '{Active directory user name}'"
$objectSID = $adUser.SID.Value
# Set the key vault access policy
Set-AzKeyVaultAccessPolicy -VaultName "{key vault name}" -ResourceGroupName "{resource group name}" -ObjectId "{object SID}" -PermissionsToKeys {permissionsToKeys} -PermissionsToSecrets {permissionsToSecrets} -BypassObjectIdValidation
キーとシークレットの管理
コンテナーを作成したら、これらの手順を使用して、コンテナーでキーとシークレットを作成および管理します。
キーの作成
Add-AzureKeyVaultKey コマンドレットを使用して、キー コンテナーにソフトウェアで保護されたキーを作成またはインポートします。
Add-AzureKeyVaultKey -VaultName "Vault01" -Name "Key01" -verbose -Destination Software
-Destination
パラメーターは、そのキーがソフトウェアで保護されることを指定するために使用されます。 キーが正常に作成されると、作成されたキーの詳細が出力されます。
これで、作成されたキーの URI を使用してそのキーを参照できます。 既存のキーと同じ名前のキーを作成またはインポートした場合、元のキーは、新しいキーで指定される値で更新されます。 前のバージョンにアクセスするには、キーのバージョン固有の URI を使用します。 次に例を示します。
https://vault10.vault.local.azurestack.external:443/keys/key01
を使用して、常に現在のバージョンを取得します。https://vault010.vault.local.azurestack.external:443/keys/key01/d0b36ee2e3d14e9f967b8b6b1d38938a
を使用して、この特定のバージョンを取得します。
キーの取得
Get-AzureKeyVaultKey コマンドレットを使用して、キーとその詳細を読み取ります。
Get-AzureKeyVaultKey -VaultName "Vault01" -Name "Key01"
シークレットを作成します
Set-AzureKeyVaultSecret コマンドレットを使用して、コンテナー内のシークレットを作成または更新します。 シークレットがまだ存在しない場合は、作成されます。 既に存在する場合は、新しいバージョンのシークレットが作成されます。
$secretvalue = ConvertTo-SecureString "User@123" -AsPlainText -Force
Set-AzureKeyVaultSecret -VaultName "Vault01" -Name "Secret01" -SecretValue $secretvalue
シークレットを取得します
Get-AzureKeyVaultSecret コマンドレットを使用して、キー コンテナー内のシークレットを読み取ります。 このコマンドでは、シークレットのすべてのバージョンまたは特定のバージョンを返すことができます。
Get-AzureKeyVaultSecret -VaultName "Vault01" -Name "Secret01"
キーとシークレットを作成したら、そのキーとシークレットを外部アプリが使用することを承認できます。
アプリに対してキーまたはシークレットの使用を許可する
アプリがキー コンテナー内のキーまたはシークレットにアクセスすることを承認するには、次のコマンドレットを使用します。
次の例では、コンテナー名は ContosoKeyVault であり、承認するアプリのクライアント ID は 00001111-aaaa-2222-bbbb-3333cccc4444 です。 アプリを承認するには、次のコマンドを実行します。 また、PermissionsToKeys パラメーターを指定し、ユーザー、アプリ、またはセキュリティ グループに対してアクセス許可を設定することもできます。
AD FS が構成された Azure Stack Hub 環境に対してこのコマンドレットを使用する場合、パラメーター BypassObjectIdValidation を指定する必要があります
Set-AzKeyVaultAccessPolicy -VaultName 'ContosoKeyVault' -ServicePrincipalName 00001111-aaaa-2222-bbbb-3333cccc4444 -PermissionsToKeys decrypt,sign -BypassObjectIdValidation
その同じアプリがコンテナーのシークレットを読み取ることを承認する場合は、次のコマンドレットを実行します。
Set-AzKeyVaultAccessPolicy -VaultName 'ContosoKeyVault' -ServicePrincipalName 8f8c4bbd-485b-45fd-98f7-ec6300 -PermissionsToKeys Get -BypassObjectIdValidation