Compartilhar via

加密Azure Automation中的安全资产

Azure Automation使用各种加密级别来保护凭据、证书、连接和加密变量等资产。 这有助于增强这些资产的安全性。 此外,为确保提高客户代码的安全性和隐私性,还对 Runbook 和 DSC 脚本进行了加密。 Azure Automation中的加密遵循两种模型,具体取决于用于加密的顶级密钥:

  • 使用Azure管理的密钥
  • 使用你管理的密钥

Azure管理的密钥

默认情况下,Azure Automation帐户使用Azure管理的密钥。

每个安全资产都使用为每个自动化帐户生成的唯一密钥(数据加密密钥)对Azure Automation进行加密和存储。 这些密钥本身是加密的,并且存储在 Azure Automation 中,使用另一个为每个账户生成的唯一密钥,称为帐户加密密钥(AEK)。 这些帐户加密密钥使用Azure管理的密钥加密并存储在Azure Automation中。

使用 Key Vault 管理的密钥

可以通过自己的密钥来管理自动化帐户的安全资产加密。 在自动化账户级别指定客户管理的密钥时,该密钥用于保护和控制对自动化账户的账户加密密钥的访问。 这反过来用于加密和解密所有安全资产。 客户管理的密钥提供了更大的灵活性,可以创建、轮换、禁用和撤销访问控制。 此外,你还可以审核用于保护安全资产的加密密钥。

使用Azure Key Vault存储客户管理的密钥。 可以创建自己的密钥并将其存储在key vault中,也可以使用Azure Key Vault API 生成密钥。

Azure Key Vault 上启用 Azure 防火墙会阻止该服务的 Azure 自动化运行簿的访问。 即使启用允许受信任的Microsoft服务的防火墙例外,也会阻止Access,因为自动化不是受信任服务列表的一部分。 启用防火墙后,只能使用混合 Runbook 工作器和虚拟网络服务终结点进行访问。 但是,为 Key Vault 启用专用链接时,Azure Automation 将无法访问 Key Vault。 即使为混合 Runbook 工作器启用专用链接,它也只允许访问 Azure 自动化服务,而不能访问密钥保管库。

有关Azure Key Vault的详细信息,请参阅 什么是 Azure Key Vault?

为自动化帐户使用客户管理的密钥

使用客户管理的密钥对自动化帐户进行加密时,Azure Automation会将帐户加密密钥用客户管理的密钥在关联的密钥保管库中包裹。 启用客户管理的密钥不会影响性能,会立即使用新密钥对帐户加密,且不会出现任何延迟。

使用 Azure 管理的密钥始终加密新的自动化帐户。 创建帐户时不能启用客户管理的密钥。 客户管理的密钥存储在Azure密钥保管库中,密钥保管库必须配置访问策略,这些策略授予与自动化帐户关联的托管身份密钥权限。 托管标识仅在创建自动化帐户后可用。

修改用于Azure Automation安全资产加密的密钥时,通过启用或禁用客户管理的密钥、更新密钥版本或指定其他密钥,帐户加密密钥的加密会更改,但Azure Automation帐户中的安全资产无需重新加密。

注释

若要使用 Azure Automation REST API 调用启用客户管理的密钥,需要使用 api 版本 2020-01-13-preview。

在 Azure Automation 中使用客户管理的密钥的先决条件

为自动化帐户启用客户管理的密钥之前,必须先确保满足以下先决条件:

为自动化帐户生成并分配新的系统指派标识

zh-CN: 若要在自动化帐户中使用客户管理的密钥,自动化帐户需要对存储这些密钥的密钥保管库进行身份验证。 Azure Automation使用系统分配的托管标识通过Azure Key Vault对帐户进行身份验证。 有关托管标识的详细信息,请参阅 什么是Azure资源的托管标识?

使用 PowerShell

使用 PowerShell cmdlet Set-AzAutomationAccount修改现有Azure Automation帐户。 -AssignSystemIdentity 参数生成并分配自动化帐户的新系统分配标识,以用于其他服务(如Azure Key Vault)。 有关详细信息,请参阅 Azure 资源的托管标识是什么?About Azure Key Vault。 执行以下代码:

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

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

输出应如下所示:

Set-AzAutomationAccount cmdlet 的输出。

获取 PrincipalId 供稍后使用。 执行以下代码:

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

$principalID

使用 REST

使用以下 REST API 调用来为自动化帐户配置系统分配的托管标识:

PATCH https://management.chinacloudapi.cn/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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 Automation需要具有GetRecoverWrapKeyUnwrapKey操作权限的标识来访问客户管理的密钥。

使用 PowerShell

使用 PowerShell cmdlet Set-AzKeyVaultAccessPolicy 授予所需的权限。 然后使用 Add-AzKeyVaultKey 在key vault中创建密钥。 执行以下代码:

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

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

输出应如下所示:

Add-AzKeyVaultKey cmdlet 的输出。

使用 REST

可以使用以下 REST API 调用设置访问策略:

PUT https://management.chinacloudapi.cn/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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": []
        }
      }
    ]
  }
}

注释

必须为“tenantId”和“objectId”字段提供值,这些值分别取自自动化帐户的托管标识响应中的“identity.tenantId”和“identity.principalId”。

将自动化帐户重新配置为使用客户管理的密钥

如果要将自动化帐户从Azure管理的密钥切换到客户管理的密钥,可以使用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 

输出应如下所示:

Get-AzAutomationAccount cmdlet 的输出。

使用 REST

使用以下 REST API 调用:

PATCH https://management.chinacloudapi.cn/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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.cn",
				"keyVersion": "7c73556c521340209371eaf623cc099d"
			}
		}
	}
}

示例响应

{
  "name": "automation-account-name",
  "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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.cn",
          "keyVersion": "7c73556c521340209371eaf623cc099d"
      },
      "keySource": "Microsoft.Keyvault"
    },
    ..
  }
}

客户自管密钥的轮换

可以根据合规性策略在Azure Key Vault轮换客户管理的密钥。 当密钥轮换时,必须将自动化帐户更新为使用新的密钥 URI。

轮换密钥不会触发自动化帐户中安全资产的重新加密。 无需进一步的操作。

客户管理的密钥访问权限的撤销

若要撤销客户管理的密钥access,请使用 PowerShell 或Azure CLI。 有关详细信息,请参阅 Azure Key Vault PowerShellAzure Key Vault CLI。 撤销访问权限有效地阻止了在自动化帐户中访问所有安全资产,因为Azure Automation无法访问加密密钥。

后续步骤