使用 Azure CLI 來管理 Key Vault

此文章涵蓋如何運用 Azure CLI 來開始使用 Azure Key Vault。 請查看下列資訊:

  • 如何在 Azure 中建立強行寫入的容器 (保存庫)
  • 將金鑰、祕密或憑證新增至金鑰保存庫
  • 向 Microsoft Entra ID 註冊應用程式
  • 授權應用程式使用金鑰或祕密
  • 設定金鑰保存庫進階存取原則
  • 使用硬體安全模組 (HSM)
  • 刪除金鑰保存庫及相關聯的金鑰和密碼
  • 其他 Azure 跨平台命令列介面命令

大部分地區均提供 Azure 金鑰保存庫。 如需詳細資訊,請參閱 金鑰保存庫價格頁面

注意

本文並未說明如何撰寫其中一個步驟所包含的 Azure 應用程式,但會示範如何授權應用程式使用金鑰保存庫中的金鑰或密碼。

如需 Azure Key Vault 的概觀,請參閱什麼是 Azure Key Vault? 如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶

必要條件

若要使用本文中的 Azure CLI 命名,您必須具有下列項目:

  • 訂閱 Microsoft Azure。 如果您沒有帳戶,您可以註冊免費試用
  • Azure CLI 2.0 版或更新版本。 若要安裝最新版本,請參閱安裝 Azure CLI
  • 可將應用程式設定為使用您在本文中所建立的金鑰或密碼。 您可以在 Microsoft 下載中心找到範例應用程式。 如需相關指示,請參閱內含的讀我檔案。

取得使用 Azure 跨平台命令列介面的說明

本文假設您熟悉命令列介面 (Bash、終端機、命令提示字元)。

--help 或 -h 參數可用於檢視特定命令的說明。 或者,也可以使用 Azure help [command] [options] 格式。 不確定命令所需的參數時,請查閱說明。 例如,以下命令全部都會傳回相同的資訊:

az account set --help
az account set -h

您也可以閱讀下列文章,以熟悉 Azure 跨平台命令列介面中的 Azure 資源管理員:

如何在 Azure 中建立強行寫入的容器 (保存庫)

保存庫由硬體安全性模組 (HSM) 支援的安全容器。 保存庫藉由集中儲存應用程式祕密,協助減少意外遺失安全性資訊的機會。 Key Vault 也會控制和記錄其中所儲存項目的存取權。 Azure Key Vault 可以處理要求及更新傳輸層安全性 (TLS) 憑證,並提供穩健憑證生命週期管理解決方案所需的功能。 在後續步驟中,您將建立保存庫。

連線到您的訂閱

若要以互動方式登入,請使用下列命令:

az login

若要使用組織帳戶進行登入,您可以傳入使用者名稱和密碼。

az login -u username@domain.com -p password

如果您有多個訂用帳戶,並且需要指定要使用哪一個,請輸入下列內容以查看您帳戶的訂用帳戶:

az account list

使用訂用帳戶參數指定訂用帳戶。

az account set --subscription <subscription name or ID>

如需設定 Azure 跨平台命令列介面的詳細資訊,請參閱安裝 Azure CLI

建立新的資源群組

使用 Azure 資源管理員時,會在資源群組內建立所有相關資源。 您可以在現有的資源群組中建立金鑰保存庫。 如果您想使用新的資源群組,可以建立一個新的。

az group create -n "ContosoResourceGroup" -l "East Asia"

第一個參數是資源群組名稱,而第二個參數是位置。 若要取得所有可能位置類型的清單:

az account list-locations

註冊金鑰保存庫資源提供者

當您嘗試建立新的金鑰保存庫時,可能會看到「訂用帳戶未登錄要使用命名空間 'Microsoft.KeyVault'」錯誤。 如果出現該訊息,請確定是否已在訂用帳戶中註冊 Key Vault 資源提供者。 每個訂用帳戶只需執行一次此作業。

az provider register -n Microsoft.KeyVault

建立金鑰保存庫

使用 az keyvault create 命令來建立金鑰保存庫。 這個指令碼包含三個必要參數:資源群組名稱、金鑰保存庫名稱和地理位置。

若要在位於東亞位置的 ContosoResourceGroup 資源群組中,建立名稱為 ContosoKeyVault 的新保存庫,請輸入:

az keyvault create --name "ContosoKeyVault" --resource-group "ContosoResourceGroup" --location "East Asia"

