使用 金鑰保存庫 與 Azure CLI 管理記憶體帳戶金鑰(舊版)

重要

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

重要

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

重要

建議使用 Azure 儲存體與 Microsoft Entra ID 整合,這是 Microsoft 的雲端式身分識別和存取管理服務。 Microsoft Entra 整合適用於 Azure Blob、佇列和數據表,並提供 OAuth2 令牌型存取 Azure 儲存體(就像 Azure 金鑰保存庫 一樣)。 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 命令,為記憶體帳戶提供 金鑰保存庫 存取權。 提供命令下列參數值:

  • --role:傳遞「儲存體 帳戶密鑰操作員服務角色」Azure 角色。 此角色會限制記憶體帳戶的存取範圍。 針對傳統記憶體帳戶,請改為傳遞「傳統 儲存體 帳戶密鑰操作員服務角色」。
  • --assignee:傳遞值 “https://vault.azure.net",這是 Azure 公用雲端中 金鑰保存庫 的 URL。 (針對 Azure Government 雲端,請改用 '--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 來更新 金鑰保存庫 存取原則,並將記憶體帳戶許可權授與用戶帳戶。

# 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 入口網站 的記憶體帳戶 [存取原則] 頁面上取得。

建立 金鑰保存庫 受控記憶體帳戶

使用 Azure CLI az keyvault storage 命令建立 金鑰保存庫 受控記憶體帳戶。 設定 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>金鑰保存庫 受控記憶體帳戶<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 參數。

金鑰保存庫的 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>

下一步