使用 PowerShell 管理 Azure Stack Hub 中的 金鑰保存庫
本文說明如何使用 PowerShell 在 Azure Stack Hub 中建立和管理密鑰保存庫。 您將瞭解如何使用 金鑰保存庫 PowerShell Cmdlet 來:
- 建立金鑰保存庫。
- 儲存和管理密碼編譯密鑰和秘密。
- 授權使用者或應用程式叫用保存庫中的作業。
注意
本文所述的 金鑰保存庫 PowerShell Cmdlet 是在 Azure PowerShell SDK 中提供。
必要條件
- 您必須訂閱包含 Azure 金鑰保存庫 服務的供應專案。
- 安裝適用於 Azure Stack Hub 的 PowerShell。
- 設定 Azure Stack Hub PowerShell 環境。
啟用租用戶訂用帳戶以進行 金鑰保存庫 作業
您必須先確定您的租使用者訂用帳戶已啟用保存庫作業,才能對密鑰保存庫發出任何作業。 若要確認金鑰保存庫作業已啟用,請執行下列命令:
Get-AzResourceProvider -ProviderNamespace Microsoft.KeyVault | ft -Autosize
如果您的訂用帳戶已啟用保存庫作業,輸出會顯示 RegistrationState 是 針對密鑰保存庫的所有資源類型註冊 。
如果未啟用保存庫作業,請發出下列命令,在您的訂用帳戶中註冊 金鑰保存庫 服務:
Register-AzResourceProvider -ProviderNamespace Microsoft.KeyVault
如果註冊成功,則會傳回下列輸出:
當您叫用金鑰保存庫命令時,可能會收到錯誤,例如「訂用帳戶未註冊為使用命名空間 』Microsoft.KeyVault』」。如果您收到錯誤,請遵循先前的指示,確認您已啟用 金鑰保存庫 資源提供者。
建立金鑰保存庫
建立金鑰保存庫之前,請先建立資源群組,讓與金鑰保存庫相關的所有資源都存在於資源群組中。 使用下列命令來建立新的資源群組:
New-AzResourceGroup -Name "VaultRG" -Location local -verbose -Force
現在,使用下列 Cmdlet 在稍早建立的資源群組中建立密鑰保存庫。 此命令會讀取三個必要參數:資源組名、金鑰保存庫名稱和地理位置。
執行下列命令來建立金鑰儲存庫:
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 Cmdlet 在密鑰保存庫中建立或匯入受軟體保護的密鑰:
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 Cmdlet 來讀取金鑰及其詳細資料:
Get-AzureKeyVaultKey -VaultName "Vault01" -Name "Key01"
建立密碼
使用 Set-AzureKeyVaultSecret Cmdlet 在保存庫中建立或更新秘密。 如果秘密不存在,就會建立秘密。 如果秘密已經存在,則會建立新版本的密碼:
$secretvalue = ConvertTo-SecureString "User@123" -AsPlainText -Force
Set-AzureKeyVaultSecret -VaultName "Vault01" -Name "Secret01" -SecretValue $secretvalue
取得祕密
使用 Get-AzureKeyVaultSecret Cmdlet 讀取密鑰保存庫中的秘密。 此指令可以傳回秘密的所有或特定版本:
Get-AzureKeyVaultSecret -VaultName "Vault01" -Name "Secret01"
建立金鑰和秘密之後,您可以授權外部應用程式使用這些金鑰和秘密。
授權應用程式使用金鑰或秘密
使用下列 Cmdlet 來授權應用程式存取金鑰保存庫中的金鑰或秘密。
在下列範例中,保存庫名稱為 ContosoKeyVault,而您想要授權的應用程式具有用戶端標識碼 00001111-aaaa-2222-bbbb-3333cccc4444。 若要授權應用程式,請執行下列命令。 您也可以指定 PermissionsToKeys 參數來設定使用者、應用程式或安全組的許可權。
針對設定 Azure Stack Hub 環境的 AD FS 使用 Cmdlet 時,應該提供 BypassObjectIdValidation 參數
Set-AzKeyVaultAccessPolicy -VaultName 'ContosoKeyVault' -ServicePrincipalName 00001111-aaaa-2222-bbbb-3333cccc4444 -PermissionsToKeys decrypt,sign -BypassObjectIdValidation
如果您要授權該相同應用程式讀取儲存庫中的秘密,請執行下列 Cmdlet:
Set-AzKeyVaultAccessPolicy -VaultName 'ContosoKeyVault' -ServicePrincipalName 8f8c4bbd-485b-45fd-98f7-ec6300 -PermissionsToKeys Get -BypassObjectIdValidation