Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅
中国的 Amazon Web Services 服务入门
(PDF)。
加密数据目录
Amazon Glue Data Catalog 加密可提高敏感数据的安全性。Amazon Glue与 Amazon Key Management Service(Amazon KMS)集成,以加密存储在 Data Catalog 中的元数据,包括自动注册的资产,您可通过补充业务上下文信息对其进行丰富优化,以支持语义搜索。您可以使用 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
-
使用控制台启用加密
登录 Amazon Web Services 管理控制台,然后打开 Amazon Glue 控制台,网址为:https://console.aws.amazon.com/glue/。
-
在导航窗格中,选择数据目录。
-
在数据目录设置页面上,选中元数据加密复选框,然后选择一个 Amazon KMS 密钥。
启用加密时,如果您未指定客户管理型密钥,则加密设置将使用 Amazon 托管 KMS 密钥。
-
(可选)如果您使用客户管理型密钥加密数据目录,Data Cat alog提供了一个用于注册 IAM 角色来加密和解密资源的选项。您需要向您的 IAM 角色授予 Amazon Glue 可以代表代入的权限。这包括加密和解密数据的 Amazon KMS 权限。
当您在数据目录中创建新资源时,Amazon Glue 将代入所提供的 IAM 角色来加密数据。同样,当使用者访问资源时,Amazon Glue 也会代入该 IAM 角色来解密数据。如果您注册了具有所需权限的 IAM 角色,则调用主体不再需要访问密钥和解密数据的权限。
只有当您使用客户管理型密钥加密数据目录资源时,您才能将 KMS 操作委派给 IAM 角色。KMS 角色委派功能目前不支持使用 Amazon 托管密钥加密数据目录资源的情形。
当您启用 IAM 角色委派 KMS 操作的权限时,您将无法再访问以前使用 Amazon 托管密钥加密的数据目录资源。
-
要启用 Amazon Glue 可以代入以代表您加密和解密数据的 IAM 角色,请选择将 KMS 操作委派给 IAM 角色选项。
-
然后选择一个 IAM 角色。
要创建 IAM 角色,请参阅 为 Amazon Glue 创建 IAM 角色。
Amazon Glue 访问数据目录时将代入的 IAM 角色必须具有加密和解密数据目录中元数据的权限。您可以创建一个 IAM 角色并附加以下内联策略:
-
添加以下策略以包括加密和解密数据目录的 Amazon KMS 权限。
JSON
- JSON
-
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:Encrypt",
"kms:GenerateDataKey"
],
"Resource": "arn:aws:kms:us-east-1:111122223333:key/<key-id>"
}
]
}
-
然后将以下信任策略添加到该角色,以便 Amazon Glue 服务代入该 IAM 角色。
JSON
- JSON
-
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "glue.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
-
然后向该 IAM 角色添加 iam:PassRole 权限。
JSON
- JSON
-
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iam:PassRole"
],
"Resource": [
"arn:aws:iam::111122223333:role/<encryption-role-name>"
]
}
]
}
启用加密后,如果您尚未指定 Amazon Glue 要代入的 IAM 角色,则访问 Data Catalog 的主体必须具有对 KMS 密钥执行以下 Amazon KMS 操作的权限:
kms:DescribeKey
kms:Decrypt
kms:Encrypt
kms:GenerateDataKey
kms:CreateGrant
以下策略授予主体所需的权限。kms:CreateGrant 操作允许 Amazon Glue 在 Amazon KMS 请求完成后在后台加密和重新加密 Data Catalog 元数据及搜索索引。Amazon Glue 将授权范围限定为 glue_catalog_id 加密上下文。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "kms:DescribeKey",
"Resource": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
},
{
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:Encrypt",
"kms:GenerateDataKey"
],
"Resource": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
},
{
"Effect": "Allow",
"Action": "kms:CreateGrant",
"Resource": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab",
"Condition": {
"StringEquals": {
"kms:EncryptionContext:glue_catalog_id": "123456789012"
},
"StringLike": {
"kms:CallerAccount": "123456789012"
},
"Bool": {
"kms:GrantIsForAWSResource": "true"
}
}
}
]
}
- 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 KMS 客户自主管理型密钥加密目录资产
受支持的目录资源会在您的 Amazon Glue Data Catalog 中自动注册为资产。您可以向这些资产添加业务上下文,从而在 Amazon Glue 中对此元数据进行语义搜索和筛选。当您使用客户自主管理型密钥启用元数据加密时,Amazon Glue 还会使用您的 KMS 密钥对 Data Catalog 的搜索索引进行加密。无需其他步骤——作为元数据加密的一部分,Amazon Glue 会自动启用搜索索引加密。
如果您之前使用客户自主管理型密钥启用了 Data Catalog 加密,且现有策略仅包含 kms:Decrypt、kms:Encrypt 和 kms:GenerateDataKey,则必须添加以下权限以支持目录资产和语义搜索:
有关包含这些权限的完整策略,请参阅 启用加密。如果您是首次设置加密,则该部分中的策略已包含所有必要权限。
对 Data Catalog 资产进行语义搜索不支持 Amazon 托管密钥(aws/glue)。如果您的 Data Catalog 元数据是使用 aws/glue 加密的,则只有将配置更改为使用客户自主管理型密钥或移除该配置后,才能搜索该目录。
启用元数据加密是一项异步操作。Amazon Glue 接受您的请求后,将完成加密设置,包括对现有搜索索引进行加密。首次启用加密可能需要一些时间才能完成,具体取决于 Data Catalog 的大小。在此期间,业务上下文和搜索 API 会返回错误,直到状态变为 Enabled。
下表介绍了 Data Catalog 资产元数据的不同加密状态:
| Status |
说明 |
启用 |
Amazon Glue 正在设置加密。首次启用加密时,只有在设置完成后才能使用搜索功能。当您从一个客户自主管理型密钥更改为另一个时,搜索功能仍然可用。 |
已启用 |
加密已完成。您的 Data Catalog 元数据可供搜索。 |
已启用(有错误) |
加密已完成,搜索功能可用,但 Amazon Glue 无法处理某些元数据。控制台将显示错误消息。要重试失败的项目,请修复错误后再次保存加密设置。 |
失败 |
加密未能完成,搜索功能不可用。请查看错误消息,更正配置,然后使用客户自主管理型密钥再次保存加密设置。 |
正在禁用 |
Amazon Glue 正在使用您的 KMS 密钥禁用搜索索引中的加密。 |
已禁用 |
您的 Data Catalog 元数据和搜索索引不再使用您的 KMS 密钥进行加密。业务上下文和搜索 API 可继续正常使用。 |
当您将 Data Catalog 加密从一个客户自主管理型密钥更改为另一个时,Amazon Glue 将使用新密钥重新加密搜索索引。在重新加密过程中,搜索功能仍然可用。禁用元数据加密后,Amazon Glue 将从搜索索引中移除您的 KMS 密钥,状态将更改为 Disabled。
在加密状态恢复为 Enabled(或 Disabled,如果您已禁用加密)之前,请勿禁用、删除或撤销对先前的 KMS 密钥的访问权限。如果 Amazon Glue 在操作完成之前失去了对先前密钥的访问权限,它将无法解密搜索索引,状态将更改为 Failed,并且对 Data Catalog 的搜索不可用。
启用或更改元数据加密的主体必须具有 启用加密 中描述的 kms:CreateGrant 权限。Amazon Glue 在搜索索引的 Amazon KMS 操作中使用 glue_catalog_id 加密上下文(值为您的 catalogId),与 Amazon Glue 加密上下文 一致。Amazon Glue 为搜索索引进行的 Amazon KMS 调用记录在 Amazon CloudTrail 中。
访问业务上下文和搜索的主体还必须具有对 KMS 密钥的访问权限。如果您已将 Amazon KMS 操作委托给 IAM 服务角色,则该服务角色必须具有对 KMS 密钥的访问权限。
除了身份策略之外,您还必须在 KMS 密钥策略中添加以下语句,以允许 Amazon Glue 为搜索索引加密创建授权。kms:GrantIsForAWSResource 条件将授权限制为 Amazon Glue,glue_catalog_id 加密上下文将其范围限定为您的 Data Catalog。要使用该语句,请将用户输入占位符替换为您自己的信息。
{
"Sid": "AllowCreateGrantForSearchIndexEncryption",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::account-id:root"
},
"Action": "kms:CreateGrant",
"Resource": "arn:aws:kms:region:account-id:key/key-id",
"Condition": {
"StringLike": {
"kms:CallerAccount": "account-id"
},
"Bool": {
"kms:GrantIsForAWSResource": "true"
},
"StringEquals": {
"kms:EncryptionContext:glue_catalog_id": "account-id"
}
}
}
监控用于 Amazon Glue 的 KMS 密钥
当您将 KMS 密钥用于数据目录资源时,您可以使用 Amazon CloudTrail 或 Amazon CloudWatch 日志来跟踪 Amazon Glue 发送到 Amazon KMS的请求。Amazon CloudTrail 会监控并记录 Amazon Glue 为了访问使用您的 KMS 密钥加密的数据而调用的 KMS 操作。
以下是 Decrypt、GenerateDataKey、CreateGrant 和 RetireGrant 操作的 Amazon CloudTrail 事件示例。使用客户自主管理型密钥启用加密时,Amazon Glue 会创建一个范围限定为 glue_catalog_id 加密上下文的 Amazon KMS 授权,以便在后台加密和重新加密 Data Catalog 元数据,并在 Amazon Glue 不再需要时停用该授权。
- 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"
}
- CreateGrant
-
使用客户自主管理型密钥启用加密时,Amazon Glue 会对 KMS 密钥创建授权,以便在后台加密和重新加密 Data Catalog 元数据。该授权的范围限定为 glue_catalog_id 加密上下文。
{
"eventVersion": "1.08",
"userIdentity": {
"type": "AssumedRole",
"principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01",
"arn": "arn:aws:sts::111122223333:assumed-role/Example/Sampleuser01",
"accountId": "111122223333",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"sessionContext": {
"sessionIssuer": {
"type": "Role",
"principalId": "AROAIGDTESTANDEXAMPLE",
"arn": "arn:aws:iam::111122223333:role/Example",
"accountId": "111122223333",
"userName": "Example"
},
"attributes": {
"creationDate": "2024-04-22T17:02:00Z",
"mfaAuthenticated": "false"
}
},
"invokedBy": "glue.amazonaws.com"
},
"eventTime": "2024-04-22T17:02:00Z",
"eventSource": "kms.amazonaws.com",
"eventName": "CreateGrant",
"awsRegion": "eu-west-2",
"sourceIPAddress": "glue.amazonaws.com",
"userAgent": "glue.amazonaws.com",
"requestParameters": {
"retiringPrincipal": "glue.eu-west-2.amazonaws.com",
"operations": [
"GenerateDataKey",
"Decrypt",
"Encrypt",
"ReEncryptFrom",
"ReEncryptTo",
"DescribeKey",
"RetireGrant"
],
"granteePrincipal": "glue.eu-west-2.amazonaws.com",
"constraints": {
"encryptionContextSubset": {
"glue_catalog_id": "111122223333"
}
},
"keyId": "arn:aws:kms:eu-west-2:111122223333:key/<key-id>"
},
"responseElements": {
"grantId": "0ab0ac0d0b000f00ea00cc0a0e00fc00bce000c000f0000000c0bc0a0000aaafSAMPLE",
"keyId": "arn:aws:kms:eu-west-2:111122223333:key/<key-id>"
},
"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:eu-west-2:111122223333:key/<key-id>"
}
],
"eventType": "AwsApiCall",
"managementEvent": true,
"recipientAccountId": "111122223333",
"eventCategory": "Management",
"sessionCredentialFromConsole": "true"
}
- RetireGrant
-
当 Amazon Glue 不再需要该授权时(例如,当您更改 KMS 密钥或禁用加密时),Amazon Glue 会停用它。
{
"eventVersion": "1.08",
"userIdentity": {
"type": "AWSService",
"invokedBy": "glue.amazonaws.com"
},
"eventTime": "2025-04-29T22:18:50Z",
"eventSource": "kms.amazonaws.com",
"eventName": "RetireGrant",
"awsRegion": "eu-west-2",
"sourceIPAddress": "glue.amazonaws.com",
"userAgent": "glue.amazonaws.com",
"requestParameters": null,
"responseElements": {
"keyId": "arn:aws:kms:eu-west-2:111122223333:key/<key-id>"
},
"additionalEventData": {
"grantId": "0ab0ac0d0b000f00ea00cc0a0e00fc00bce000c000f0000000c0bc0a0000aaafSAMPLE"
},
"requestID": "294308c0-7617-4727-b5c9-34eaf75aa8e3",
"eventID": "273708f7-5fbb-3a90-b04d-2b3138bf0ec9",
"readOnly": false,
"resources": [
{
"accountId": "111122223333",
"type": "AWS::KMS::Key",
"ARN": "arn:aws:kms:eu-west-2:111122223333:key/<key-id>"
}
],
"eventType": "AwsApiCall",
"managementEvent": true,
"recipientAccountId": "111122223333",
"sharedEventID": "b46377d7-b3c3-4bfd-a257-722bd3f3411d",
"eventCategory": "Management"
}