加密数据目录 - 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托管密钥是您账户中的 KMS 密钥,由与集成的Amazon服务代表您创建、管理和使用Amazon KMS。您可以查看账户中的Amazon托管密钥,查看其密钥策略,并在Amazon CloudTrail日志中审核其使用情况。但是,您无法管理这些密钥或更改其权限。

静态加密会自动与集成,Amazon KMS用于管理用于加密元数据的Amazon托管密钥。Amazon Glue如果您启用元数据加密时Amazon托管密钥不存在,则Amazon KMS会自动为您创建一个新密钥。

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

客户管理密钥

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

  • 制定并维护他们的关键策略、IAM 策略和资助

  • 启用和禁用它们

  • 轮换他们的加密材料

  • 添加标签

  • 创建引用它们的别名

  • 安排将其删除

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

重要

Amazon Glue仅支持对称的客户托管密钥。KMS 密钥列表仅显示对称密钥。但是,如果您选择 “选择 KMS 密钥 ARN”,则控制台允许您为任何密钥类型输入 ARN。确保仅为对称密钥输入 ARN。

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

启用静态数据目录加密时,将使用 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 Glue Data Catalog对象启用加密,也可以使用Amazon CLI。

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

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

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

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

  4. (可选)当您使用客户托管密钥加密数据目录时,数据目录提供了一个选项,用于注册 IAM 角色来加密和解密资源。您需要授予Amazon Glue可以代表您担任的 IAM 角色的权限。这包括加密和解密数据的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 密钥存储中保持可用。如果删除密钥,则无法再对对象进行解密。在某些情况下,您可能希望阻止访问数据目录元数据。

监控您的 KMS 密钥 Amazon Glue

当您将 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" }