加密数据目录 - Amazon Glue
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

加密数据目录

Amazon Glue Data Catalog 加密可提高敏感数据的安全性。Amazon Glue与 Amazon Key Management Service(Amazon KMS)集成,以加密存储在数据目录中的元数据。您可以使用 Amazon Glue 控制台或 Amazon CLI,为数据目录中的资源启用或禁用加密设置。

为数据目录启用加密时,您创建的所有新对象都将被加密。禁用加密后,您创建的新对象将不会被加密,但现有的加密对象将保持加密状态。

您可以使用 Amazon 托管加密密钥或客户管理型加密密钥对整个数据目录进行加密。有关密钥类型和状态的更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的 Amazon Key Management Service 概念

Amazon 托管密钥

Amazon 托管密钥是由与 Amazon KMS集成的 Amazon 服务代表您在账户中创建、管理和使用的 KMS 密钥。可以在 Amazon CloudTrail 日志中查看账户中的 Amazon 托管密钥,查看其密钥策略以及审计其使用情况。但是,您无法管理这些 KMS 钥或更改其权限。

静态加密自动集成 Amazon KMS,从而管理 Amazon Glue 用于加密元数据的 Amazon 托管密钥。如果启用元数据加密时 Amazon 托管密钥尚不存在,Amazon KMS 将自动为您创建新密钥。

有关更多信息,请参阅 Amazon 托管式密钥

客户管理密钥

客户托管密钥是在您的 Amazon Web Services 账户 中创建、拥有和托管的 KMS 密钥。您对 KMS 密钥拥有全部控制权。您可以:

  • 建立和维护密钥政策、IAM 策略和授权

  • 启用和禁用密钥

  • 轮换加密材料

  • 添加标签

  • 创建引用密钥的别名

  • 计划密钥的删除

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

重要

Amazon Glue 仅支持对称客户管理型密钥。KMS 密钥列表仅显示对称密钥。但是,如果选择了选择 KMS 密钥 ARN,则可通过控制台输入任何密钥类型的 ARN。确保仅为对称密钥输入 ARN。

要创建对称客户管理型密钥,请按照《Amazon Key Management Service 开发人员指南》中的 creating symmetric customer managed keys 部分的步骤进行操作。

启用数据目录静态加密时,将使用 KMS 密钥对以下资源类型进行加密:

  • 数据库

  • 分区

  • 表格版本

  • 列统计数据

  • 用户定义的函数

  • 数据目录视图

Amazon Glue 加密上下文

加密上下文是一组可选的键值对,包含有关数据的其他上下文信息。Amazon KMS 会将加密上下文用作其他已经过验证的数据以支持经过身份验证的加密。在请求中包含加密上下文以加密数据时,Amazon KMS 将加密上下文绑定到加密的数据。要解密数据,请在请求中包含相同的加密上下文。Amazon Glue 在所有 Amazon KMS 加密操作中使用相同的加密上下文,其中键为 glue_catalog_id,值为 catalogId

"encryptionContext": { "glue_catalog_id": "111122223333" }

使用 Amazon 托管密钥或对称的户管理型密钥来加密数据目录时,还可以使用审计记录和日志中的加密上下文来识别密钥的使用情况。加密上下文还会显示在 Amazon CloudTrail 生成的日志或 Amazon CloudWatch 日志中。

启用加密

您可以通过 Amazon Glue 控制台中的数据目录设置,或者使用 Amazon CLI 为 Amazon Glue Data Catalog 对象启用加密。