此命令的輸出會顯示您所建立的金鑰保存庫屬性。 兩個最重要屬性是:

  • name:在此範例中,名稱是 ContosoKeyVault。 您將在其他 Key Vault 命令中使用此名稱。
  • vaultUri:在此範例中,URI 是 https://contosokeyvault.vault.azure.net。 透過其 REST API 使用保存庫的應用程式必須使用此 URI。

您的 Azure 帳戶現已取得在此金鑰保存庫上執行任何作業的授權。 而且,沒有其他人已獲授權。

將金鑰、祕密或憑證新增至金鑰保存庫

如果您想讓 Azure Key Vault 為您建立一個軟體防護金鑰,請使用 az key create 命令。

az keyvault key create --vault-name "ContosoKeyVault" --name "ContosoFirstKey" --protection software

如果您在 .pem 檔案中有現有的金鑰,您可以將它上傳至 Azure Key Vault。 您可以選擇使用軟體或 HSM 保護金鑰。 此範例會從 .pem 檔案匯入金鑰,並使用軟體及使用密碼 "hVFkk965BuUv" 來保護它:

az keyvault key import --vault-name "ContosoKeyVault" --name "ContosoFirstKey" --pem-file "./softkey.pem" --pem-password "hVFkk965BuUv" --protection software

您現在可以參照您所建立或上傳至 Azure 金鑰保存庫的金鑰 (藉由使用其 URI)。 使用 https://ContosoKeyVault.vault.azure.net/keys/ContosoFirstKey 以一律可取得最新版本。 使用 https://<keyvault-name>.vault.azure.net/keys/<keyname>/<key-unique-id> 以取得此特定版本。 例如: https://ContosoKeyVault.vault.azure.net/keys/ContosoFirstKey/cgacf4f763ar42ffb0a1gca546aygd87

將祕密 (一個名為 SQLPassword 且其 Azure Key Vault 的值為 "hVFkk965BuUv" 的密碼) 新增至保存庫。

az keyvault secret set --vault-name "ContosoKeyVault" --name "SQLPassword" --value "hVFkk965BuUv "

使用此密碼的 URI 參考此密碼。 使用 https://ContosoVault.vault.azure.net/secrets/SQLPassword 可一律取得目前的版本,使用 https://<keyvault-name>.vault.azure.net/secret/<secret-name>/<secret-unique-id> 則可取得此特定版本。 例如: https://ContosoVault.vault.azure.net/secrets/SQLPassword/90018dbb96a84117a0d2847ef8e7189d

使用 .pem 或 .pfx 將憑證匯入至保存庫。

az keyvault certificate import --vault-name "ContosoKeyVault" --file "c:\cert\cert.pfx" --name "ContosoCert" --password "hVFkk965BuUv"

讓我們檢視您所建立的金鑰、祕密或憑證:

  • 若要檢視您的金鑰,請輸入:
az keyvault key list --vault-name "ContosoKeyVault"
  • 若要檢視您的祕密,請輸入:
az keyvault secret list --vault-name "ContosoKeyVault"
  • 若要檢視您的憑證,請輸入:
az keyvault certificate list --vault-name "ContosoKeyVault"

向 Microsoft Entra ID 註冊應用程式

這步驟通常會由開發人員在個別電腦上完成。 這並非 Azure Key Vault 的特有狀況,在此列出是為了提醒注意。 若要完成應用程式註冊,您的帳戶、保存庫及應用程式都必須位於相同的 Azure 目錄中。

使用金鑰保存庫的應用程式必須使用 Microsoft Entra ID 的權杖進行驗證。 應用程式擁有者必須先在 Microsoft Entra 中註冊該應用程式。 註冊結束時,應用程式擁有者會取得下列值:

  • 應用程式識別碼 (也稱為 Microsoft Entra 用戶端識別碼或 appID)
  • 驗證金鑰 (也稱為共用密碼)。

應用程式必須向 Microsoft Entra ID 出示這兩個值才能取得權杖。 設定應用程式以取得權杖的方式取決於應用程式。 在 Key Vault 範例應用程式中,應用程式擁有者會在 app.config 檔案中設定這些值。

如需有關使用 Microsoft Entra ID 來註冊應用程式的詳細步驟,您應檢閱標題為整合應用程式與 Microsoft Entra ID使用入口網站來建立可存取資源的 Microsoft Entra 應用程式和服務主體使用 Azure CLI 來建立 Azure 服務主體的文章。

若要在 Microsoft Entra ID 中註冊應用程式:

az ad sp create-for-rbac -n "MyApp" --password "hVFkk965BuUv" --role Contributor --scopes /subscriptions/<subscription id>
# If you don't specify a password, one will be created for you.

授權應用程式使用金鑰或祕密

