Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅
中国的 Amazon Web Services 服务入门
(PDF)。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用托管存储对 EKS 日志上的 Amazon EMR 进行加密
以下各节介绍如何为日志配置加密。
启用加密
要使用您自己的 KMS 密钥加密托管存储中的日志,请在提交作业运行时使用以下配置。
"monitoringConfiguration": {
"managedLogs": {
"allowAWSToRetainLogs":"ENABLED",
"encryptionKeyArn":"KMS key arn
"
},
"persistentAppUI": "ENABLED"
}
该allowAWSToRetainLogs
配置 Amazon 允许在使用 Native FGAC 运行作业时保留系统命名空间日志。该persistentAppUI
配置 Amazon 允许保存用于生成 Spark UI 的事件日志。encryptionKeyArn
用于指定您要使用的 KMS 密钥 ARN 来加密存储的日志。 Amazon
日志加密所需的权限
必须允许提交作业或查看 Spark UI 的用户使用加密密钥执行操作kms:DescribeKey
kms:GenerateDataKey
、和kms:Decrypt
。这些权限用于验证密钥的有效性,并检查用户是否具有读取和写入使用 KMS 密钥加密的日志的必要权限。如果提交任务的用户缺少必要的密钥权限,则 EKS 上的 Amazon EMR 会拒绝提交任务运行。
用于调用的角色的 IAM 策略示例 StartJobRun
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "emr-containers:StartJobRun",
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"kms:DescribeKey",
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": "KMS key ARN
",
"Effect": "Allow"
}
]
}
您还必须配置 KMS 密钥以允许persistentappui.elasticmapreduce.amazonaws.com
和elasticmapreduce.amazonaws.com
服务主体使用kms:GenerateDataKey
和kms:Decrypt
。这允许 EMR 读取使用 KMS 密钥加密的日志并将其写入托管存储。
KMS 密钥策略示例
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "IAM role ARN used to call StartJobRun
"
},
"Action": "kms:DescribeKey",
"Resource": "*",
"Condition": {
"StringLike": {
"kms:viaService": "emr-containers.us-east-1
.amazonaws.com"
}
}
},
{
"Effect": "Allow",
"Principal": {
"AWS": "IAM role ARN used to call StartJobRun
"
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": "*",
"Condition": {
"StringLike": {
"kms:viaService": "emr-containers.us-east-1
.amazonaws.com",
"kms:EncryptionContext:aws:emr-containers:virtualClusterId": "virtual cluster id
"
}
}
},
{
"Effect": "Allow",
"Principal": {
"Service": [
"persistentappui.elasticmapreduce.amazonaws.com",
"elasticmapreduce.amazonaws.com"
]
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": "*",
"Condition": {
"StringLike": {
"kms:EncryptionContext:aws:emr-containers:virtualClusterId": "virtual cluster id
",
"aws:SourceArn": "virtual cluster ARN
"
}
}
}
]
}
作为安全最佳实践,我们建议您添加kms:viaService
kms:EncryptionContext
、和aws:SourceArn
条件。这些条件有助于确保密钥仅由 EKS 上的 Amazon EMR 使用,并且仅用于在特定虚拟集群中运行的任务生成的日志。