Compartilhar via

加密Azure 自动化中的安全资产

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

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

Azure管理的密钥

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

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

使用 密钥保管库 管理的密钥

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

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

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

有关Azure 密钥保管库的详细信息,请参阅 什么是 Azure 密钥保管库?

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

当您将加密与自动化帐户的客户管理的密钥一起使用时,Azure 自动化在关联的密钥保管库中将帐户加密密钥封装到客户管理的密钥中。 启用客户管理的密钥不会影响性能,会立即使用新密钥对帐户加密,且不会出现任何延迟。

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

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

注释

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

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

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

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

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

使用 PowerShell

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

# 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"
 },
..
}

配置密钥保管库访问策略

将系统分配的托管标识分配到自动化帐户后,配置对存储客户管理密钥的密钥保管库的访问。 Azure 自动化需要为标识提供 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 资源管理器模板执行此更改。

使用 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 密钥保管库轮换客户管理的密钥。 当密钥轮换时,必须将自动化帐户更新为使用新的密钥 URI。

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

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

若要撤销对客户管理的密钥的访问权限,请使用 PowerShell 或Azure CLI。 有关详细信息,请参阅 Azure 密钥保管库 PowerShellAzure 密钥保管库 CLI。 撤销访问权限实际上会阻止访问自动化帐户中的所有安全资产,因为加密密钥无法访问Azure 自动化。

后续步骤