管理儲存體帳戶存取金鑰
在此文章
您建立儲存體帳戶時,Azure 會為該帳戶產生兩個 512 位元儲存體帳戶存取金鑰。 您可以透過共用金鑰授權,使用這些金鑰來授與儲存體帳戶中的資料存取權。
Microsoft 建議您使用 Azure Key Vault 來管理存取金鑰,並定期輪替和重新產生金鑰。 使用 Azure Key Vault 可讓您輕鬆輪替金鑰,而不用中斷應用程式。 您也可以手動輪替金鑰。
保護您的存取金鑰
儲存體帳戶存取金鑰與儲存體帳戶的根密碼類似。 請務必小心保護您的存取金鑰。 使用 Azure Key Vault,以安全的方式管理及輪替金鑰。 避免將存取金鑰散發給其他使用者、寫入程式碼,或將其以純文字儲存在他人可以存取的位置。 如果您認為金鑰可能已遭盜用,請輪替金鑰。
注意
Microsoft 建議您盡可能使用 Azure Active Directory (Azure AD),授權對 Blob 和佇列資料發出的要求,而不要使用帳戶金鑰 (共用金鑰授權)。 比起金鑰授權,使用 Azure AD 進行授權可提供優異的安全性,也更容易使用。
若要使用 Azure AD 條件式存取原則來保護 Azure 儲存體帳戶,您必須禁止儲存體帳戶的共用金鑰授權。 如需如何禁止共用金鑰授權的詳細資訊,請參閱防止 Azure 儲存體帳戶的共用金鑰授權 。
檢視帳戶存取金鑰
您可以使用 Azure 入口網站、PowerShell 或 Azure CLI 來檢視和複製帳戶存取金鑰。 Azure 入口網站也會提供儲存體帳戶的連接字串,方便您複製。
若要從 Azure 入口網站檢視並複製儲存體帳戶存取金鑰或連接字串:
在 Azure 入口網站 中,移至您的儲存體帳戶。
在 [安全性 + 網路] 下選取 [存取金鑰]。 您的帳戶存取金鑰隨即出現,此外也會顯示每個金鑰的完整連接字串。
選取 [顯示金鑰] 以顯示您的存取金鑰和連接字串,以及啟用按鈕來複製值。
在 [金鑰 1] 下方,尋找金鑰 值。 選取 [複製] 按鈕以複製帳戶金鑰。
或者,您也可以複製整個連接字串。 在 [金鑰 1] 下方,尋找連接字串 值。 選取 [複製] 按鈕以複製連接字串。
若要使用 PowerShell 擷取帳戶存取金鑰,請呼叫 Get-AzStorageAccountKey 命令。
下列範例會擷取第一個金鑰。 若要取出第二個金鑰,請使用 Value[1] 代替 Value[0]。 請記得將括弧中的預留位置值取代為您自己的值。
$storageAccountKey = `
(Get-AzStorageAccountKey
-ResourceGroupName <resource-group> `
-Name <storage-account>).Value[0]
若要使用 Azure CLI 列出您的帳戶存取金鑰,請呼叫 az storage account keys list 命令,如下列範例所示。 請記得將括弧中的預留位置值取代為您自己的值。
az storage account keys list \
--resource-group <resource-group> \
--account-name <storage-account>
您可以使用這兩個金鑰的其中之一來存取 Azure 儲存體,但一般而言,使用第一個金鑰並保留第二個金鑰以便在輪替時使用,這是適當的做法。
若要檢視或讀取帳戶的存取金鑰,使用者必須是服務管理員,或獲指派的 Azure 角色必須包含 Microsoft.Storage/storageAccounts/listkeys/action 。 包含此動作的 Azure 內建角色為擁有者 、參與者 和儲存體帳戶金鑰操作員服務角色 。 如需服務管理員角色的詳細資訊,請參閱傳統訂用帳戶管理員角色、Azure 角色和 Azure AD 角色 。 如需 Azure 儲存體內建角色的詳細資訊,請參閱 Azure RBAC 的 Azure 內建角色 中的儲存體 一節。
使用 Azure Key Vault 來管理您的存取金鑰
Microsoft 建議使用 Azure Key Vault 來管理和輪替您的存取金鑰。 您的應用程式可以安全地存取 Key Vault 中的金鑰,所以您就不需要將金鑰儲存在應用程式的程式碼中。 如需使用 Key Vault 進行金鑰管理的詳細資訊,請參閱下列文章:
手動輪替存取金鑰
Microsoft 建議您定期輪替存取金鑰,以協助保護您的儲存體帳戶安全無虞。 如果可以,請使用 Azure Key Vault 來管理您的存取金鑰。 如果您不是使用 Key Vault,則必須手動輪替金鑰。
由於指派兩個存取金鑰,因此您可以旋轉金鑰。 使用兩個金鑰可確保您的應用程式會在整個程序維持 Azure 儲存體的存取權。
警告
重新產生存取金鑰會影響相依於儲存體帳戶金鑰的應用程式或 Azure 服務。 使用帳戶金鑰來存取儲存體帳戶的任何用戶端必須更新並使用新的金鑰,包括媒體服務、雲端、桌面和行動應用程式,以及 Azure 儲存體的圖形化使用者介面應用程式,例如 Azure 儲存體總管 。
如果您打算手動輪替存取金鑰,Microsoft 建議您設定金鑰到期原則。 如需詳細資訊,請參閱建立金鑰到期原則 。
建立金鑰到期原則之後,您可以使用 Azure 原則來監視是否在建議的間隔內輪替儲存體帳戶的金鑰。 如需詳細資訊,請參閱檢查金鑰到期原則違規 。
若要在 Azure 入口網站中輪替儲存體帳戶存取金鑰:
更新應用程式程式碼中的連接字串,以參考儲存體帳戶的次要存取金鑰。
在 Azure 入口網站 中瀏覽至您的儲存體帳戶。
在 [安全性 + 網路] 下選取 [存取金鑰]。
若要重新產生儲存體帳戶的主要存取金鑰,請選取主要存取金鑰旁的 [重新產生] 按鈕。
更新程式碼中的連接字串,以參考新的主要存取金鑰。
以同樣的方式重新產生次要存取金鑰。
若要使用 PowerShell 輪替儲存體帳戶存取金鑰:
更新應用程式程式碼中的連接字串,以參考儲存體帳戶的次要存取金鑰。
呼叫 New-AzStorageAccountKey 命令以重新產生主要存取金鑰,如下列範例所示:
New-AzStorageAccountKey -ResourceGroupName <resource-group> `
-Name <storage-account> `
-KeyName key1
更新程式碼中的連接字串,以參考新的主要存取金鑰。
以同樣的方式重新產生次要存取金鑰。 若要重新產生次要金鑰,請使用 key2 作為金鑰名稱,而非 key1。
若要使用 Azure CLI 輪替儲存體帳戶存取金鑰:
更新應用程式程式碼中的連接字串,以參考儲存體帳戶的次要存取金鑰。
呼叫 az storage account keys renew 命令以重新產生主要存取金鑰,如下列範例所示:
az storage account keys renew \
--resource-group <resource-group> \
--account-name <storage-account> \
--key primary
更新程式碼中的連接字串,以參考新的主要存取金鑰。
以同樣的方式重新產生次要存取金鑰。 若要重新產生次要金鑰,請使用 secondary 作為金鑰名稱,而非 primary。
警告
Microsoft 建議同一時間在您的所有應用程式中僅使用其中一個金鑰。 如果您在某些地方使用金鑰 1 並在其他地方使用金鑰 2,您就無法在沒有部分應用程式遺失存取的情況下輪換您的金鑰。
若要輪替帳戶的存取金鑰,使用者必須是服務管理員,或獲指派的 Azure 角色必須包含 Microsoft.Storage/storageAccounts/regeneratekey/action 。 包含此動作的 Azure 內建角色為擁有者 、參與者 和儲存體帳戶金鑰操作員服務角色 。 如需服務管理員角色的詳細資訊,請參閱傳統訂用帳戶管理員角色、Azure 角色和 Azure AD 角色 。 如需 Azure 儲存體的 Azure 內建角色的詳細資訊,請參閱 Azure RBAC 的 Azure 內建角色 中的儲存體 一節。
建立金鑰到期原則
金鑰到期原則可讓您設定帳戶存取金鑰輪替提醒。 如果已達指定的間隔,而金鑰尚未輪替,則會顯示提醒。 建立金鑰到期原則之後,您可以監視儲存體帳戶的合規性,以確保帳戶存取金鑰會定期輪替。
注意
在您建立金鑰到期原則之前,您的每個帳戶存取金鑰可能需要至少輪替一次。
若要在 Azure 入口網站中建立金鑰到期原則:
在 Azure 入口網站 中,移至您的儲存體帳戶。
在 [安全性 + 網路] 下選取 [存取金鑰]。 您的帳戶存取金鑰隨即出現,此外也會顯示每個金鑰的完整連接字串。
選取 [設定輪替提醒] 按鈕。 如果 [設定輪替提醒] 按鈕呈現灰色,您將需要輪替每個金鑰。 請遵循手動輪替存取金鑰 中所述的步驟來輪替金鑰。
在 [設定輪替存取金鑰提醒] 中,選取 [啟用金鑰輪替提醒] 核取方塊,然後設定提醒的頻率。
選取 [儲存]。
若要使用 PowerShell 建立金鑰到期原則,請使用 Set-AzStorageAccount 命令,並將 -KeyExpirationPeriodInDay 參數設定為到應該輪替存取金鑰為止的間隔時間 (以天為單位)。
KeyCreationTime 屬性指出帳戶存取金鑰的建立或前次輪替時間。 舊版帳戶的 KeyCreationTime 屬性可能有 null 值,因為尚未設定。 如果 KeyCreationTime 屬性是 null,則在輪替金鑰之前,您無法建立金鑰到期原則。 因此,您最好先檢查儲存體帳戶的 KeyCreationTime 屬性,然後再嘗試設定金鑰到期原則。
下列範例會檢查每個金鑰是否已設定 KeyCreationTime 屬性。 如果 KeyCreationTime 屬性含有值,則表示已建立儲存體帳戶的金鑰到期原則。 請記得將括弧中的預留位置值取代為您自己的值。
$rgName = "<resource-group>"
$accountName = "<account-name>"
$account = Get-AzStorageAccount -ResourceGroupName $rgName -Name $accountName
# Check whether the KeyCreationTime property has a value for each key
# before creating the key expiration policy.
if ($account.KeyCreationTime.Key1 -eq $null -or $account.KeyCreationTime.Key2 -eq $null)
{
Write-Host("You must regenerate both keys at least once before setting expiration policy")
}
else
{
$account = Set-AzStorageAccount -ResourceGroupName $rgName -Name `
$accountName -KeyExpirationPeriodInDay 60
}
您也可以設定 New-AzStorageAccount 命令的 -KeyExpirationPeriodInDay 參數,以便在建立儲存體帳戶時設定金鑰到期原則。
若要確認原則是否已套用,請檢查儲存體帳戶的 KeyPolicy 屬性。
$account.KeyPolicy
若要使用 Azure CLI 建立金鑰到期原則,請使用 az storage account update 命令,並將 --key-exp-days 參數設定為到應該輪替存取金鑰為止的間隔時間 (以天為單位)。
keyCreationTime 屬性指出帳戶存取金鑰的建立或前次輪替時間。 舊版帳戶的 keyCreationTime 屬性可能有 null 值,因為尚未設定。 如果 keyCreationTime 屬性是 null,則在輪替金鑰之前,您無法建立金鑰到期原則。 因此,您最好先檢查儲存體帳戶的 keyCreationTime 屬性,然後再嘗試設定金鑰到期原則。
下列範例會檢查每個金鑰是否已設定 keyCreationTime 屬性。 如果 keyCreationTime 屬性含有值,則表示已建立儲存體帳戶的金鑰到期原則。 請記得將括弧中的預留位置值取代為您自己的值。
key1_create_time=$(az storage account show \
--name <storage-account> \
--resource-group <resource-group> \
--query 'keyCreationTime.key1' \
--output tsv)
key2_create_time=$(az storage account show \
--name <storage-account> \
--resource-group <resource-group> \
--query 'keyCreationTime.key2' \
--output tsv)
if [ -z "$key1_create_time" ] || [ -z "$key2_create_time" ];
then
echo "You must regenerate both keys at least once before setting expiration policy"
else
az storage account update \
--name <storage-account> \
--resource-group <resource-group> \
--key-exp-days 60
fi
您也可以設定 az storage account create 命令的 --key-exp-days 參數,以便在建立儲存體帳戶時設定金鑰到期原則。
若要確認是否已套用原則,請呼叫 az storage account show 命令,並在 -query 參數中使用 {KeyPolicy:keyPolicy} 字串。
az storage account show \
-n <storage-account-name> \
-g <resource-group-name> \
--query "{KeyPolicy:keyPolicy}"
金鑰到期期間會顯示在主控台輸出中。
{
"KeyPolicy": {
"enableAutoRotation": false,
"keyExpirationPeriodInDays": 60
}
}
檢查金鑰到期原則違規
您可以使用 Azure 原則監視您的儲存體帳戶,以確保在建議的期間內輪替帳戶存取金鑰。 Azure 儲存體提供內建原則,以確保儲存體帳戶存取金鑰未過期。 如需內建原則的詳細資訊,請參閱內建原則定義的清單 中的儲存體帳戶金鑰不應過期 。
指派資源範圍的內建原則
請遵循下列步驟,在 Azure 入口網站中將內建原則指派給適當範圍:
在 Azure 入口網站中,搜尋 [原則 ] 以顯示 Azure 原則儀表板。
在 [編寫 ] 區段中,選取 [指派 ]。
選擇 [指派原則 ]。
在 [指派原則 ] 頁面的 [基本 ] 索引標籤中,在 [範圍 ] 區段指定原則指派的範圍。 選取 [更多 ] 按鈕以選擇訂用帳戶和選用的資源群組。
在 [原則定義 ] 欄位中,選取 [更多 ] 按鈕,然後在 [搜尋 ] 欄位中輸入儲存體帳戶金鑰 。 選取名為儲存體帳戶金鑰不應過期 (Storage account keys should not be expired) 的原則定義。
選取 [檢閱 + 建立 ],將原則定義指派給指定的範圍。
使用金鑰到期原則監視合規性
若要監視您的儲存體帳戶是否符合金鑰到期原則,請遵循下列步驟:
在 Azure 原則儀表板上,找出您在原則指派中指定範圍適用的內建原則定義。 您可以在 [搜尋]方塊中搜尋儲存體帳戶金鑰不應過期 ,以篩選內建原則。
選取具有所需範圍的原則名稱。
在內建原則的 [原則指派 ] 頁面上,選取 [檢視合規性 ]。 指定訂用帳戶和資源群組中不符合原則需求的任何儲存體帳戶,都會顯示在合規性報告中。
若要讓儲存體帳戶符合規範,請輪替帳戶存取金鑰。
下一步