

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

# 日志记录和监控
<a name="security-logging-monitoring"></a>

要检测事件、在发生事件时接收警报并进行响应，请针对 Amazon EMR on EKS 使用以下选项：
+ 在 EKS 上监控 Amazon EMR，使用 AWS CloudTrail —— [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/)在 EKS 上的 Amazon EMR 中记录用户、角色或 AWS 服务所采取的操作。它捕获来自 Amazon EMR 控制台的调用以及以事件方式对 Amazon EMR on EKS API 操作的代码调用。您可确定向 Amazon EMR on EKS 发出的请求、发出请求的 IP 地址、何人发出的请求、请求的发出时间以及其它详细信息。有关更多信息，请参阅 [使用在 EKS API 调用上记录 Amazon EMR AWS CloudTrail](logging-using-cloudtrail.md)。
+ 在 EKS 上将 CloudWatch 事件与 Amazon EMR 配合使用 — CloudWatch Events 提供描述资源变化的近乎实时的系统事件流。 AWS CloudWatch 通过发送消息以响应环境、激活函数、进行更改和捕获状态信息，事件会在操作变化发生时意识到操作变化，并对其做出响应，并在必要时采取纠正措施。要在 EKS 上使用带有 Amazon EMR CloudWatch 的事件，请创建一个规则，通过调用 EKS API 在 Amazon EMR 上触发。 CloudTrail有关更多信息，请参阅 [通过 Amazon Events CloudWatch 监控作业](monitoring.md#monitoring-cloudwatch-events)。

# 使用托管存储加密 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 使用，并且仅用于在特定虚拟集群中运行的作业生成的日志。

# 使用在 EKS API 调用上记录 Amazon EMR AWS CloudTrail
<a name="logging-using-cloudtrail"></a>

EKS 上的 Amazon EMR 与 AWS CloudTrail一项服务集成，该服务提供用户、角色或 AWS 服务在 EKS 上的 Amazon EMR 中采取的操作的记录。 CloudTrail 将 EKS 上的 Amazon EMR 的所有 API 调用捕获为事件。这些捕获包括来自 Amazon EMR on EKS 控制台的调用和对 Amazon EKS API 操作的代码调用。如果您创建跟踪，则可以允许将 CloudTrail 事件持续传输到 Amazon S3 存储桶，包括 EKS 上的 Amazon EMR 事件。如果您未配置跟踪，您仍然可以在 CloudTrail 控制台的 “事件**历史记录” 中查看最新的事件**。使用收集的信息 CloudTrail，您可以确定在 EKS 上向 Amazon EMR 发出的请求、发出请求的 IP 地址、谁提出了请求、何时提出请求以及其他详细信息。

要了解更多信息 CloudTrail，请参阅[AWS CloudTrail 用户指南](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)。

## EKS 上的 Amazon EMR 信息位于 CloudTrail
<a name="emr-on-eks-info-in-cloudtrail"></a>

CloudTrail 在您创建 AWS 账户时已在您的账户上启用。**当 EKS 上的 Amazon EMR 中发生活动时，该活动会与其他 AWS 服务 CloudTrail 事件一起记录在事件历史记录中。**您可以在自己的 AWS 账户中查看、搜索和下载最近发生的事件。有关更多信息，请参阅[使用事件历史记录查看 CloudTrail 事件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html)。

要持续记录您的 AWS 账户中的事件，包括 EKS 上的 Amazon EMR 事件，请创建跟踪。*跟踪*允许 CloudTrail 将日志文件传输到 Amazon S3 存储桶。默认情况下，当您在控制台中创建跟踪时，该跟踪将应用于所有 AWS 区域。跟踪记录 AWS 分区中所有区域的事件，并将日志文件传送到您指定的 Amazon S3 存储桶。此外，您可以配置其他 AWS 服务，以进一步分析和处理 CloudTrail 日志中收集的事件数据。有关更多信息，请参阅下列内容：
+ [创建跟踪记录概述](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)
+ [CloudTrail 支持的服务和集成](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-aws-service-specific-topics.html)
+ [配置 Amazon SNS 通知 CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/configure-sns-notifications-for-cloudtrail.html)
+ [接收来自多个地区的 CloudTrail 日志文件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html)和[接收来自多个账户的 CloudTrail 日志文件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-receive-logs-from-multiple-accounts.html)

EKS 上的所有亚马逊 EMR 操作均由亚马逊 EMR 在 EKS API 文档中记录 CloudTrail 并记录[在亚马逊 EMR 中](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/)。例如，调用`StartJobRun`和`ListJobRuns`操作会在 CloudTrail 日志文件中生成条目。`CreateVirtualCluster`

每个事件或日志条目都包含有关生成请求的人员信息。身份信息有助于您确定以下内容：
+ 请求是使用根证书还是 AWS Identity and Access Management (IAM) 用户凭证发出。
+ 请求是使用角色还是联合用户的临时安全凭证发出的。
+ 请求是否由其他 AWS 服务发出。

有关更多信息，请参阅[CloudTrail 用户身份元素](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-user-identity.html)。

## 了解 Amazon EMR on EKS 日志文件条目
<a name="understanding-emr-on-eks-entries"></a>

跟踪是一种配置，允许将事件作为日志文件传输到您指定的 Amazon S3 存储桶。 CloudTrail 日志文件包含一个或多个日志条目。事件代表来自任何来源的单个请求，包括有关请求的操作、操作的日期和时间、请求参数等的信息。 CloudTrail 日志文件不是公共 API 调用的有序堆栈跟踪，因此它们不会按任何特定的顺序出现。

以下示例显示了演示该[https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_ListJobRuns.html](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_ListJobRuns.html)操作的 CloudTrail 日志条目。

```
{
  "eventVersion": "1.05",
  "userIdentity": {
    "type": "AssumedRole",
    "principalId": "AIDACKCEVSQ6C2EXAMPLE:admin",
    "arn": "arn:aws:sts::012345678910:assumed-role/Admin/admin",
    "accountId": "012345678910",
    "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
    "sessionContext": {
      "sessionIssuer": {
        "type": "Role",
        "principalId": "AIDACKCEVSQ6C2EXAMPLE",
        "arn": "arn:aws:iam::012345678910:role/Admin",
        "accountId": "012345678910",
        "userName": "Admin"
      },
      "webIdFederationData": {},
      "attributes": {
        "mfaAuthenticated": "false",
        "creationDate": "2020-11-04T21:49:36Z"
      }
    }
  },
  "eventTime": "2020-11-04T21:52:58Z",
  "eventSource": "emr-containers.amazonaws.com",
  "eventName": "ListJobRuns",
  "awsRegion": "us-east-1",
  "sourceIPAddress": "203.0.113.1",
  "userAgent": "aws-cli/1.11.167 Python/2.7.10 Darwin/16.7.0 botocore/1.7.25",
  "requestParameters": {
    "virtualClusterId": "1K48XXXXXXHCB"
  },
  "responseElements": null,
  "requestID": "890b8639-e51f-11e7-b038-EXAMPLE",
  "eventID": "874f89fa-70fc-4798-bc00-EXAMPLE",
  "readOnly": true,
  "eventType": "AwsApiCall",
  "recipientAccountId": "012345678910"
}
```