分享方式:


使用 Key Vault 和 Azure CLI (舊版) 管理儲存體帳戶金鑰

重要

Key Vault 受控儲存體帳戶金鑰 (舊版) 會依現狀支援,且不會再規劃任何更新。 只有帳戶 SAS 支援 SAS 定義簽署的儲存體服務版本 (2018-03-28 以前的版本)。

重要

Azure CLI 中受控儲存體帳戶金鑰的支援已在 2.54 版中移除,您必須在本教學課程中使用 Azure CLI 2.53.1 版或先前版本的 命令。

重要

建議使用 Azure 儲存體與 Microsoft Entra ID 整合,這是 Microsoft 的雲端式身分識別與存取管理服務。 Microsoft Entra 整合適用於 Azure Blob、佇列和資料表,並提供對 Azure 儲存體的 OAuth2 權杖型存取 (如同 Azure Key Vault)。 Microsoft Entra ID 可讓您使用應用程式或使用者身分識別來驗證用戶端應用程式,而非使用儲存體帳戶認證。 在 Azure 上執行時,可以使用 Microsoft Entra 受控識別。 受控識別能移除用戶端驗證,以及使用應用程式儲存認證或將認證儲存於應用程式中的需求。 只有在無法進行 Microsoft Entra 驗證時,才使用下列解決方案。

Azure 儲存體帳戶會使用由帳戶名稱和金鑰組成的認證。 該金鑰是由系統自動產生,並作為密碼使用,比單純的密碼編譯金鑰具有更多功能。 Key Vault 會在儲存體帳戶中定期重新產生儲存體帳戶金鑰,並提供共用存取簽章權杖,以便委派存取您儲存體帳戶中的資源。

您可以使用 Key Vault 受控儲存體帳戶金鑰功能列出 (同步) 金鑰與 Azure 儲存體帳戶,以及定期重新產生 (輪替) 金鑰。 您可以管理儲存體帳戶和傳統儲存體帳戶的金鑰。

使用受控儲存體帳戶金鑰功能時,請考慮以下幾點:

  • 系統永遠不會傳回金鑰值以回應呼叫者。
  • 只能允許 Key Vault 管理您的儲存體帳戶金鑰。 請勿自行管理金鑰,並避免干擾 Key Vault 程序。
  • 只有單一 Key Vault 物件方能管理儲存體帳戶金鑰。 不允許從多個物件進行金鑰管理。
  • 只能使用 Key Vault 重新產生金鑰。 不要手動重新產生儲存體帳戶金鑰。

重要

直接在儲存體帳戶中重新產生金鑰會中斷受管理的儲存體帳戶設定,且可能會讓使用中的 SAS 權杖失效,並導致中斷。

服務主體的應用程式識別碼

Microsoft Entra 租用戶會為每個已註冊的應用程式提供一個服務主體。 服務主體會作為應用程式識別碼,在授權設定期間用來透過 Azure 角色型存取控制 (Azure RBAC) 存取其他 Azure 資源。

Key Vault 是 Microsoft 應用程式,已在所有 Microsoft Entra 租用戶中預先註冊。 Key Vault 會在每個 Azure 雲端中的相同應用程式識別碼下註冊。

租用戶 雲端 Application ID
Microsoft Entra ID Azure Government 7e7c393b-45d0-48b1-a35e-2905ddf8183c
Microsoft Entra ID Azure 公用 cfa8b339-82a2-471a-a3c9-0fc0be7a4093
其他 任意 cfa8b339-82a2-471a-a3c9-0fc0be7a4093

必要條件

若要完成本指南,您必須先執行下列步驟:

管理儲存體帳戶金鑰

連線至您的 Azure 帳戶

使用 az login 命令驗證您的 Azure CLI 工作階段。

az login

對儲存體帳戶提供 Key Vault 存取權

使用 Azure CLI az role assignment create 命令,授與 Key Vault 存取您的儲存體帳戶。 將下列參數值提供給命令:

  • --role:傳遞「儲存體帳戶金鑰操作員服務角色」Azure 角色。 此角色會將存取範圍限制為您的儲存體帳戶。 若是傳統帳戶類型,請傳遞「傳統儲存體帳戶金鑰操作員服務角色」。
  • --assignee:傳遞 "https://vault.azure.net"" 值,這是 Azure 公用雲端中 Key Vault 的 URL。 (針對 Azure Goverment 雲端,請改用 '--assignee-object-id',請參閱服務主體應用程式識別碼。)
  • --scope:傳遞您的儲存體帳戶資源識別碼,其格式為 /subscriptions/<subscriptionID>/resourceGroups/<StorageAccountResourceGroupName>/providers/Microsoft.Storage/storageAccounts/<YourStorageAccountName>。 使用 Azure CLI az account list 命令來尋找您的訂用帳戶識別碼。 使用 Azure CLI az storage account list 命令來尋找您的儲存體帳戶名稱和儲存體帳戶資源群組。
