

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

# 分析加密的 Amazon S3 物件
<a name="discovery-supported-encryption-types"></a>

當您為 啟用 Amazon Macie 時 AWS 帳戶，Macie 會建立[服務連結角色](service-linked-roles.md)，授予 Macie AWS 服務 代表您呼叫 Amazon Simple Storage Service (Amazon S3) 和其他 所需的許可。服務連結角色可簡化 的設定程序， AWS 服務 因為您不必手動新增服務許可，即可代表您完成動作。若要了解這種類型的角色，請參閱*AWS Identity and Access Management 《 使用者指南*》中的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。

Macie 服務連結角色的許可政策 (`AWSServiceRoleForAmazonMacie`) 可讓 Macie 執行動作，包括擷取 S3 儲存貯體和物件的相關資訊，以及擷取和分析 S3 儲存貯體中的物件。如果您的帳戶是組織的 Macie 管理員帳戶，政策也允許 Macie 代表您為組織中的成員帳戶執行這些動作。

如果 S3 物件已加密，Macie 服務連結角色的許可政策通常會授予 Macie 解密物件所需的許可。不過，這取決於使用的加密類型。它也可以取決於是否允許 Macie 使用適當的加密金鑰。

**Topics**
+ [S3 物件的加密選項](#discovery-supported-encryption-types-matrix)
+ [允許 Macie 使用客戶受管 AWS KMS key](#discovery-supported-encryption-cmk-configuration)

## Amazon S3 物件的加密選項
<a name="discovery-supported-encryption-types-matrix"></a>

Amazon S3 支援 S3 物件的多個加密選項。對於大多數這些選項，Amazon Macie 可以使用您帳戶的 Macie 服務連結角色來解密物件。不過，這取決於用來加密物件的加密類型。

**使用 Amazon S3 受管金鑰 (SSE-S3) 的伺服器端加密**  
如果使用伺服器端加密搭配 Amazon S3 受管金鑰 (SSE-S3) 來加密物件，Macie 可以解密物件。  
若要了解此類加密，請參閱《[Amazon Simple Storage Service 使用者指南》中的搭配 Amazon S3 受管金鑰使用伺服器端加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html)。 **

**伺服器端加密搭配 AWS KMS keys (DSSE-KMS 和 SSE-KMS)**  
如果使用雙層伺服器端加密或伺服器端加密搭配 AWS 受管 AWS KMS key (DSSE-KMS 或 SSE-KMS) 來加密物件，Macie 可以解密物件。  
如果使用雙層伺服器端加密或伺服器端加密搭配客戶受管 AWS KMS key (DSSE-KMS 或 SSE-KMS) 來加密物件，則只有當您[允許 Macie 使用金鑰](#discovery-supported-encryption-cmk-configuration)時，Macie 才能解密物件。對於使用 KMS 金鑰加密的物件而言，這是完全在外部金鑰存放區中的 AWS KMS 和 KMS 金鑰中管理的。如果 Macie 不允許使用適用的 KMS 金鑰，則 Macie 只能存放和報告物件的中繼資料。  
若要了解這些類型的加密，請參閱《*Amazon Simple Storage Service 使用者指南*》中的[使用雙層伺服器端加密搭配 AWS KMS keys](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingDSSEncryption.html) 和[使用伺服器端加密搭配 AWS KMS keys](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html) 。  
您可以自動產生 Macie 需要存取的所有客戶受管清單 AWS KMS keys ，以分析您帳戶的 S3 儲存貯體中的物件。若要這樣做，請執行 AWS KMS Permission Analyzer 指令碼，該指令碼可從 GitHub 上的 [Amazon Macie 指令碼](https://github.com/aws-samples/amazon-macie-scripts)儲存庫取得。指令碼也可以產生額外的 AWS Command Line Interface (AWS CLI) 命令指令碼。您可以選擇性地執行這些命令，以更新您指定的 KMS 金鑰的必要組態設定和政策。

**使用客戶提供的金鑰進行伺服器端加密 (SSE-C)**  
如果使用伺服器端加密搭配客戶提供的金鑰 (SSE-C) 來加密物件，則 Macie 無法解密物件。Macie 只能存放和報告物件的中繼資料。  
若要了解這種類型的加密，請參閱《*Amazon Simple Storage Service 使用者指南*》中的[使用伺服器端加密搭配客戶提供的金鑰](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerSideEncryptionCustomerKeys.html)。

**用戶端加密**  
如果使用用戶端加密來加密物件，Macie 就無法解密物件。Macie 只能存放和報告物件的中繼資料。例如，Macie 可以報告物件的大小，以及與物件相關聯的標籤。  
若要了解 Amazon S3 內容中的此類加密，請參閱《*Amazon Simple Storage Service 使用者指南*》中的[使用用戶端加密來保護資料](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html)。

您可以在 Macie 中[篩選儲存貯體庫存](monitoring-s3-inventory-filter.md)，以判斷哪些 S3 儲存貯體存放使用特定加密類型的物件。您也可以判斷哪些儲存貯體預設在存放新物件時使用特定類型的伺服器端加密。下表提供篩選條件的範例，您可以套用至儲存貯體庫存來尋找此資訊。


| 若要顯示儲存貯體... | 套用此篩選條件... | 
| --- | --- | 
| 存放使用 SSE-C 加密的物件 | 客戶提供加密的物件計數，寄件人 = 1 | 
| 存放使用 DSSE-KMS 或 SSE-KMS 加密的物件 | 依加密管理的物件計數和 From = 1 AWS KMS   | 
| 存放使用 SSE-S3 加密的物件 | 加密的物件計數是 Amazon S3 受管且 From = 1 | 
| 存放使用用戶端加密 （或未加密） 的物件 | 加密的物件計數是無加密且寄件人 = 1 | 
| 根據預設，使用 DSSE-KMS 加密來加密新物件 | 預設加密 = aws：kms:dsse | 
| 根據預設，使用 SSE-KMS 加密來加密新物件 | 預設加密 = aws：kms | 
| 根據預設，使用 SSE-S3 加密來加密新物件 | 預設加密 = AES256 | 

如果儲存貯體設定為預設使用 DSSE-KMS 或 SSE-KMS 加密來加密新物件，您也可以判斷 AWS KMS key 使用哪個物件。若要這樣做，請在 **S3 儲存貯體頁面上選擇儲存貯體**。在儲存貯體詳細資訊面板的**伺服器端加密**下，請參閱 **AWS KMS key** 欄位。此欄位會顯示金鑰的 Amazon Resource Name (ARN) 或唯一識別符 （金鑰 ID)。

## 允許 Macie 使用客戶受管 AWS KMS key
<a name="discovery-supported-encryption-cmk-configuration"></a>

如果使用雙層伺服器端加密或伺服器端加密搭配客戶受管 AWS KMS key (DSSE-KMS 或 SSE-KMS) 來加密 Amazon S3 物件，Amazon Macie 只能在允許使用金鑰時解密物件。如何提供此存取權取決於擁有金鑰的帳戶是否也擁有存放物件的 S3 儲存貯體：
+ 如果同一個帳戶擁有 AWS KMS key 和 儲存貯體，則帳戶的使用者必須更新金鑰的政策。
+ 如果一個帳戶擁有 ， AWS KMS key 而另一個帳戶擁有 儲存貯體，則擁有金鑰的帳戶使用者必須允許跨帳戶存取金鑰。

本主題說明如何執行這些任務，並提供這兩個案例的範例。若要進一步了解允許存取客戶受管 AWS KMS keys，請參閱《 *AWS Key Management Service 開發人員指南*》中的 [KMS 金鑰存取和許可](https://docs.aws.amazon.com/kms/latest/developerguide/control-access.html)。

### 允許相同帳戶存取客戶受管金鑰
<a name="discovery-supported-encryption-cmk-configuration-1account"></a>

如果同一個帳戶同時擁有 AWS KMS key 和 S3 儲存貯體，則帳戶的使用者必須將陳述式新增至金鑰的政策。其他陳述式必須允許帳戶的 Macie 服務連結角色使用 金鑰解密資料。如需更新金鑰政策的詳細資訊，請參閱《 *AWS Key Management Service 開發人員指南*》中的[變更金鑰政策](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html)。

在 陳述式中：
+ `Principal` 元素必須為擁有 AWS KMS key 和 S3 儲存貯體的帳戶指定 Macie 服務連結角色的 Amazon Resource Name (ARN)。

  如果帳戶在選擇加入中 AWS 區域，ARN 也必須包含適當的區域代碼。例如，如果帳戶位於中東 （巴林） 區域，其具有區域碼 *me-south-1*，則`Principal`元素必須指定 `arn:aws:iam::123456789012:role/aws-service-role/macie.me-south-1.amazonaws.com/AWSServiceRoleForAmazonMacie`，其中 *123456789012* 是帳戶的帳戶 ID。如需目前可使用 Macie 之區域的區域代碼清單，請參閱《》中的 [Amazon Macie 端點和配額](https://docs.aws.amazon.com/general/latest/gr/macie.html)*AWS 一般參考*。
+ `Action` 陣列必須指定 `kms:Decrypt`動作。這是 Macie 必須執行的唯一 AWS KMS 動作，以解密使用 金鑰加密的 S3 物件。

以下是要新增至 政策的 陳述式範例 AWS KMS key。

```
{
    "Sid": "Allow the Macie service-linked role to use the key",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/aws-service-role/macie.amazonaws.com/AWSServiceRoleForAmazonMacie"
    },
    "Action": [
        "kms:Decrypt"
    ],
    "Resource": "*"
}
```

在上述範例中：
+ `Principal` 元素中的 `AWS` 欄位指定帳戶的 Macie 服務連結角色 (`AWSServiceRoleForAmazonMacie`) 的 ARN。它允許 Macie 服務連結角色執行政策陳述式指定的動作。*123456789012* 是帳戶 ID 範例。將此值取代為擁有 KMS 金鑰和 S3 儲存貯體之帳戶的帳戶 ID。
+ `Action` 陣列指定允許 Macie 服務連結角色使用 KMS 金鑰執行的動作 - 解密使用金鑰加密的加密文字。

您在其中將此陳述式新增至金鑰政策，取決於政策目前包含的結構和元素。當您新增 陳述式時，請確定語法有效。金鑰政策使用 JSON 格式。這表示您還必須在陳述式之前或之後新增逗號，具體取決於您將陳述式新增至政策的位置。

### 允許跨帳戶存取客戶受管金鑰
<a name="discovery-supported-encryption-cmk-configuration-xaccount"></a>

如果一個帳戶擁有 AWS KMS key (*金鑰擁有者*)，而另一個帳戶擁有 S3 儲存貯體 (*儲存貯體擁有者*)，則金鑰擁有者必須為儲存貯體擁有者提供 KMS 金鑰的跨帳戶存取權。若要這樣做，金鑰擁有者會先確保金鑰的政策允許儲存貯體擁有者同時使用金鑰，並建立金鑰的授予。儲存貯體擁有者接著會建立金鑰的授予。*授予*是一種政策工具，允許 AWS 主體在符合授予指定的條件時，在密碼編譯操作中使用 KMS 金鑰。在此情況下，授予會將相關許可委派給儲存貯體擁有者帳戶的 Macie 服務連結角色。

如需更新金鑰政策的詳細資訊，請參閱《 *AWS Key Management Service 開發人員指南*》中的[變更金鑰政策](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html)。若要了解授予，請參閱《 *AWS Key Management Service 開發人員指南*[》中的授予 AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)。

**步驟 1：更新金鑰政策**  
在金鑰政策中，金鑰擁有者應確保政策包含兩個陳述式：
+ 第一個陳述式允許儲存貯體擁有者使用 金鑰來解密資料。
+ 第二個陳述式允許儲存貯體擁有者為其 （儲存貯體擁有者） 帳戶建立 Macie 服務連結角色的授予。

在第一個陳述式中， `Principal`元素必須指定儲存貯體擁有者帳戶的 ARN。`Action` 陣列必須指定 `kms:Decrypt`動作。這是 Macie 必須執行的唯一 AWS KMS 動作，以解密使用 金鑰加密的物件。以下是 政策中此陳述式的範例 AWS KMS key。

```
{
    "Sid": "Allow account 111122223333 to use the key",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::111122223333:root"
    },
    "Action": [
        "kms:Decrypt"
    ],
    "Resource": "*"
}
```

在上述範例中：
+ `Principal` 元素中的 `AWS` 欄位指定儲存貯體擁有者帳戶的 ARN (*111122223333*)。它允許儲存貯體擁有者執行政策陳述式指定的動作。*111122223333* 是帳戶 ID 範例。將此值取代為儲存貯體擁有者帳戶的帳戶 ID。
+ `Action` 陣列指定允許儲存貯體擁有者使用 KMS 金鑰執行的動作：解密使用金鑰加密的加密文字。

金鑰政策中的第二個陳述式允許儲存貯體擁有者為其帳戶建立 Macie 服務連結角色的授予。在此陳述式中， `Principal`元素必須指定儲存貯體擁有者帳戶的 ARN。`Action` 陣列必須指定 `kms:CreateGrant`動作。`Condition` 元素可以篩選對 陳述式中指定`kms:CreateGrant`動作的存取。以下是 政策中此陳述式的範例 AWS KMS key。

```
{
    "Sid": "Allow account 111122223333 to create a grant",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::111122223333:root"
    },
    "Action": [
        "kms:CreateGrant"
    ],
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "kms:GranteePrincipal": "arn:aws:iam::111122223333:role/aws-service-role/macie.amazonaws.com/AWSServiceRoleForAmazonMacie"
        }
    }
}
```

在上述範例中：
+ `Principal` 元素中的 `AWS` 欄位指定儲存貯體擁有者帳戶的 ARN (*111122223333*)。它允許儲存貯體擁有者執行政策陳述式指定的動作。*111122223333* 是帳戶 ID 範例。將此值取代為儲存貯體擁有者帳戶的帳戶 ID。
+ `Action` 陣列指定允許儲存貯體擁有者在 KMS 金鑰上執行的動作 - 建立金鑰的授予。
+ `Condition` 元素使用 `StringEquals`[條件運算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)和 `kms:GranteePrincipal`[條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html#awskeymanagementservice-policy-keys)來篩選對政策陳述式所指定動作的存取。在此情況下，儲存貯體擁有者只能為指定的 建立授予`GranteePrincipal`，這是其帳戶的 Macie 服務連結角色的 ARN。在該 ARN 中，*111122223333* 是帳戶 ID 範例。將此值取代為儲存貯體擁有者帳戶的帳戶 ID。

  如果儲存貯體擁有者的帳戶選擇加入 AWS 區域，也請在 Macie 服務連結角色的 ARN 中包含適當的區域代碼。例如，如果帳戶位於中東 （巴林） 區域，其具有區域碼 *me-south-1*，請在 ARN `macie.me-south-1.amazonaws.com`中將 取代`macie.amazonaws.com`為 。如需目前可使用 Macie 之區域的區域代碼清單，請參閱《》中的 [Amazon Macie 端點和配額](https://docs.aws.amazon.com/general/latest/gr/macie.html)*AWS 一般參考*。

金鑰擁有者將這些陳述式新增至金鑰政策的位置，取決於政策目前包含的結構和元素。當金鑰擁有者新增陳述式時，他們應該確保語法有效。金鑰政策使用 JSON 格式。這表示金鑰擁有者也必須在每個陳述式之前或之後新增逗號，視其將陳述式新增至政策的位置而定。

**步驟 2：建立授予**  
金鑰擁有者視需要更新金鑰政策後，儲存貯體擁有者必須為金鑰建立授予。授予會將相關許可委派給其 （儲存貯體擁有者） 帳戶的 Macie 服務連結角色。在儲存貯體擁有者建立授予之前，他們應該確認他們有權為其帳戶執行 `kms:CreateGrant`動作。此動作可讓他們將授予新增至現有的客戶受管 AWS KMS key。

若要建立授予，儲存貯體擁有者可以使用 AWS Key Management Service API 的 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 操作。當儲存貯體擁有者建立授予時，他們應該為必要參數指定下列值：
+ `KeyId` – KMS 金鑰的 ARN。若要跨帳戶存取 KMS 金鑰，此值必須是 ARN。它不能是金鑰 ID。
+ `GranteePrincipal` – Macie 服務連結角色 (`AWSServiceRoleForAmazonMacie`) 帳戶的 ARN。此值應為 `arn:aws:iam::111122223333:role/aws-service-role/macie.amazonaws.com/AWSServiceRoleForAmazonMacie`，其中 *111122223333* 是儲存貯體擁有者帳戶的帳戶 ID。

  如果其帳戶位於選擇加入區域，ARN 必須包含適當的區域代碼。例如，如果他們的帳戶位於中東 （巴林） 區域，而該區域代碼為 *me-south-1*，則 ARN 應為 `arn:aws:iam::111122223333:role/aws-service-role/macie.me-south-1.amazonaws.com/AWSServiceRoleForAmazonMacie`，其中 *111122223333* 是儲存貯體擁有者帳戶的帳戶 ID。
+ `Operations` – AWS KMS 解密動作 (`Decrypt`)。這是 Macie 必須執行才能解密使用 KMS 金鑰加密之物件的唯一 AWS KMS 動作。

若要使用 AWS Command Line Interface (AWS CLI) 建立客戶受管 KMS 金鑰的授予，請執行 [create-grant](https://docs.aws.amazon.com/cli/latest/reference/kms/create-grant.html) 命令。下列範例會顯示作法。此範例已針對 Microsoft Windows 進行格式化，並使用八進制 (^) 換行字元來改善可讀性。

```
C:\> aws kms create-grant ^
--key-id arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab ^
--grantee-principal arn:aws:iam::111122223333:role/aws-service-role/macie.amazonaws.com/AWSServiceRoleForAmazonMacie ^
--operations "Decrypt"
```

其中：
+ `key-id` 指定要套用授予的 KMS 金鑰 ARN。
+ `grantee-principal` 指定允許執行授予所指定動作之帳戶的 Macie 服務連結角色的 ARN。此值應符合金鑰政策中第二個陳述式`kms:GranteePrincipal`的條件所指定的 ARN。
+ `operations` 指定授予允許指定委託人執行的動作 - 解密使用 KMS 金鑰加密的加密文字。

如果此命令成功執行，您會收到類似如下的輸出。

```
{
    "GrantToken": "<grant token>",
    "GrantId": "1a2b3c4d2f5e69f440bae30eaec9570bb1fb7358824f9ddfa1aa5a0dab1a59b2"
}
```

其中 `GrantToken` 是唯一、非秘密、可變長度、以 base64 編碼的字串，代表已建立的授予，並且`GrantId`是授予的唯一識別符。