Amazon 的静态数据加密 DataZone - 亚马逊 DataZone

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon 的静态数据加密 DataZone

默认情况下,静态数据加密有助于降低保护敏感数据的操作开销和复杂性。同时,它还支持构建符合严格加密合规性和监管要求的安全应用程序。

Amazon DataZone 使用默认 AWS拥有的密钥自动加密您的静态数据。您无法查看、管理或审核 AWS 自有密钥的使用情况。有关更多信息,请参阅AWS 自有密钥

虽然您无法禁用此加密层或选择其他加密类型,但您可以在创建 Amazon DataZone 域名时选择客户管理的密钥,从而在现有 AWS 拥有的加密密钥上添加第二层加密。Amazon DataZone 支持使用对称的客户托管密钥,您可以创建、拥有和管理这些密钥,在现有 AWS 自有加密的基础上添加第二层加密。由于您可以完全控制此加密层,因此可以在其中执行以下任务:

  • 制定和维护关键政策

  • 制定和维护IAM政策与补助金

  • 启用和禁用密钥策略

  • 轮换密钥加密材料

  • 添加标签

  • 创建密钥别名

  • 计划删除密钥

有关更多信息,请参阅客户管理的密钥

注意

Amazon 使用 AWS 自有密钥 DataZone 自动启用静态加密,从而免费保护客户数据。

AWS KMS使用客户管理的密钥需要付费。有关定价的更多信息,请参阅AWS 密钥管理服务定价

亚马逊如何 DataZone 使用补助金 AWS KMS

Amazon DataZone 需要三项授权才能使用您的客户托管密钥。当您创建使用客户托管密钥加密的 Amazon DataZone 域名时,亚马逊 DataZone 会通过向发送CreateGrant请求来 AWS KMS代表您创建补助金和子授权。中的授权 AWS KMS用于让 Amazon DataZone 访问您账户中的KMS密钥。Amazon DataZone 创建以下授权,以使用您的客户托管密钥进行以下内部操作:

一项授权,用于对以下操作的静态数据进行加密:

  • 向发送DescribeKey请求, AWS KMS以验证在创建 Amazon DataZone 域名集合时输入的对称客户托管KMS密钥 ID 是否有效。

  • 发送GenerateDataKeyrequests AWS KMS至,生成由您的客户托管密钥加密的数据密钥。

  • Decrypt 请求发送 AWS KMS到以解密加密的数据密钥,以便它们可用于加密您的数据。

  • RetireGrant在删除域名时取消授权。

两项用于搜索和发现您的数据的资助:

您可以随时撤销授予访问权限,或删除服务对客户托管密钥的访问权限。如果您这样做,Amazon 将 DataZone 无法访问由客户托管密钥加密的任何数据,这会影响依赖该数据的操作。例如,如果您尝试获取 Amazon DataZone 无法访问的数据资产详情,则该操作将返回AccessDeniedException错误。

创建客户托管密钥

您可以使用管理控制台创建对称客户托管密钥,或者。 AWS AWS KMS APIs

要创建对称客户托管密钥,请按照《密钥管理服务开发人员指南》中创建对称客户托管 AWS 密钥的步骤进行操作。

密钥策略-密钥策略控制对客户托管密钥的访问权限。每个客户托管式密钥必须只有一个密钥政策,其中包含确定谁可以使用密钥以及如何使用密钥的声明。创建客户托管式密钥时,可以指定密钥政策。有关更多信息,请参阅《密钥管理服务开发人员指南》中的管理客户托管密 AWS 钥的访问权限

要将您的客户托管密钥与您的 Amazon DataZone 资源一起使用,密钥政策中必须允许以下API操作:

以下是您可以为 Amazon 添加的政策声明示例 DataZone:

