

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

# 搭配加密磁碟區使用的必要 AWS KMS 金鑰政策
<a name="key-policy-requirements-EBS-encryption"></a>

Amazon EC2 Auto Scaling [使用服務連結角色](autoscaling-service-linked-role.md)將許可委派給其他 AWS 服務。Amazon EC2 Auto Scaling 服務連結角色已預先定義，並包含 Amazon EC2 Auto Scaling AWS 服務 代表您呼叫其他 所需的許可。預先定義的許可也包含對 的存取 AWS 受管金鑰。不過，其不包括對客戶受管金鑰的存取權，該存取權允許您保有對這些金鑰的完整控制權。

本主題介紹在為 Amazon EBS 加密指定客戶受管金鑰時，如何設定啟動 Auto Scaling 執行個體所需的金鑰政策。

**注意**  
Amazon EC2 Auto Scaling 不需要額外的授權，就能使用預設的 AWS 受管金鑰 來保護帳戶中的加密磁碟區。

**Contents**
+ [概要](#overview)
+ [設定金鑰政策](#configuring-key-policies)
+ [範例 1：允許存取客戶受管金鑰的金鑰政策區段](#policy-example-cmk-access)
+ [範例 2：允許跨帳戶存取客戶受管金鑰的金鑰政策區段](#policy-example-cmk-cross-account-access)
+ [在 AWS KMS 主控台中編輯金鑰政策](#eding-key-policies-console)

## 概要
<a name="overview"></a>

當 Amazon EC2 Auto Scaling 啟動執行個體時， AWS KMS keys 以下可用於 Amazon EBS 加密： Amazon EC2 
+ [AWS 受管金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) – Amazon EBS 在您的帳戶中建立、擁有和管理的加密金鑰。這是新帳戶的預設加密金鑰。除非您指定客戶受管金鑰，否則 AWS 受管金鑰 會用於加密。
+ [客戶受管金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) – 您所建立、擁有和管理的自訂加密金鑰。如需詳細資訊，請參閱《AWS Key Management Service 開發人員指南》**中的[建立金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。

  注意：金鑰必須為對稱金鑰。Amazon EBS 不支援非對稱客戶受管金鑰。

您可以在建立會指定加密磁碟區的加密快照或啟動範本時，設定客戶受管金鑰，或依預設啟用加密。

## 設定金鑰政策
<a name="configuring-key-policies"></a>

您的 KMS 金鑰必須具有金鑰政策，允許 Amazon EC2 Auto Scaling 使用透過客戶受管金鑰加密的 Amazon EBS 磁碟區來啟動執行個體。

請使用此頁面上的範例來設定金鑰政策，為客戶受管金鑰提供 Amazon EC2 Auto Scaling 存取權。您可以在建立金鑰時修改客戶受管金鑰的金鑰政策，或之後再修改。

您必須至少新增兩個政策陳述式到金鑰政策，該政策才能與 Amazon EC2 Auto Scaling 搭配運作。
+ 第一個陳述式允許 `Principal` 元素中指定的 IAM 身分直接使用客戶受管金鑰。它包含對金鑰執行 AWS KMS `Encrypt`、`Decrypt`、`GenerateDataKey*`、 `ReEncrypt*`和 `DescribeKey`操作的許可。
+ 第二個陳述式允許 `Principal`元素中指定的 IAM 身分使用 `CreateGrant`操作來產生授予，將其自身許可的子集委派給與 AWS KMS 或其他主體整合 AWS 服務 的 。這允許其使用金鑰來代表您建立加密資源。

在您為金鑰政策新增政策陳述式時，請勿變更政策中任何現有的陳述式。

對於下列每個範例，必須取代的引數，例如金鑰 ID 或服務連結角色的名稱，會顯示為{{使用者預留位置文字}}。在大多數情況下，您可以將服務連結角色的名稱取代為 Amazon EC2 Auto Scaling 服務連結角色的名稱。

如需詳細資訊，請參閱下列資源：
+ 若要使用 建立金鑰 AWS CLI，請參閱 [create-key](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kms/create-key.html)。
+ 若要使用 更新金鑰政策 AWS CLI，請參閱 [put-key-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kms/put-key-policy.html)。
+ 若要尋找金鑰 ID 和 Amazon Resource Name (ARN)，請參閱《AWS Key Management Service 開發人員指南》中的[尋找金鑰 ID 和 ARN](https://docs.aws.amazon.com/kms/latest/developerguide/find-cmk-id-arn.html)。
+ 如需 Amazon EC2 Auto Scaling 服務連結角色的詳細資訊，請參閱 [Amazon EC2 Auto Scaling 的服務連結角色](autoscaling-service-linked-role.md)。
+ 如需有關 Amazon EBS 加密和 KMS 一般的資訊，請參閱《[Amazon EBS 使用者指南》和《 開發人員指南》中的 Amazon EBS 加密](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html)。 ** [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)

## 範例 1：允許存取客戶受管金鑰的金鑰政策區段
<a name="policy-example-cmk-access"></a>

請將以下兩個政策陳述式新增至客戶受管金鑰的金鑰政策，以將範例 ARN 取代為可存取金鑰的適當服務連結角色的 ARN。在此範例中，該政策區段會授予服務連結角色名為 **AWSServiceRoleForAutoScaling** 的許可，讓他們能夠使用客戶受管金鑰。

```
{
   "Sid": "Allow service-linked role use of the customer managed key",
   "Effect": "Allow",
   "Principal": {
       "AWS": [
           "arn:aws:iam::{{account-id}}:role/aws-service-role/autoscaling.amazonaws.com/{{AWSServiceRoleForAutoScaling}}"
       ]
   },
   "Action": [
       "kms:Encrypt",
       "kms:Decrypt",
       "kms:ReEncrypt*",
       "kms:GenerateDataKey*",
       "kms:DescribeKey"
   ],
   "Resource": "*"
}
```

```
{
   "Sid": "Allow attachment of persistent resources",
   "Effect": "Allow",
   "Principal": {
       "AWS": [
           "arn:aws:iam::{{account-id}}:role/aws-service-role/autoscaling.amazonaws.com/{{AWSServiceRoleForAutoScaling}}"
       ]
   },
   "Action": [
       "kms:CreateGrant"
   ],
   "Resource": "*",
   "Condition": {
       "Bool": {
           "kms:GrantIsForAWSResource": true
       }
    }
}
```

## 範例 2：允許跨帳戶存取客戶受管金鑰的金鑰政策區段
<a name="policy-example-cmk-cross-account-access"></a>

如果您建立的客戶受管金鑰所在帳戶與 Auto Scaling 群組不同，您必須使用搭配金鑰政策的授權，以便允許存取跨帳戶存取權金鑰。

必須依照下列順序完成兩個步驟：

1. 首先，將以下兩個政策陳述式新增至客戶受管金鑰的金鑰政策。將範例 ARN 取代為其他帳戶的 ARN，請務必將 {{111122223333}} 取代為 AWS 帳戶 您要建立 Auto Scaling 群組的 的實際帳戶 ID。這允許您為特定帳戶中的 IAM 使用者或角色授予許可，以使用下文的 CLI 命令為金鑰建立授權。但是，這不會將任何使用者存取權提供給金鑰。

   ```
   {
      "Sid": "Allow external account {{111122223333}} use of the customer managed key",
      "Effect": "Allow",
      "Principal": {
          "AWS": [
              "arn:aws:iam::{{111122223333}}:root"
          ]
      },
      "Action": [
          "kms:Encrypt",
          "kms:Decrypt",
          "kms:ReEncrypt*",
          "kms:GenerateDataKey*",
          "kms:DescribeKey"
      ],
      "Resource": "*"
   }
   ```

   ```
   {
      "Sid": "Allow attachment of persistent resources in external account {{111122223333}}",
      "Effect": "Allow",
      "Principal": {
          "AWS": [
              "arn:aws:iam::{{111122223333}}:root"
          ]
      },
      "Action": [
          "kms:CreateGrant"
      ],
      "Resource": "*"
   }
   ```

1. 然後，從您要建立 Auto Scaling 群組的所在帳戶建立授權以將相關許可委派給適當的服務連結角色。授權的 `Grantee Principal` 元素是適當服務連結角色的 ARN。`key-id` 為金鑰的 ARN。

   以下是 [create-grant](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kms/create-grant.html) CLI 命令範例，此命令可對帳戶 {{111122223333}} 中名為 **AWSServiceRoleForAutoScaling** 的服務連結角色，提供在 {{444455556666}} 帳戶中使用客戶受管金鑰的許可。

   ```
   aws kms create-grant \
     --region {{us-west-2}} \
     --key-id {{arn:aws:kms:us-west-2:444455556666:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d}} \
     --grantee-principal arn:aws:iam::{{111122223333}}:role/aws-service-role/autoscaling.amazonaws.com/{{AWSServiceRoleForAutoScaling}} \
     --operations "Encrypt" "Decrypt" "ReEncryptFrom" "ReEncryptTo" "GenerateDataKey" "GenerateDataKeyWithoutPlaintext" "DescribeKey" "CreateGrant"
   ```

   若要讓此命令成功，提出請求的使用者必須有執行 `CreateGrant` 動作的許可。

   下列 IAM 政策範例允許帳戶 {{111122223333}} 中的 IAM 身分 (使用者或角色)，為帳戶 {{444455556666}} 中的客戶受管金鑰建立許可。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "AllowCreationOfGrantForTheKMSKeyinExternalAccount{{444455556666}}",
         "Effect": "Allow",
         "Action": "kms:CreateGrant",
         "Resource": "{{arn:aws:kms:us-west-2:444455556666:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d}}"
       }
     ]
   }
   ```

------

   如需在其他 AWS 帳戶中為 KMS 金鑰建立授權的詳細資訊，請參閱《*AWS Key Management Service 開發人員指南*》中的「[AWS KMS中的授權](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)」。
**重要**  
指定為承授者主體的服務連結角色名稱必須是現有角色的名稱。建立授與後，為確保授與允許 Amazon EC2 Auto Scaling 使用指定的 KMS 金鑰，請勿刪除和重新建立服務連結角色。

## 在 AWS KMS 主控台中編輯金鑰政策
<a name="eding-key-policies-console"></a>

前幾節的範例僅顯示如何對金鑰政策新增陳述式，而這只是其中一個用來變更金鑰政策的方法。變更金鑰政策的最簡單方法是針對金鑰政策使用 AWS KMS 主控台的預設檢視，並將 IAM 身分 （使用者或角色） 設為適當金鑰政策的*其中一個金鑰使用者*。如需詳細資訊，請參閱《 *AWS Key Management Service 開發人員指南*》中的[使用 AWS 管理主控台 預設檢視](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html#key-policy-modifying-how-to-console-default-view)。

**重要**  
請務必謹慎進行。主控台的預設檢視政策陳述式包含對客戶受管金鑰執行 AWS KMS `Revoke`操作的許可。如果您授予您帳戶中客戶受管金鑰的 AWS 帳戶 存取權，而且您不小心撤銷授予他們此許可的授予，外部使用者將無法再存取其加密的資料或用來加密其資料的金鑰。