

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用受管儲存體加密 Amazon EMR on EKS 日誌
<a name="security_iam_fgac-logging-kms"></a>

以下各節說明如何設定日誌的加密。

## Enable encryption (啟用加密)
<a name="security_iam_fgac-logging-perms"></a>

若要使用您自己的 KMS 金鑰加密受管儲存中的日誌，請在提交任務執行時使用下列組態。

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

`allowAWSToRetainLogs` 組態允許 AWS 在使用原生 FGAC 執行任務時保留系統命名空間日誌。`persistentAppUI` 組態允許 AWS 儲存用於產生 Spark UI 的事件日誌。`encryptionKeyArn` 用於指定您要用來加密所存放日誌的 KMS 金鑰 ARN AWS。

## 日誌加密的必要許可
<a name="security_iam_fgac-logging-kms-perms"></a>

提交任務或檢視 Spark UI 的使用者必須允許`kms:Decrypt`加密金鑰的動作 `kms:DescribeKey`、 `kms:GenerateDataKey`和 。這些許可用於驗證金鑰的有效性，並檢查使用者是否具有讀取和寫入使用 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 使用，並僅用於從特定虛擬叢集中執行的任務產生的日誌。