

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

# 日誌記錄和監控
<a name="security-logging-monitoring"></a>

若要偵測事件，在事件發生時收到提醒，以及回應它們，請搭配 Amazon EMR on EKS 使用這些選項：
+ 使用 AWS CloudTrail - 監控 Amazon EMR on EKS [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/)提供 Amazon EMR on EKS 中使用者、角色 AWS 或服務所採取動作的記錄。它會從 Amazon EMR 主控台擷取呼叫，並將 Amazon EMR on EKS API 操作的呼叫編碼為事件。這可讓您判斷對 Amazon EMR on EKS 提出的請求、提出請求的 IP 地址、提出請求的對象、提出請求的時間，以及其他詳細資訊。如需詳細資訊，請參閱[使用 記錄 Amazon EMR on EKS API 呼叫 AWS CloudTrail](logging-using-cloudtrail.md)。
+ 搭配使用 CloudWatch Events 與 Amazon EMR on EKS - CloudWatch Events 可提供近乎即時的系統事件串流，說明 AWS 資源的變更。CloudWatch Events 會察覺這些操作變更的發生，回應它們並視需要採取更正動作，方法為傳送訊息來回應環境、啟用功能、執行變更和擷取狀態資訊。若要搭配 Amazon EMR on EKS 使用 CloudWatch Events，請透過 CloudTrail 建立 Amazon EMR on EKS API 呼叫觸發的規則。如需詳細資訊，請參閱[使用 Amazon CloudWatch Events 監控作業](monitoring.md#monitoring-cloudwatch-events)。

# 使用受管儲存體加密 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 使用，並僅用於從特定虛擬叢集中執行的任務產生的日誌。

# 使用 記錄 Amazon EMR on EKS API 呼叫 AWS CloudTrail
<a name="logging-using-cloudtrail"></a>

Amazon EMR on EKS 已與 服務整合 AWS CloudTrail，此服務提供使用者、角色或 AWS 服務在 Amazon EMR on EKS 中採取之動作的記錄。CloudTrail 會將 Amazon EMR on EKS 的所有 API 呼叫擷取為事件。擷取的呼叫包括來自 Amazon EMR on EKS 主控台的呼叫，以及對 Amazon EMR on EKS API 操作發出的程式碼呼叫。如果您建立追蹤，就可以將 CloudTrail 事件持續交付到 Amazon S3 儲存貯體，包括 Amazon EMR on EKS 的事件。即使您未設定追蹤，依然可以透過 CloudTrail 主控台中的**事件歷史記錄**檢視最新事件。您可以利用 CloudTrail 所收集的資訊來判斷向 Amazon EMR on EKS 發出的請求，以及發出請求的 IP 地址、人員、時間和其他詳細資訊。

若要進一步了解 CloudTrail，請參閱[「AWS CloudTrail 使用者指南」](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)。

## CloudTrail 中的 Amazon EMR on EKS 資訊
<a name="emr-on-eks-info-in-cloudtrail"></a>

當您建立 AWS 帳戶時，會在您的帳戶上啟用 CloudTrail。當活動在 Amazon EMR on EKS 中發生時，該活動會與**事件歷史記錄**中的其他 AWS 服務事件一起記錄在 CloudTrail 事件中。您可以在 AWS 帳戶中檢視、搜尋和下載最近的事件。如需詳細資訊，請參閱[「使用 CloudTrail 事件歷史記錄檢視事件」](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html)。

若要持續記錄您 AWS 帳戶中的事件，包括 Amazon EMR on EKS 的事件，請建立追蹤。*線索*能讓 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)
+ [設定 CloudTrail 的 Amazon SNS 通知](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)

CloudTrail 會記錄所有 Amazon EMR on EKS 動作，並記錄在 [Amazon EMR on EKS API 文件](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/)中。例如，對 `CreateVirtualCluster`、`StartJobRun` 和 `ListJobRuns` 動作發出的呼叫會在 CloudTrail 記錄檔案中產生專案。

每一筆事件或日誌專案都會包含產生請求者的資訊。身分資訊可協助您判斷下列事項：
+ 是否使用根或 AWS Identity and Access Management (IAM) 使用者登入資料提出請求。
+ 提出該請求時，是否使用了特定角色或聯合身分使用者的暫時安全憑證。
+ 請求是否由其他 AWS 服務提出。

如需詳細資訊，請參閱 [CloudTrail userIdentity 元素](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"
}
```