Azure 自動化中的安全資產加密

Azure 自動化會使用各種層級的加密來保護認證、憑證、連線和加密變數等資產。 這有助於增強這些資產的安全性。 此外,為了確保客戶程式碼的更高安全性和隱私性,Runbook 和 DSC 指令碼也進行了加密。 Azure 自動化中的加密遵循兩種模型 (視用於加密的最上層金鑰而定):

  • 使用 Microsoft 管理的金鑰
  • 使用您所管理的金鑰

Microsoft 管理的金鑰

根據預設,您的 Azure 自動化帳戶會使用 Microsoft 管理的金鑰。

每個安全資產都會經過加密,並使用為每個自動化帳戶產生的唯一金鑰 (資料加密金鑰) 儲存在 Azure 自動化中。 這些金鑰本身會加密並儲存在 Azure 自動化中,但用於加密的是針對每個帳戶產生的另一個唯一金鑰 (稱為帳戶加密金鑰 (AEK))。 這些帳戶加密金鑰會使用 Microsoft 管理的金鑰進行加密並儲存在 Azure 自動化中。

您使用 Key Vault 管理的金鑰

您可使用自己的金鑰來管理自動化帳戶的安全資產加密。 當您在自動化帳戶層級指定客戶自控金鑰時,該金鑰用於保護及控制自動化帳戶的帳戶加密金鑰存取權。 這接著用於加密和解密所有安全資產。 客戶管理的金鑰可提供更大的彈性來建立、輪替、停用及撤銷存取控制。 您也可稽核用來保護安全資產的加密金鑰。

使用 Azure Key Vault 來儲存客戶管理的金鑰。 您可以建立自己的金鑰並將其儲存在金鑰保存庫中,或是使用 Azure Key Vault API 來產生金鑰。

Azure Key Vault上啟用 Azure 防火牆,可封鎖從 Azure 自動化 Runbook 存取該服務。 即使啟用防火牆例外以允許受信任 Microsoft 服務時,存取也會遭到封鎖,因為自動化不是受信任服務清單的一部分。 啟用防火牆後,只能使用混合式 Runbook 背景工作角色和虛擬網路服務端點來進行存取。 不過,當您啟用 Key Vault 的私人連結時,Azure 自動化會失去對 Key Vault 的存取權。 即使您為混合式 Runbook 背景工作角色啟用私人連結,它也僅允許存取 Azure 自動化服務,而不允許存取 Key Vault。

如需 Azure 金鑰保存庫的詳細資訊,請參閱 什麼是 Azure 金鑰保存庫?

針對自動化帳戶使用客戶管理的金鑰

當您針對自動化帳戶使用加密搭配客戶管理的金鑰時,Azure 自動化會使用相關聯的金鑰保存庫中客戶管理的金鑰,包裝帳戶加密金鑰。 啟用客戶管理的金鑰並不會影響效能,而帳戶會立即使用新金鑰進行加密,毫無延遲。

新的自動化帳戶一律使用 Microsoft 管理的金鑰進行加密。 建立帳戶時,不可能啟用客戶管理的金鑰。 客戶管理的金鑰會儲存在 Azure Key Vault 中,而金鑰保存庫必須佈建存取原則,以將金鑰權限授與給與自動化帳戶相關聯的受控識別。 只有在建立自動化帳戶之後,才可使用受控識別。

當您啟用或停用客戶管理的金鑰、更新金鑰版本,或指定不同的金鑰,藉此修改用於 Azure 自動化安全資產加密的金鑰時,帳戶加密金鑰的加密會變更,但是 Azure 自動化帳戶中的安全資產不需要重新加密。

注意

若要使用 Azure 自動化 REST API 呼叫來啟用客戶自控金鑰,您必須使用 API 版本 2020-01-13-preview。

在 Azure 自動化中使用客戶管理的金鑰的必要條件

為自動化帳戶啟用客戶管理的金鑰之前,您必須確保符合下列必要條件:

產生並指派自動化帳戶的新系統指派身分識別

若要使用客戶管理的金鑰搭配自動化帳戶,您的自動化帳戶必須向儲存客戶管理金鑰的金鑰保存庫進行驗證。 Azure 自動化會使用系統指派的受控識別,向 Azure Key Vault 驗證帳戶。 如需受控識別的詳細資訊,請參閱什麼是適用於 Azure 資源的受控識別?

使用 PowerShell

使用 PowerShell Cmdlet Set-AzAutomationAccount 來修改現有的 Azure 自動化帳戶。 -AssignSystemIdentity 參數會產生並指派新的系統指派身分識別,讓自動化帳戶能搭配 Azure Key Vault 等其他服務使用。 如需詳細資訊,請參閱什麼是 Azure 資源受控識別關於 Azure Key Vault。 執行以下程式碼:

# Revise variables with your actual values.
$resourceGroup = "ResourceGroupName"
$automationAccount = "AutomationAccountName"
$vaultName = "KeyVaultName"
$keyName = "KeyName"

