Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅
中国的 Amazon Web Services 服务入门
(PDF)。
使用托管存储加密 Amazon EMR on EKS 日志
以下各节向您展示如何配置日志加密。
启用加密
要使用您自己的 KMS 密钥加密托管存储中的日志,请在提交作业运行时使用以下配置。
"monitoringConfiguration": {
"managedLogs": {
"allowAWSToRetainLogs":"ENABLED",
"encryptionKeyArn":"KMS key arn"
},
"persistentAppUI": "ENABLED"
}
allowAWSToRetainLogs 配置允许 Amazon 在使用原生 FGAC 运行作业时保留系统命名空间日志。persistentAppUI 配置允许 Amazon 保存用于生成 Spark UI 的事件日志。encryptionKeyArn 用于指定要用于对 Amazon 存储的日志进行加密的 KMS 密钥 ARN。
日志加密所需的权限
必须允许提交作业或查看 Spark UI 的用户对加密密钥执行 kms:DescribeKey、kms:GenerateDataKey 和 kms:Decrypt 操作。这些权限用于验证密钥的有效性,并检查用户是否拥有读取和写入使用 KMS 密钥加密的日志所需的权限。如果提交作业的用户没有必要的密钥权限,则 Amazon EMR on EKS 会拒绝提交作业运行。
用于调用 StartJobRun 的角色的 IAM 策略示例
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Action": [
"emr-containers:StartJobRun"
],
"Resource": [
"*"
],
"Effect": "Allow",
"Sid": "AllowEMRCONTAINERSStartjobrun"
},
{
"Action": [
"kms:DescribeKey",
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": [
"arn:aws:kms:*:*:key/key-id"
],
"Effect": "Allow",
"Sid": "AllowKMSDescribekey"
}
]
}
您还必须配置 KMS 密钥以允许 persistentappui.elasticmapreduce.amazonaws.com 和 elasticmapreduce.amazonaws.com 服务主体使用 kms:GenerateDataKey 和 kms:Decrypt。这样,EMR 就可以读取使用 KMS 密钥加密的日志并将其写入托管存储。
KMS 密钥策略示例
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:DescribeKey"
],
"Resource": [
"*"
],
"Condition": {
"StringLike": {
"kms:viaService": "emr-containers.*.amazonaws.com"
}
},
"Sid": "AllowKMSDescribekey"
},
{
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": [
"*"
],
"Condition": {
"StringLike": {
"kms:viaService": "emr-containers.*.amazonaws.com",
"kms:EncryptionContext:aws:emr-containers:virtualClusterId": "virtual cluster id"
}
},
"Sid": "AllowKMSDecryptGenerate"
},
{
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": [
"*"
],
"Condition": {
"StringLike": {
"kms:EncryptionContext:aws:emr-containers:virtualClusterId": "virtual cluster id"
},
"ArnLike": {
"aws:SourceArn": "arn:aws:emr-containers:*:*:/virtualclusters/virtual_cluster_id"
}
},
"Sid": "AllowKMSDecryptService"
}
]
}
作为安全最佳实践,我们建议您添加 kms:viaService、kms:EncryptionContext 和 aws:SourceArn 条件。这些条件有助于确保密钥仅供 Amazon EMR on EKS 使用,并且仅用于在特定虚拟集群中运行的作业生成的日志。