本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用托管存储对 EKS 日志上的 Amazon EMR 进行加密
以下各节介绍如何为日志配置加密。
      启用加密
      要使用您自己的 KMS 密钥加密托管存储中的日志,请在提交作业运行时使用以下配置。
      "monitoringConfiguration": {
            "managedLogs": {
                "allowAWSToRetainLogs":"ENABLED",
                "encryptionKeyArn":"KMS key arn"
            },
            "persistentAppUI": "ENABLED"
        }
      该allowAWSToRetainLogs配置 AWS 允许在使用 Native FGAC 运行作业时保留系统命名空间日志。该persistentAppUI配置 AWS 允许保存用于生成 Spark UI 的事件日志。encryptionKeyArn用于指定您要使用的 KMS 密钥 ARN 来加密存储的日志。 AWS
     
      日志加密所需的权限
      必须允许提交作业或查看 Spark UI 的用户使用加密密钥执行操作kms:DescribeKeykms:GenerateDataKey、和kms:Decrypt。这些权限用于验证密钥的有效性,并检查用户是否具有读取和写入使用 KMS 密钥加密的日志的必要权限。如果提交任务的用户缺少必要的密钥权限,则 EKS 上的 Amazon EMR 会拒绝提交任务运行。
      用于调用的角色的 IAM 策略示例  StartJobRun
      
    - 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:viaServicekms:EncryptionContext、和aws:SourceArn条件。这些条件有助于确保密钥仅由 EKS 上的 Amazon EMR 使用,并且仅用于在特定虚拟集群中运行的任务生成的日志。