若要授權應用程式存取保存庫中的金鑰或密碼,請使用 az keyvault set-policy 命令。

例如,如果您的保存庫名稱是 ContosoKeyVault,而且您想要授權應用程式解密並使用保存庫中的密鑰進行簽署,請使用下列命令搭配您的應用程式識別碼:

az keyvault set-policy --name "ContosoKeyVault" --spn {application-id} --key-permissions decrypt sign

若要授權相同的應用程式讀取您保存庫中的機密資料,請輸入以下命令:

az keyvault set-policy --name "ContosoKeyVault" --spn {application-id} --secret-permissions get

設定金鑰保存庫進階存取原則

使用 az keyvault update 啟用金鑰保存庫的進階的原則。

啟用 Key Vault 以供部署:允許虛擬機器從保存庫擷取儲存為祕密的憑證。

az keyvault update --name "ContosoKeyVault" --resource-group "ContosoResourceGroup" --enabled-for-deployment "true"

啟用 Key Vault 以供磁碟加密:使用保存庫進行 Azure 磁碟加密時所需。

az keyvault update --name "ContosoKeyVault" --resource-group "ContosoResourceGroup" --enabled-for-disk-encryption "true"

啟用 Key Vault 以供範本部署:允許 Resource Manager 從保存庫擷取祕密。

az keyvault update --name "ContosoKeyVault" --resource-group "ContosoResourceGroup" --enabled-for-template-deployment "true"

使用硬體安全模組 (HSM)

為了加強保證,您可以從硬體安全模組 (HSM) 匯入或產生無需離開 HSM 界限的金鑰。 HSM 已 驗證 FIPS 140。 如果此需求對您不適用,請略過本節並移至「刪除金鑰保存庫及相關聯的金鑰和密碼」。

若要建立這些受 HSM 保護的金鑰,您必須具備支援受 HSM 保護之金鑰的保存庫訂閱。

建立金鑰保存庫時,請新增 'sku' 參數:

az keyvault create --name "ContosoKeyVaultHSM" --resource-group "ContosoResourceGroup" --location "East Asia" --sku "Premium"

您可以將軟體防護金鑰 (如稍早所示) 和受 HSM 保護的金鑰新增至此保存庫。 若要建立受 HSM 保護的金鑰,請將 [目的地] 參數設為 'HSM':

az keyvault key create --vault-name "ContosoKeyVaultHSM" --name "ContosoFirstHSMKey" --protection "hsm"

您可以使用下列命令,從電腦上的 .pem 檔案匯入金鑰。 此命令會將金鑰匯入金鑰保存庫服務中的 HSM:

az keyvault key import --vault-name "ContosoKeyVaultHSM" --name "ContosoFirstHSMKey" --pem-file "/.softkey.pem" --protection "hsm" --pem-password "PaSSWORD"

下一個命令會匯入「自備金鑰」(BYOK) 封包。 這可讓您在您的本機 HSM 中產生金鑰,且在金鑰無需離開 HSM 界限的情況下,即可將它傳輸到金鑰保存庫服務中的 HSM:

az keyvault key import --vault-name "ContosoKeyVaultHSM" --name "ContosoFirstHSMKey" --byok-file "./ITByok.byok" --protection "hsm"

如需有關如何產生此 BYOK 封包的詳細指示,請參閱 如何使用 Azure 金鑰保存庫中受 HSM 保護的金鑰

刪除金鑰保存庫及相關聯的金鑰和密碼

如果您不再需要金鑰保存庫及其所金鑰或祕密,可以使用 az keyvault delete 命令來刪除金鑰保存庫:

az keyvault delete --name "ContosoKeyVault"

或者,您可以刪除整個 Azure 資源群組,其中包括金鑰保存庫和您加入該群組的任何其他資源:

az group delete --name "ContosoResourceGroup"

其他 Azure 跨平台命令列介面命令

可能有助於管理 Azure Key Vault 的其他命令。

此命令會列出以表格形式顯示的所有金鑰和所選屬性:

az keyvault key list --vault-name "ContosoKeyVault"

此命令會顯示指定金鑰的完整屬性清單:

az keyvault key show --vault-name "ContosoKeyVault" --name "ContosoFirstKey"

此命令會列出以表格形式顯示的所有密碼名稱和所選屬性:

az keyvault secret list --vault-name "ContosoKeyVault"

以下是如何移除特定金鑰的範例:

az keyvault key delete --vault-name "ContosoKeyVault" --name "ContosoFirstKey"

以下是如何移除特定密碼的範例:

az keyvault secret delete --vault-name "ContosoKeyVault" --name "SQLPassword"

下一步