加密数据目录 - AWS Glue

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

加密数据目录

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

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

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

AWS 托管密钥

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

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

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

客户管理密钥

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

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

  • 启用和禁用密钥

  • 轮换加密材料

  • 添加标签

  • 创建引用密钥的别名

  • 计划密钥的删除

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

重要

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

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

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

  • 数据库

  • 分区

  • 表格版本

  • 列统计数据

  • 用户定义的函数

  • 数据目录视图

AWS Glue 加密上下文

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

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

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

启用加密

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

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

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

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

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

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

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

    重要

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

    警告

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

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

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

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

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

      • 添加以下策略以包括加密和解密数据目录的 AWS 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>" } ] }
      • 然后将以下信任策略添加到该角色,以便 AWS 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>" ] } ] }

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

    • kms:Decrypt

    • kms:Encrypt

    • kms:GenerateDataKey

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

    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 权限访问数据目录中现有的加密对象。

重要

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

监控用于 AWS Glue 的 KMS 密钥

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

以下是 DecryptGenerateDataKey 操作的 AWS 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" }