az role assignment create --role "Storage Account Key Operator Service Role" --assignee "https://vault.azure.net" --scope "/subscriptions/<subscriptionID>/resourceGroups/<StorageAccountResourceGroupName>/providers/Microsoft.Storage/storageAccounts/<YourStorageAccountName>"

將使用者帳戶使用權限授與受控儲存體帳戶

使用 Azure CLI az keyvault-set-policy Cmdlet 來更新 Key Vault 存取原則,並將儲存體帳戶權限授與您的使用者帳戶。

# Give your user principal access to all storage account permissions, on your Key Vault instance

az keyvault set-policy --name <YourKeyVaultName> --upn user@domain.com --storage-permissions get list delete set update regeneratekey getsas listsas deletesas setsas recover backup restore purge

Azure 入口網站中的儲存體帳戶 [存取原則] 頁面上並未提供儲存體帳戶的權限。

建立 Key Vault 受控儲存體帳戶

使用 Azure CLI az keyvault storage 命令來建立 Key Vault 受控儲存體帳戶。 設定 30 天的重新產生期間。 需要輪替時,KeyVault 會重新產生非作用中的金鑰,然後將新建立的金鑰設定為作用中。 只有其中一個金鑰會用來在任何時間簽發 SAS 權杖,這就是使用中的金鑰。 將下列參數值提供給命令:

  • --vault-name:傳遞金鑰保存庫的名稱。 若要尋找金鑰保存庫的名稱,請使用 Azure CLI az keyvault list 命令。
  • -n:傳遞儲存體帳戶的名稱。 若要尋找儲存體帳戶的名稱,請使用 Azure CLI az storage account list 命令。
  • --resource-id:傳遞您的儲存體帳戶資源識別碼,其格式為 /subscriptions/<subscriptionID>/resourceGroups/<StorageAccountResourceGroupName>/providers/Microsoft.Storage/storageAccounts/<YourStorageAccountName>。 使用 Azure CLI az account list 命令來尋找您的訂用帳戶識別碼。 使用 Azure CLI az storage account list 命令來尋找您的儲存體帳戶名稱和儲存體帳戶資源群組。
az keyvault storage add --vault-name <YourKeyVaultName> -n <YourStorageAccountName> --active-key-name key1 --auto-regenerate-key --regeneration-period P30D --resource-id "/subscriptions/<subscriptionID>/resourceGroups/<StorageAccountResourceGroupName>/providers/Microsoft.Storage/storageAccounts/<YourStorageAccountName>"

共用存取簽章權杖

您也可以要求 Key Vault 產生共用存取簽章權杖。 共用存取簽章可提供您儲存體帳戶中資源的委派存取。 您可以對用戶端授與儲存體帳戶中資源的存取權,而不必共用帳戶金鑰。 共用存取簽章可讓您安全地共用儲存體資源,而不會將帳戶金鑰外洩。

本節中的命令會完成下列動作:

  • 設定帳戶共用存取簽章定義 <YourSASDefinitionName>。 定義會在金鑰保存庫 <YourKeyVaultName>中的 Key Vault 受控儲存體帳戶 <YourStorageAccountName> 上設定。
  • 在保存庫中設定 Key Vault 受控儲存體共用存取簽章定義。 定義具有已建立的共用存取簽章權杖的範本 URI。 定義的共用存取簽章類型為 account,且有效期為 N 天。
  • 確認已將共用存取簽章儲存在金鑰保存庫中作為祕密。

定義共用存取簽章定義範本

Key Vault 會使用 SAS 定義範本來產生用戶端應用程式的權杖。

SAS 定義範本範例:

"sv=2018-03-28&ss=bfqt&srt=sco&sp=rw&spr=https"

在下一個步驟中,SAS 定義範本將會傳遞至 --template-uri 參數。