Console
使用控制台启用加密
  1. 登录 Amazon Web Services Management Console,然后打开 Amazon Glue 控制台,网址为:https://console.aws.amazon.com/glue/

  2. 在导航窗格中,选择数据目录

  3. 数据目录设置页面上,选中元数据加密复选框,然后选择一个 Amazon KMS 密钥。

    启用加密时,如果您未指定客户管理型密钥,则加密设置将使用 Amazon 托管 KMS 密钥。

  4. (可选)如果您使用客户管理型密钥加密数据目录,Data Cat alog提供了一个用于注册 IAM 角色来加密和解密资源的选项。您需要向您的 IAM 角色授予 Amazon Glue 可以代表代入的权限。这包括加密和解密数据的 Amazon KMS 权限。

    当您在数据目录中创建新资源时,Amazon Glue 将代入所提供的 IAM 角色来加密数据。同样,当使用者访问资源时,Amazon Glue 也会代入该 IAM 角色来解密数据。如果您注册了具有所需权限的 IAM 角色,则调用主体不再需要访问密钥和解密数据的权限。

    重要

    只有当您使用客户管理型密钥加密数据目录资源时,您才能将 KMS 操作委派给 IAM 角色。KMS 角色委派功能目前不支持使用 Amazon 托管密钥加密数据目录资源的情形。

    警告

    当您启用 IAM 角色委派 KMS 操作的权限时,您将无法再访问以前使用 Amazon 托管密钥加密的数据目录资源。

    1. 要启用 Amazon Glue 可以代入以代表您加密和解密数据的 IAM 角色,请选择将 KMS 操作委派给 IAM 角色选项。

    2. 然后选择一个 IAM 角色。

      要创建 IAM 角色,请参阅 为 Amazon Glue 创建 IAM 角色

      Amazon Glue 访问数据目录时将代入的 IAM 角色必须具有加密和解密数据目录中元数据的权限。您可以创建一个 IAM 角色并附加以下内联策略:

      • 添加以下策略以包括加密和解密数据目录的 Amazon KMS 权限。

        { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:<region>:<account-id>:key/<key-id>" } ] }
      • 然后将以下信任策略添加到该角色,以便 Amazon Glue 服务代入该 IAM 角色。

        { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "glue.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
      • 然后向该 IAM 角色添加 iam:PassRole 权限。

        { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::<account-id>:role/<encryption-role-name>" ] } ] }

    启用加密后,如果您尚未指定 Amazon Glue 要代入的 IAM 角色,则访问数据目录的主体必须具有执行以下 API 操作的权限:

    • kms:Decrypt

    • kms:Encrypt

    • kms:GenerateDataKey

Amazon CLI
使用开发工具包或 Amazon CLI 启用加密
  • 使用 PutDataCatalogEncryptionSettings API 操作。如果未指定密钥,Amazon Glue 将使用客户账户的 Amazon 托管加密密钥对数据目录进行加密。

    aws glue put-data-catalog-encryption-settings \ --data-catalog-encryption-settings '{ "EncryptionAtRest": { "CatalogEncryptionMode": "SSE-KMS-WITH-SERVICE-ROLE", "SseAwsKmsKeyId": "arn:aws:kms:<region>:<account-id>:key/<key-id>", "CatalogEncryptionServiceRole":"arn:aws:iam::<account-id>:role/<encryption-role-name>" } }'

启用加密后,您在数据目录对象中创建的所有对象都将被加密。如果您清除此设置,您在数据目录中创建的对象将不再加密。您可以继续使用所需的 KMS 权限访问数据目录中现有的加密对象。

重要

对于在数据目录中使用 Amazon KMS 密钥加密的任何对象,此密钥必须在 Amazon KMS 密钥存储中保持可用。如果删除密钥,则无法再对对象进行解密。在某些情况下,您可能希望阻止访问数据目录元数据。

监控用于 Amazon Glue 的 KMS 密钥

当您将 KMS 密钥用于数据目录资源时,您可以使用 Amazon CloudTrail 或 Amazon CloudWatch 日志来跟踪 Amazon Glue 发送到 Amazon KMS的请求。Amazon CloudTrail 会监控并记录 Amazon Glue 为了访问使用您的 KMS 密钥加密的数据而调用的 KMS 操作。

以下是 DecryptGenerateDataKey 操作的 Amazon CloudTrail 事件示例。

Decrypt
{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "AROAXPHTESTANDEXAMPLE:Sampleuser01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROAXPHTESTANDEXAMPLE", "arn": "arn:aws:iam::111122223333:role/Admin", "accountId": "111122223333", "userName": "Admin" }, "webIdFederationData": {}, "attributes": { "creationDate": "2024-01-10T14:33:56Z", "mfaAuthenticated": "false" } }, "invokedBy": "glue.amazonaws.com" }, "eventTime": "2024-01-10T15:18:11Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "eu-west-2", "sourceIPAddress": "glue.amazonaws.com", "userAgent": "glue.amazonaws.com", "requestParameters": { "encryptionContext": { "glue_catalog_id": "111122223333" }, "encryptionAlgorithm": "SYMMETRIC_DEFAULT" }, "responseElements": null, "requestID": "43b019aa-34b8-4798-9b98-ee968b2d63df", "eventID": "d7614763-d3fe-4f84-a1e1-3ca4d2a5bbd5", "readOnly": true, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:<region>:111122223333:key/<key-id>" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "eventCategory": "Management", "sessionCredentialFromConsole": "true" }
GenerateDataKey
{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "AROAXPHTESTANDEXAMPLE:V_00_GLUE_KMS_GENERATE_DATA_KEY_111122223333", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/V_00_GLUE_KMS_GENERATE_DATA_KEY_111122223333", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROAXPHTESTANDEXAMPLE", "arn": "arn:aws:iam::111122223333:role/Admin", "accountId": "AKIAIOSFODNN7EXAMPLE", "userName": "Admin" }, "webIdFederationData": {}, "attributes": { "creationDate": "2024-01-05T21:15:47Z", "mfaAuthenticated": "false" } }, "invokedBy": "glue.amazonaws.com" }, "eventTime": "2024-01-05T21:15:47Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "eu-west-2", "sourceIPAddress": "glue.amazonaws.com", "userAgent": "glue.amazonaws.com", "requestParameters": { "keyId": "arn:aws:kms:eu-west-2:AKIAIOSFODNN7EXAMPLE:key/AKIAIOSFODNN7EXAMPLE", "encryptionContext": { "glue_catalog_id": "111122223333" }, "keySpec": "AES_256" }, "responseElements": null, "requestID": "64d1783a-4b62-44ba-b0ab-388b50188070", "eventID": "1c73689b-2ef2-443b-aed7-8c126585ca5e", "readOnly": true, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:eu-west-2:111122223333:key/AKIAIOSFODNN7EXAMPLE" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "eventCategory": "Management" }