

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

# 設定 CloudTrail 的 AWS KMS 金鑰政策


您可以透過 AWS KMS key 三種方式建立 ：
+ CloudTrail 主控台
+  AWS 管理主控台
+ 的 AWS CLI

**注意**  
如果您在 CloudTrail 主控台中建立 KMS 金鑰，CloudTrail 會為您新增必要的 KMS 金鑰政策。您不需要手動新增政策陳述式。請參閱 [在 CloudTrail 主控台中建立的預設金鑰政策](default-kms-key-policy.md)。

如果您在 AWS 管理主控台 或 中建立 KMS 金鑰 AWS CLI，則必須將政策區段新增至金鑰，以便將其與 CloudTrail 搭配使用。此政策必須允許 CloudTrail 使用 金鑰來加密您的日誌檔案、摘要檔案和事件資料存放區，並允許您指定的使用者以未加密的形式讀取日誌檔案和摘要檔案。

請參閱下列資源：
+ 若要使用 建立 KMS 金鑰 AWS CLI，請參閱 [create-key](https://docs.aws.amazon.com/cli/latest/reference/kms/create-key.html)。
+ 若要編輯 CloudTrail 的 KMS 金鑰政策，請參閱《AWS Key Management Service 開發人員指南》**中的[編輯金鑰政策](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-editing)。
+ 如需 CloudTrail 使用方式的技術詳細資訊 AWS KMS，請參閱 [AWS CloudTrail 如何使用 AWS KMS](how-kms-works-with-cloudtrail.md)。

**Topics**
+ [

## 搭配 CloudTrail 使用的必要的 KMS 金鑰政策區段
](#create-kms-key-policy-for-cloudtrail-policy-sections)
+ [

## 授予追蹤的加密許可
](#create-kms-key-policy-for-cloudtrail-encrypt)
+ [

## 授予事件資料存放區的加密許可
](#create-kms-key-policy-for-cloudtrail-encrypt-eds)
+ [

## 授予追蹤的解密許可
](#create-kms-key-policy-for-cloudtrail-decrypt)
+ [

## 授予事件資料存放區的解密許可
](#create-kms-key-policy-for-cloudtrail-decrypt-eds)
+ [

## 啟用 CloudTrail 以描述 KMS 金鑰屬性
](#create-kms-key-policy-for-cloudtrail-describe)
+ [

# 在 CloudTrail 主控台中建立的預設金鑰政策
](default-kms-key-policy.md)

## 搭配 CloudTrail 使用的必要的 KMS 金鑰政策區段


如果您使用 AWS 管理主控台或 建立 KMS 金鑰 AWS CLI，則必須至少將下列陳述式新增至您的 KMS 金鑰政策，才能搭配 CloudTrail 使用。

**Topics**
+ [

### 適用於追蹤的必要 KMS 金鑰政策
](#required-kms-key-policy-trails)
+ [

### 適用於事件資料存放區的必要 KMS 金鑰政策
](#required-kms-key-policy-eventdatastores)

### 適用於追蹤的必要 KMS 金鑰政策


1. 授予加密 CloudTrail 日誌和摘要檔案的許可。如需詳細資訊，請參閱[授予追蹤的加密許可](#create-kms-key-policy-for-cloudtrail-encrypt)。

1. 授予解密 CloudTrail 日誌和摘要檔案的許可。如需詳細資訊，請參閱[授予追蹤的解密許可](#create-kms-key-policy-for-cloudtrail-decrypt)。如果您使用帶有 [ S3 儲存貯體金鑰](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-key.html)的現有 S3 儲存貯體，則需要 `kms:Decrypt` 許可才能建立或更新啟用 SSE-KMS 加密的追蹤。

1. 啟用 CloudTrail 以描述 KMS 金鑰屬性。如需詳細資訊，請參閱[啟用 CloudTrail 以描述 KMS 金鑰屬性](#create-kms-key-policy-for-cloudtrail-describe)。

安全最佳實務是將 `aws:SourceArn` 條件金鑰新增至 KMS 金鑰政策。IAM 全域條件金鑰 `aws:SourceArn` 可協助確保 CloudTrail 僅針對特定追蹤使用 KMS 金鑰。`aws:SourceArn` 的值一律為使用 KMS 金鑰的追蹤 ARN (或追蹤 ARN 陣列)。請務必將 `aws:SourceArn` 條件金鑰新增至現有追蹤的 KMS 金鑰政策。

亦支援 `aws:SourceAccount` 條件金鑰，但不建議使用。`aws:SourceAccount` 的值是追蹤擁有者的帳戶 ID，或是組織追蹤的管理帳戶 ID。

**重要**  
當您為 KMS 金鑰政策新增區段時，請勿變更政策中任何現有的區段。  
若追蹤已啟用加密，但 KMS 金鑰已停用或 CloudTrail 的 KMS 金鑰政策設定不正確，則 CloudTrail 不會交付日誌。

### 適用於事件資料存放區的必要 KMS 金鑰政策


1. 授予加密 CloudTrail Lake 事件資料存放區的許可。如需詳細資訊，請參閱[授予事件資料存放區的加密許可](#create-kms-key-policy-for-cloudtrail-encrypt-eds)。

1. 授予解密 CloudTrail Lake 事件資料存放區的許可。如需詳細資訊，請參閱[授予事件資料存放區的解密許可](#create-kms-key-policy-for-cloudtrail-decrypt-eds)。

   當您建立事件資料存放區並使用 KMS 金鑰加密，或在使用 KMS 金鑰加密的事件資料存放區上執行查詢時，您應該擁有 KMS 金鑰的寫入存取權。KMS 金鑰政策必須擁有 CloudTrail 的存取權，而且 KMS 金鑰應由在事件資料存放區上執行操作 (例如查詢) 的使用者來管理。

1. 啟用 CloudTrail 以描述 KMS 金鑰屬性。如需詳細資訊，請參閱[啟用 CloudTrail 以描述 KMS 金鑰屬性](#create-kms-key-policy-for-cloudtrail-describe)。

事件資料存放區的 KMS 金鑰政策中不支援 `aws:SourceArn` 和 `aws:SourceAccount` 條件金鑰。

**重要**  
當您為 KMS 金鑰政策新增區段時，請勿變更政策中任何現有的區段。  
若事件資料存放區已啟用加密，但 KMS 金鑰已停用或刪除，或者 CloudTrail 的 KMS 金鑰政策設定不正確，則 CloudTrail 不會將事件傳送到事件資料存放區。

## 授予追蹤的加密許可


**Example 允許 CloudTrail 代表特定帳戶加密日誌檔案和摘要檔案**  
CloudTrail 需要明確許可，才能使用 KMS 金鑰來代表特定帳戶加密日誌檔案和摘要檔案。若要指定帳戶，請將下列必要陳述式新增至您的 KMS 金鑰政策，並將 *account-id*、*region* 和 *trailName* 替換為適當的組態值。您可以將其他帳戶 IDs 新增至 `EncryptionContext`區段，讓這些帳戶能夠使用 CloudTrail 使用您的 KMS 金鑰來加密日誌檔案和摘要檔案。  
安全最佳實務是將 `aws:SourceArn` 條件金鑰新增至追蹤的 KMS 金鑰政策。IAM 全域條件金鑰 `aws:SourceArn` 可協助確保 CloudTrail 僅針對特定追蹤使用 KMS 金鑰。

```
{
   "Sid": "AllowCloudTrailEncryptLogs",
   "Effect": "Allow",
   "Principal": {
       "Service": "cloudtrail.amazonaws.com"
    },
    "Action": "kms:GenerateDataKey*",
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "aws:SourceArn": "arn:aws:cloudtrail:region:account-id:trail/trail-name"
         },
         "StringLike": {
             "kms:EncryptionContext:aws:cloudtrail:arn": "arn:aws:cloudtrail:*:account-id:trail/*"
         }
    }
}
```

**Example**  
下列範例政策陳述式說明另一個帳戶如何使用您的 KMS 金鑰來加密 CloudTrail 日誌檔案和摘要檔案。

**案例**
+ 您的 KMS 金鑰在帳戶 *111111111111* 中。
+ 您和帳戶 *222222222222* 都要加密日誌。

在該政策中，您要將使用您金鑰加密的一或多個帳戶新增至 CloudTrail **EncryptionContext**。這會將 CloudTrail 限制為您指定的帳戶使用金鑰來加密日誌檔案和摘要檔案。當您授予帳戶 *222222222222* 的根許可來加密日誌檔案和摘要檔案時，它會將許可委派給帳戶管理員，以加密該帳戶中其他使用者的必要許可。帳戶管理員透過變更與這些 IAM 使用者相關聯的政策來執行此操作。

安全最佳實務是將 `aws:SourceArn` 條件金鑰新增至 KMS 金鑰政策。IAM 全域條件索引鍵 `aws:SourceArn` 可協助確保 CloudTrail 僅針對特定追蹤使用 KMS 金鑰。事件資料存放區的 KMS 金鑰政策中不支援此條件。

KMS 金鑰政策聲明：

```
{
  "Sid": "EnableCloudTrailEncryptPermissions",
  "Effect": "Allow",
  "Principal": {
    "Service": "cloudtrail.amazonaws.com"
  },
  "Action": "kms:GenerateDataKey*",
  "Resource": "*",
  "Condition": {
    "StringLike": {
      "kms:EncryptionContext:aws:cloudtrail:arn": [
        "arn:aws:cloudtrail:*:111111111111:trail/*",
        "arn:aws:cloudtrail:*:222222222222:trail/*"
      ]
    },
    "StringEquals": {
        "aws:SourceArn": "arn:aws:cloudtrail:region:account-id:trail/trail-name"
    }
  }
}
```

如需有關編輯 KMS 金鑰政策以搭配 CloudTrail 使用的詳細資訊，請參閱《 AWS Key Management Service 開發人員指南》中的[編輯金鑰政策](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-editing)。

## 授予事件資料存放區的加密許可


用於加密 CloudTrail Lake 事件資料存放區的 KMS 金鑰政策無法使用 條件金鑰`aws:SourceArn`或 `aws:SourceAccount`。以下是事件資料存放區的 KMS 金鑰政策範例。

```
{
    "Sid": "AllowCloudTrailEncryptEds",
    "Effect": "Allow",
    "Principal": {
        "Service": "cloudtrail.amazonaws.com"
     },
     "Action": [
        "kms:GenerateDataKey",
        "kms:Decrypt"
      ],
      "Resource": "*"
}
```

## 授予追蹤的解密許可


在您將自己的 KMS 金鑰新增至 CloudTrail 組態之前，請務必將解密許可授予所有需要該許可的使用者。具加密許可但不具解密許可的使用者無法讀取加密的日誌。如果您使用帶有 [ S3 儲存貯體金鑰](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-key.html)的現有 S3 儲存貯體，則需要 `kms:Decrypt` 許可才能建立或更新啟用 SSE-KMS 加密的追蹤。

**允許 CloudTrail 日誌解密許可**  
您的金鑰使用者必須擁有明確的許可，才能讀取 CloudTrail 加密的日誌檔案。若要允許使用者讀取加密的日誌，請將下列必要陳述式新增至您的 KMS 金鑰政策，並修改 `Principal` 區段，為您希望可以使用您 KMS 金鑰解密的每個主體 (角色或使用者) 新增程式碼。

```
{
  "Sid": "EnableCloudTrailLogDecryptPermissions",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::account-id:user/username"
  },
  "Action": "kms:Decrypt",
  "Resource": "*",
  "Condition": {
    "Null": {
      "kms:EncryptionContext:aws:cloudtrail:arn": "false"
    }
  }
}
```

以下是允許 CloudTrail 服務主體解密追蹤日誌所需的範例政策。

```
{
      "Sid": "AllowCloudTrailDecryptTrail",
      "Effect": "Allow",
      "Principal": {
          "Service": "cloudtrail.amazonaws.com"
        },
      "Action": "kms:Decrypt",
      "Resource": "*"
}
```

### 允許您帳戶中的使用者使用您的 KMS 金鑰解密追蹤日誌


**範例**  
此政策陳述式示範如何允許您帳戶中的使用者或角色，使用您的金鑰讀取您帳戶之 S3 儲存貯體中的加密日誌。

**Example 案例**  
+ 您的 KMS 金鑰、S3 儲存貯體和 IAM 使用者 Bob 都在帳戶 `111111111111` 中。
+ 您要授予 IAM 使用者 Bob 解密 S3 儲存貯體中之 CloudTrail 日誌的許可。

在金鑰政策中，您要為 IAM 使用者 Bob 允許 CloudTrail 日誌解密許可。

KMS 金鑰政策聲明：

```
{
  "Sid": "EnableCloudTrailLogDecryptPermissions",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111111111111:user/Bob"
  },
  "Action": "kms:Decrypt",
  "Resource": "arn:aws:kms:region:account-id:key/key-id",
  "Condition": {
    "Null": {
      "kms:EncryptionContext:aws:cloudtrail:arn": "false"
    }
  }
}
```

**Topics**

### 允許其他帳戶中的使用者使用您的 KMS 金鑰解密追蹤日誌


您可以允許其他帳戶中的使用者使用您的 KMS 金鑰來解密追蹤日誌。您金鑰政策所需的變更，取決於 S3 儲存貯體在您的帳戶中或另一個帳戶中。

#### 允許其他帳戶中的儲存貯體使用者解密日誌


**範例**  
此政策陳述式示範如何允許其他帳戶中的 IAM 使用者或角色，使用您的金鑰從另一個帳戶中的 S3 儲存貯體讀取加密日誌。

**案例**
+ 您的 KMS 金鑰在帳戶 `111111111111` 中。
+ IAM 使用者 Alice 和 S3 儲存貯體都在帳戶 `222222222222` 中。

在此案例中，您要授予在帳戶 `222222222222` 下解密日誌的 CloudTrail 許可，再授予 Alice 的 IAM 使用者政策使用您金鑰 `KeyA` (在帳戶 `111111111111` 中) 的許可。

KMS 金鑰政策聲明：

```
{
  "Sid": "EnableEncryptedCloudTrailLogReadAccess",
  "Effect": "Allow",
  "Principal": {
    "AWS": [
      "arn:aws:iam::222222222222:root"
    ]
  },
  "Action": "kms:Decrypt",
  "Resource": "arn:aws:kms:region:111111111111:key/key-id",
  "Condition": {
    "Null": {
      "kms:EncryptionContext:aws:cloudtrail:arn": "false"
    }
  }
}
```

Alice 的 IAM 使用者政策陳述式：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "kms:Decrypt",
      "Resource": "arn:aws:kms:us-west-2:111111111111:key/KeyA"
    }
  ]
}
```

------

#### 允許其他帳戶中的使用者從您的儲存貯體解密追蹤日誌


**Example**  
此政策示範另一個帳戶如何使用您的金鑰從您的 S3 儲存貯體讀取加密日誌。

**Example 案例**  
+ 您的 KMS 金鑰和 S3 儲存貯體都在帳戶 `111111111111` 中。
+ 要從您儲存貯體讀取日誌的使用者位於帳戶 `222222222222` 中。

若要進行此案例，您要為您帳戶中的 IAM 角色 **CloudTrailReadRole** 允許解密許可，再授予其他帳戶擔任該角色的許可。

KMS 金鑰政策聲明：

```
{
  "Sid": "EnableEncryptedCloudTrailLogReadAccess",
  "Effect": "Allow",
  "Principal": {
    "AWS": [
      "arn:aws:iam::111111111111:role/CloudTrailReadRole"
    ]
  },
  "Action": "kms:Decrypt",
  "Resource": "arn:aws:kms:region:account-id:key/key-id",
  "Condition": {
    "Null": {
      "kms:EncryptionContext:aws:cloudtrail:arn": "false"
    }
  }
}
```

**CloudTrailReadRole** 信任實體政策陳述式：

------
#### [ JSON ]

****  

```
{
 "Version":"2012-10-17",		 	 	 
 "Statement": [
   {
     "Sid": "Allow CloudTrail access",
     "Effect": "Allow",
     "Principal": {
       "AWS": "arn:aws:iam::222222222222:root"
     },
     "Action": "sts:AssumeRole"
    }
  ]
 }
```

------

如需有關編輯 KMS 金鑰政策以搭配 CloudTrail 使用的詳細資訊，請參閱《*AWS Key Management Service 開發人員指南》*中的[編輯金鑰政策](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-editing)。

## 授予事件資料存放區的解密許可


與 CloudTrail Lake 事件資料存放區搭配使用的 KMS 金鑰的解密政策類似如下內容。值指定為 `Principal` 的使用者或角色 ARN 需要解密許可，才能建立或更新事件資料存放區、執行查詢或取得查詢結果。

```
{
      "Sid": "EnableUserKeyPermissionsEds"
      "Effect": "Allow",
      "Principal": {
          "AWS": "arn:aws:iam::account-id:user/username"
      },
      "Action": [
          "kms:Decrypt",
          "kms:GenerateDataKey"
      ],
      "Resource": "*"
  }
```

以下是允許 CloudTrail 服務主體解密事件資料存放區所需的範例政策。

```
{
      "Sid": "AllowCloudTrailDecryptEds",
      "Effect": "Allow",
      "Principal": {
          "Service": "cloudtrail.amazonaws.com"
        },
      "Action": "kms:Decrypt",
      "Resource": "*"
}
```

## 啟用 CloudTrail 以描述 KMS 金鑰屬性


CloudTrail 需要描述 KMS 金鑰屬性的能力。若要啟用此功能，請將下列必要陳述式依原內容新增至您的 KMS 金鑰政策。此陳述式不會授予 CloudTrail 您指定之其他許可以外的任何許可。

安全最佳實務是將 `aws:SourceArn` 條件金鑰新增至 KMS 金鑰政策。IAM 全域條件金鑰 `aws:SourceArn` 可協助確保 CloudTrail 僅針對特定追蹤使用 KMS 金鑰。

```
{
  "Sid": "AllowCloudTrailAccess",
  "Effect": "Allow",
  "Principal": {
    "Service": "cloudtrail.amazonaws.com"
  },
  "Action": "kms:DescribeKey",
  "Resource": "arn:aws:kms:region:account-id:key/key-id",
  "Condition": {
    "StringEquals": {
        "aws:SourceArn": "arn:aws:cloudtrail:region:account-id:trail/trail-name"
    }
  }
}
```

如需使用 KMS 金鑰政策的更多資訊，請參閱《AWS Key Management Service 開發人員指南》**中的[編輯金鑰政策](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-editing)。

# 在 CloudTrail 主控台中建立的預設金鑰政策


如果您在 CloudTrail 主控台 AWS KMS key 中建立 ，系統會自動為您建立下列政策。此政策允許這些許可：
+ KMS 金鑰的 Allow AWS 帳戶 (root) 許可。
+ 允許 CloudTrail 在 KMS 金鑰下加密日誌檔案和摘要檔案，並描述 KMS 金鑰。
+ 允許指定帳戶中的所有使用者解密日誌檔案和摘要檔案。
+ 允許指定帳戶中的所有使用者建立 KMS 金鑰的 KMS 別名。
+ 已建立追蹤的帳戶能夠用於帳戶 ID 跨帳戶日誌解密。

**Topics**
+ [

## 適用於追蹤的預設 KMS 金鑰政策
](#default-kms-key-policy-trail)
+ [

## CloudTrail Lake 事件資料存放區的預設 KMS 金鑰政策
](#default-kms-key-policy-eds)

## 適用於追蹤的預設 KMS 金鑰政策


以下是針對您搭配線索使用的 AWS KMS key 所建立的預設政策。

**注意**  
此政策包含允許跨帳戶使用 KMS 金鑰解密日誌檔案和摘要檔案的陳述式。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "Key policy created by CloudTrail",
    "Statement": [
        {
            "Sid": "Enable IAM user permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111111111111:root",
                    "arn:aws:iam::111111111111:user/username"
                ]
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "Allow CloudTrail to encrypt logs",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudtrail.amazonaws.com"
             },
            "Action": "kms:GenerateDataKey*",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceArn": "arn:aws:cloudtrail:us-east-1:111111111111:trail/trail-name"
                },
                "StringLike": {
                    "kms:EncryptionContext:aws:cloudtrail:arn": "arn:aws:cloudtrail:*:111111111111:trail/*"
                }
            }
        },
        {
            "Sid": "Allow CloudTrail to describe key",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudtrail.amazonaws.com"
             },
            "Action": "kms:DescribeKey",
            "Resource": "*"
        },
        {
            "Sid": "Allow principals in the account to decrypt log files",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
             },
            "Action": [
                "kms:Decrypt",
                "kms:ReEncryptFrom"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:CallerAccount": "111111111111"
                },
                "StringLike": {
                    "kms:EncryptionContext:aws:cloudtrail:arn": "arn:aws:cloudtrail:*:111111111111:trail/*"
                }
            }
        },
        {
            "Sid": "Enable cross account log decryption",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": [
                "kms:Decrypt",
                "kms:ReEncryptFrom"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:CallerAccount": "111111111111"
                },
                "StringLike": {
                    "kms:EncryptionContext:aws:cloudtrail:arn": "arn:aws:cloudtrail:*:111111111111:trail/*"
                }
            }
        }
    ]
}
```

------

## CloudTrail Lake 事件資料存放區的預設 KMS 金鑰政策


以下是您用於 CloudTrail Lake 中 AWS KMS key 事件資料存放區之 的預設政策。

------
#### [ JSON ]

****  

```
{
      "Version":"2012-10-17",		 	 	 
      "Id": "Key policy created by CloudTrail",
      "Statement": [
        {
          "Sid": "The key created by CloudTrail to encrypt event data stores. Created ${new Date().toUTCString()}",
          "Effect": "Allow",
          "Principal": {
            "Service": "cloudtrail.amazonaws.com"
          },
          "Action": [
            "kms:GenerateDataKey",
            "kms:Decrypt"
          ],
          "Resource": "*"
        },
        {
          "Sid": "Enable IAM user permissions",
          "Effect": "Allow",
          "Principal": {
                "AWS": "arn:aws:iam::111111111111:root"
          },
          "Action": "kms:*",
          "Resource": "*"
        },
        {
          "Sid": "Enable user to have permissions",
          "Effect": "Allow",
          "Principal": {
               "AWS" : "arn:aws:sts::111111111111:assumed-role/example-role-name"
        },
          "Action": [
            "kms:Decrypt",
            "kms:GenerateDataKey"
           ],
          "Resource": "*"
        }
      ]
    }
```

------