Set-AzAutomationAccount `
    -ResourceGroupName $resourceGroup `
    -Name $automationAccount `
    -AssignSystemIdentity

輸出應如下所示:

Output from Set-AzAutomationAccount cmdlet.

取得 PrincipalId 以供稍後使用。 執行以下程式碼:

$principalID = (Get-AzAutomationAccount `
    -ResourceGroupName $resourceGroup `
    -Name $automationAccount).Identity.PrincipalId

$principalID

使用 REST

使用下列 REST API 呼叫,將系統指派的受控識別設定為自動化帳戶:

PATCH https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resource-group-name/providers/Microsoft.Automation/automationAccounts/automation-account-name?api-version=2020-01-13-preview

要求本文:

{ 
 "identity": 
 { 
  "type": "SystemAssigned" 
  } 
}

自動化帳戶的系統指派身分識別會在類似下列的回應中傳回:

{
 "name": "automation-account-name",
 "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resource-group-name/providers/Microsoft.Automation/automationAccounts/automation-account-name",
 ..
 "identity": {
    "type": "SystemAssigned",
    "principalId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
    "tenantId": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"
 },
..
}

設定 Key Vault 存取原則

一旦系統將受控識別指派給自動化帳戶,您就可以針對用於儲存客戶管理金鑰的金鑰保存庫設定其存取權。 Azure 自動化需要身分識別的 GetRecoverWrapKeyUnwrapKey作業權限,才能存取客戶自控金鑰。

使用 PowerShell

使用 PowerShell Cmdlet Set-AzKeyVaultAccessPolicy 授與必要權限。 然後使用 Add-AzKeyVaultKey 在金鑰保存庫中建立金鑰。 執行以下程式碼:

Set-AzKeyVaultAccessPolicy `
    -VaultName $vaultName `
    -ObjectId $principalID `
    -PermissionsToKeys Get, Recover, UnwrapKey, WrapKey

Add-AzKeyVaultKey `
    -VaultName $vaultName `
    -Name $keyName `
    -Destination 'Software'

輸出應如下所示:

Output from Add-AzKeyVaultKey cmdlet.

使用 REST

您可使用下列 REST API 呼叫來設定存取原則:

PUT https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/sample-group/providers/Microsoft.KeyVault/vaults/sample-vault/accessPolicies/add?api-version=2018-02-14

要求本文:

{
  "properties": {
    "accessPolicies": [
      {
        "tenantId": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
        "objectId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
        "permissions": {
          "keys": [
            "get",
            "recover",
            "wrapKey",
            "unwrapKey"
          ],
          "secrets": [],
          "certificates": []
        }
      }
    ]
  }
}

注意

您必須在 tenantIdobjectId 欄位中分別提供自動化帳戶的受控識別回應中的 identity.tenantIdidentity.principalId 值。

將自動化帳戶重新設定為使用客戶自控金鑰

如果您想要將自動化帳戶從 Microsoft 代控金鑰切換至客戶自控金鑰,您可使用 Azure PowerShell 或 Azure Resource Manager 範本來執行這項變更。

使用 PowerShell

使用 PowerShell Cmdlet Set-AzAutomationAccount 將自動化帳戶重新設定為使用客戶自控金鑰。

$vaultURI = (Get-AzKeyVault -VaultName $vaultName).VaultUri
$keyVersion = (Get-AzKeyVaultKey -VaultName $vaultName -KeyName $keyName).Version

Set-AzAutomationAccount `
    -ResourceGroupName $resourceGroup `
    -Name $automationAccount `
    -AssignSystemIdentity `
    -KeyName $keyName `
    -KeyVaultUri $vaultURI `
    -KeyVersion $keyVersion `
    -KeyVaultEncryption 

您可以執行下列命令來驗證變更:

(Get-AzAutomationAccount `
    -ResourceGroupName $resourceGroup `
    -Name $automationAccount).Encryption `
    |  ConvertTo-Json 

輸出應如下所示:

Output from Get-AzAutomationAccount cmdlet.

使用 REST

使用下列 REST API 呼叫:

PATCH https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resource-group-name/providers/Microsoft.Automation/automationAccounts/automation-account-name?api-version=2020-01-13-preview

要求本文:

{
	"identity": {
	"type": "SystemAssigned"
	},
	"properties": {
		"encryption": {
			"keySource": "Microsoft.Keyvault",
			"keyvaultProperties": {
				"keyName": "sample-vault-key",
				"keyvaultUri": "https://sample-vault-key12.vault.azure.net",
				"keyVersion": "7c73556c521340209371eaf623cc099d"
			}
		}
	}
}

範例回覆

{
  "name": "automation-account-name",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resource-group-name/providers/Microsoft.Automation/automationAccounts/automation-account-name",
  ..
  "properties": {
    ..
    "encryption": {
      "keyvaultProperties": {
         "keyName": "sample-vault-key",
          "keyvaultUri": "https://sample-vault-key12.vault.azure.net",
          "keyVersion": "7c73556c521340209371eaf623cc099d"
      },
      "keySource": "Microsoft.Keyvault"
    },
    ..
  }
}

輪替客戶管理的金鑰

您可以根據您的合規性原則,在 Azure Key Vault 中輪替客戶管理的金鑰。 輪替金鑰後,您必須將自動化帳戶更新為使用新的金鑰 URI。

輪替金鑰並不會在自動化帳戶中觸發安全資產的重新加密。 不需要採取任何進一步動作。

撤銷客戶管理金鑰的存取權

若要撤銷客戶管理金鑰的存取權,請使用 PowerShell 或 Azure CLI。 如需詳細資訊,請參閱 Azure Key Vault PowerShellAzure Key Vault CLI。 撤銷存取權可有效封鎖對自動化帳戶中所有安全資產的存取,因為 Azure 自動化無法存取加密金鑰。

下一步