

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用托管存储加密 Amazon EMR on EKS 日志
<a name="security_iam_fgac-logging-kms"></a>

以下各节向您展示如何配置日志加密。

## 启用加密
<a name="security_iam_fgac-logging-perms"></a>

要使用您自己的 KMS 密钥加密托管存储中的日志，请在提交作业运行时使用以下配置。

```
"monitoringConfiguration": {
            "managedLogs": {
                "allowAWSToRetainLogs":"ENABLED",
                "encryptionKeyArn":"KMS key arn"
            },
            "persistentAppUI": "ENABLED"
        }
```

该`allowAWSToRetainLogs`配置 AWS 允许在使用 Native FGAC 运行作业时保留系统命名空间日志。该`persistentAppUI`配置 AWS 允许保存用于生成 Spark UI 的事件日志。`encryptionKeyArn` 用于指定要用于对 AWS存储的日志进行加密的 KMS 密钥 ARN。

## 日志加密所需的权限
<a name="security_iam_fgac-logging-kms-perms"></a>

必须允许提交作业或查看 Spark UI 的用户对加密密钥执行 `kms:DescribeKey`、`kms:GenerateDataKey` 和 `kms:Decrypt` 操作。这些权限用于验证密钥的有效性，并检查用户是否拥有读取和写入使用 KMS 密钥加密的日志所需的权限。如果提交作业的用户没有必要的密钥权限，则 Amazon EMR on EKS 会拒绝提交作业运行。

**用于调用的角色的 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:viaService`、`kms:EncryptionContext` 和 `aws:SourceArn` 条件。这些条件有助于确保密钥仅供 Amazon EMR on EKS 使用，并且仅用于在特定虚拟集群中运行的作业生成的日志。