"Statement" : [ { "Sid" : "Allow access to principals authorized to manage Amazon DataZone", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::<account_id>:root" }, "Action" : [ "kms:DescribeKey", "kms:CreateGrant", "kms:GenerateDataKey", "kms:Decrypt" ], "Resource" : "arn:aws:kms:region:<account_id>:key/key_ID", } ]
注意

拒绝KMS策略不适用于通过 Amazon DataZone 数据门户访问的资源。

有关在策略中指定权限的更多信息,请参阅 AWS 密钥管理服务开发人员指南。

有关密钥访问疑难解答的更多信息,请参阅 AWS 密钥管理服务开发人员指南。

为 Amazon 指定客户托管密钥 DataZone

Amazon DataZone 加密环境

加密上下文是一组可选的键值对,包含有关数据的其他上下文信息。

AWS KMS使用加密上下文作为其他经过身份验证的数据来支持经过身份验证的加密。当您在加密数据的请求中包含加密上下文时,会将加密上下文 AWS KMS绑定到加密数据。要解密数据,您必须在请求中包含相同的加密上下文。

Amazon DataZone 使用以下加密环境:

"encryptionContextSubset": { "aws:datazone:domainId": "{root-domain-uuid}" }

使用加密环境进行监控-当您使用对称客户托管密钥加密 Amazon 时 DataZone,您还可以在审计记录和日志中使用加密上下文来识别客户托管密钥的使用情况。加密上下文还会显示在 AWS CloudTrail 或 Amazon Logs 生成的 CloudWatch 日志中。

使用加密上下文来控制对客户托管密钥的访问权限-您可以使用密钥策略和IAM策略中的加密上下文作为控制对称客户托管密钥访问的条件。您也可以在授予中使用加密上下文约束。

Amazon 在授权中 DataZone 使用加密上下文限制来控制对您账户或地区中客户托管密钥的访问权限。授权约束要求授权允许的操作使用指定的加密上下文。

以下是密钥策略声明示例,用于授予对特定加密上下文的客户托管密钥的访问权限。此策略语句中的条件要求授权具有指定加密上下文的加密上下文约束。

{ "Sid": "Enable DescribeKey", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleReadOnlyRole" }, "Action": "kms:DescribeKey", "Resource": "*" },{ "Sid": "Enable Decrypt, GenerateDataKey", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleReadOnlyRole" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:aws:datazone:domainId": "{root-domain-uuid}" } } }

监控您的 Amazon 加密密钥 DataZone

当您在亚马逊 DataZone 资源中使用 AWS KMS客户托管密钥时,您可以使用AWS CloudTrail来跟踪亚马逊 DataZone 向其发送的请求 AWS KMS。以下示例是CreateGrantGenerateDataKeyDecrypt、和DescribeKey监控 Amazon DataZone 为访问由您的客户托管密钥加密的数据而调用的KMS操作 AWS CloudTrail 的事件。当您使用 AWS KMS客户管理的密钥加密您的亚马逊 DataZone域名时,亚马逊 DataZone 会代表您发送访问您 AWS 账户中KMS密钥的CreateGrant请求。Amazon DataZone 创建的授权特定于与 AWS KMS客户托管密钥关联的资源。此外,当您删除域名时,Amazon 会 DataZone 使用该RetireGrant操作来删除授权。以下示例事件记录了 CreateGrant 操作:

{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE3", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01", "accountId": "111122223333", "userName": "Admin" }, "webIdFederationData": {}, "attributes": { "mfaAuthenticated": "false", "creationDate": "2021-04-22T17:02:00Z" } }, "invokedBy": "datazone.amazonaws.com" }, "eventTime": "2021-04-22T17:07:02Z", "eventSource": "kms.amazonaws.com", "eventName": "CreateGrant", "awsRegion": "us-west-2", "sourceIPAddress": "172.12.34.56", "userAgent": "ExampleDesktop/1.0 (V1; OS)", "requestParameters": { "constraints": { "encryptionContextSubset": { "aws:datazone:domainId": "SAMPLE-root-domain-uuid" } }, "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE", "operations": [ "Decrypt", "GenerateDataKey", "RetireGrant", "DescribeKey" ], "granteePrincipal": "datazone.us-west-2.amazonaws.com" }, "responseElements": { "grantId": "0ab0ac0d0b000f00ea00cc0a0e00fc00bce000c000f0000000c0bc0a0000aaafSAMPLE", "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" }, "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "readOnly": false, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "111122223333" }

创建涉及加密 AWS Glue 目录的数据湖环境

在高级用例中,当您使用加密的 AWS Glue 目录时,必须授予对 Amazon DataZone 服务的访问权限才能使用您的客户管理的KMS密钥。为此,您可以更新自定义KMS策略并在密钥中添加标签。要授予访问亚马逊 DataZone 服务的权限以处理加密 AWS Glue 目录中的数据,请完成以下操作:

  • 将以下策略添加到您的自定义KMS密钥。有关更多信息,请参阅更改密钥政策

    { "Sid": "Allow datazone environment roles to use the key", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "kms:Decrypt", "kms:Describe*", "kms:Get*" ], "Resource": "*", "Condition": { "StringLike": { "aws:PrincipalArn": "arn:aws:iam::*:role/*datazone_usr*" } } }
  • 在您的自定义KMS密钥中添加以下标签。有关更多信息,请参阅使用标签控制对KMS密钥的访问

    key: AmazonDataZoneEnvironment value: all