Key Vault 的 SAS 定義範本中所需的帳戶 SAS 參數

SAS 查詢參數 描述
SignedVersion (sv) 必要。 指定已簽署的儲存體服務版本,以便用於授權使用此帳戶 SAS 提出的要求。 必須設定為 2015-04-05 版或更新版本。 Key Vault 支援 2018-03-28 以前的版本
SignedServices (ss) 必要。 指定可透過帳戶 SAS 存取的已簽署服務。 可能的值包括:

- Blob (b)
- 佇列 (q)
- 資料表 (t)
- 檔案 (f)

您可以結合多個值以提供多項服務的存取權。 例如,ss=bf 指定 Blob 和檔案端點的存取權。
SignedResourceTypes (srt) 必要。 指定可透過帳戶 SAS 存取的已簽署資源類型。

- 服務 (s):存取服務層級 API (例如,取得/設定服務屬性、取得服務統計資料、列出容器/佇列/資料表/共用)
- 容器 (c):存取容器層級 API (例如,建立/刪除容器、建立/刪除佇列、建立/刪除資料表、建立/刪除共用、列出 Blob/檔案和目錄)
- 物件 (o):存取 Blob、佇列訊息、資料表實體和檔案的物件層級 API (例如,放置 Blob、查詢實體、取得訊息、建立檔案等)

您可以結合多個值以提供多個資源類型的存取權。 例如,srt=sc 指定服務與容器資源的存取權。
SignedPermission (sp) 必要。 指定帳戶 SAS 的已簽署權限。 權限只有在符合指定的已簽署資源類型時才有效;否則會遭到忽略。

- 讀取 (r):適用於所有已簽署的資源類型 (服務、容器和物件)。 允許所指定資源類型的讀取權限。
- 寫入 (w):適用於所有已簽署的資源類型 (服務、容器和物件)。 允許所指定資源類型的寫入權限。
- 刪除 (d):適用於容器和物件資源類型,但佇列訊息除外。
- 永久刪除 (y):僅適用於 Blob 的物件資源類型。
- 列出 (l):僅適用於服務和容器資源類型。
- 新增 (a):僅適用於下列物件資源類型:佇列訊息、資料表實體和附加 Blob。
- 建立 (c):僅適用於下列物件資源類型:Blob 和檔案。 使用者可以建立新的 Blob 或檔案,但可能不會覆寫現有的 Blob 或檔案。
- 更新 (u):僅適用於下列物件資源類型:佇列訊息和資料表實體。
- 處理 (p):僅適用於下列物件資源類型:佇列訊息。
- 標記 (t):僅適用於下列物件資源類型:Blob。 允許 Blob 標記作業。
- 篩選 (f):僅適用於下列物件資源類型:Blob。 允許依 Blob 標記進行篩選。
- 設定不變性原則 (i):僅適用於下列物件資源類型:Blob。 允許在 Blob 上設定/刪除不變性原則和合法保存。
SignedProtocol (spr) 選擇性。 指定針對使用帳戶 SAS 提出的要求允許的通訊協定。 可能的值為 HTTPS 和 HTTP (https,http) 或僅限 HTTPS (https)。 預設值是 https,http

僅 HTTP 是不允許的值。

如需帳戶 SAS 的詳細資訊,請參閱建立帳戶 SAS

注意

Key Vault 會忽略存留期參數,例如 'Signed Expiry'、'Signed Start' 和 2018-03-28 版本之後引進的參數

在 Key Vault 中設定共用存取簽章定義

使用 Azure CLI az keyvault storage sas-definition create 命令,將上一個步驟的 SAS 定義範本傳遞至 --template-uri 參數,以建立共用存取簽章定義。 您可以將選擇的名稱提供給 -n 參數。

az keyvault storage sas-definition create --vault-name <YourKeyVaultName> --account-name <YourStorageAccountName> -n <YourSASDefinitionName> --validity-period P2D --sas-type account --template-uri <sasDefinitionTemplate>

驗證共用存取簽章定義

您可以使用 Azure CLI az keyvault storage sas-definition show 命令,確認共用存取簽章定義已儲存在金鑰保存庫中。

您現在可以使用 az keyvault storage sas-definition show 命令和 id 屬性來檢視祕密的內容。

az keyvault storage sas-definition show --id https://<YourKeyVaultName>.vault.azure.net/storage/<YourStorageAccountName>/sas/<YourSASDefinitionName>

下一步