

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 保管中の暗号化
<a name="encryption-at-rest"></a>

**重要**  
 AWS KMS (DSSE-KMS) を使用した二層式サーバー側の暗号化は、 AWS GovCloud (US) リージョンでのみ使用できます。

Amazon ECR は、Amazon ECR が管理する Amazon S3 バケットにイメージを保存します。デフォルトでは、Amazon ECR は、Amazon S3 が管理する暗号化キーによるサーバー側暗号化を使用し、保管中のデータが AES-256 暗号化アルゴリズムで暗号化されます。これは、お客様によるアクションを必要とせず、追加料金なしで提供されます。詳細については、*Amazon Simple Storage Service ユーザーガイド*の「[Amazon S3 が管理する暗号化キーによるサーバー側の暗号化 (SSE-S3) を使用したデータの保護](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html)」を参照してください。

Amazon ECR リポジトリの暗号化をより詳細に制御するには、 AWS Key Management Service () に保存されている KMS キーでサーバー側の暗号化を使用できますAWS KMS。を使用して AWS KMS データを暗号化する場合、Amazon ECR によって管理 AWS マネージドキーされるデフォルトを使用するか、独自の KMS キー (カスタマーマネージドキーと呼ばれます) を指定できます。詳細については、*Amazon Simple Storage Service ユーザーガイド*の[AWS KMS 「 (SSE-KMS) に保存されている KMS キーによるサーバー側の暗号化を使用したデータの保護](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html)」を参照してください。

 AWS KMS () による二層式サーバー側の暗号化を使用して、Amazon ECR イメージに 2 つの暗号化レイヤーを適用できますDSSE-KMS。 DSSE-KMSオプションは に似ていますがSSE-KMS、1 つのレイヤーではなく 2 つの個別の暗号化レイヤーを適用します。詳細については、[AWS KMS 「キーによる二層式サーバー側の暗号化の使用 (DSSE-KMS)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingDSSEncryption.html)」を参照してください。

各 Amazon ECR リポジトリには、リポジトリの作成時に設定される暗号化設定があります。リポジトリごとに異なる暗号化設定を使用できます。詳細については、「[イメージを保存するための Amazon ECR プライベートリポジトリの作成](repository-create.md)」を参照してください。

 AWS KMS 暗号化を有効にしてリポジトリを作成すると、KMS キーを使用してリポジトリの内容を暗号化します。さらに、Amazon ECR は、Amazon ECR リポジトリを AWS KMS 被付与者プリンシパルとして KMS キーに権限を追加します。

Amazon ECR が AWS KMS と統合してレポジトリを暗号化および復号化する方法の高レベルの概要を以下に示します。

1. リポジトリを作成すると、Amazon ECR は [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) 呼び出しを に送信 AWS KMS し、暗号化設定で指定された KMS キーの Amazon リソースネーム (ARN) を検証して取得します。

1. Amazon ECR は、2 つの [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) リクエストを AWS KMS に送信して KMS キーに許可を作成し、Amazon ECR がデータキーを使用してデータを暗号化および復号できるようにします。

1. イメージをプッシュすると、イメージレイヤーとマニフェストの暗号化に使用する KMS キー AWS KMS を指定する [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html) リクエストが に送信されます。

1. AWS KMS は新しいデータキーを生成し、指定された KMS キーで暗号化し、暗号化されたデータキーを送信してイメージレイヤーメタデータとイメージマニフェストとともに保存します。

1. イメージをプルすると、暗号化されたデータキーを指定して AWS KMS、[復号](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)リクエストが に対して行われます。

1. AWS KMS は暗号化されたデータキーを復号し、復号されたデータキーを Amazon S3 に送信します。

1. データキーは、イメージレイヤーをプルする前にイメージレイヤーを復号化するために使用されます。

1. リポジトリが削除されると、Amazon ECR はリポジトリ用に作成された許可を廃止 AWS KMS するために、2 つの [RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html) リクエストを に送信します。

## 考慮事項
<a name="encryption-at-rest-considerations"></a>

Amazon ECR で AWS KMS ベースの暗号化 (SSE-KMS または DSSE-KMS) を使用する場合は、次の点を考慮する必要があります。
+ KMS 暗号化を使用して Amazon ECR リポジトリを作成し、KMS キーを指定しない場合、Amazon ECR は`aws/ecr`デフォルトでエイリアス AWS マネージドキー で を使用します。この KMS キーは、KMS 暗号化を有効にしたリポジトリを初めて作成するときに、アカウントに作成されます。
+  リポジトリの作成後にリポジトリの暗号化設定を変更することはできません。
+ 独自の KMS キーで KMS 暗号化を使用する場合、そのキーはリポジトリと同じリージョンに存在する必要があります。
+ お客様の代わりに Amazon ECR が作成する許可は取り消さないでください。アカウントの AWS KMS キーを使用するアクセス許可を Amazon ECR に付与する許可を取り消すと、Amazon ECR はこのデータにアクセスしたり、リポジトリにプッシュされた新しいイメージを暗号化したり、プル時に復号したりすることはできません。Amazon ECR の許可を取り消すと、変更がすぐに適用されます。アクセス権限を取り消すには、許可を取り消すのではなく、リポジトリを削除します。リポジトリを削除すると、Amazon ECR がユーザーに代わって許可を取り消します。
+  AWS KMS キーの使用にはコストがかかります。詳細については、[AWS Key Management Service 料金表](https://aws.amazon.com/kms/pricing/)を参照してください。
+ 二層式サーバー側の暗号化の使用にはコストがかかります。詳細については、[Amazon ECR の料金](https://aws.amazon.com/ecr/pricing/)を参照してください。

## 必要な IAM 許可
<a name="encryption-at-rest-iam"></a>

 AWS KMSを使用するサーバー側の暗号化が有効な Amazon ECR リポジトリを作成または削除する場合、必要なアクセス許可は、使用する特定の KMS キーに応じて異なります。

### Amazon ECR AWS マネージドキー で を使用する場合に必要な IAM アクセス許可
<a name="encryption-aws-managed-key"></a>

デフォルトでは、Amazon ECR リポジトリで AWS KMS 暗号化が有効になっていても KMS キーが指定されていない場合、Amazon ECR AWS マネージドキー の が使用されます。Amazon ECR の AWSマネージド KMS キーを使用してリポジトリを暗号化する場合、リポジトリを作成するアクセス許可を持つプリンシパルは、リポジトリで AWS KMS 暗号化を有効にすることもできます。ただし、リポジトリを削除する IAM プリンシパルには、`kms:RetireGrant` アクセス許可が必要です。これにより、リポジトリの作成時に AWS KMS キーに追加された許可が廃止されます。

次の IAM ポリシーの例をインラインポリシーとしてユーザーに追加すると、暗号化が有効なリポジトリを削除するのに必要な最小限のアクセス許可がユーザーに付与されます。リポジトリの暗号化に使用する KMS キーは、リソースパラメータを使用して指定できます。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "ecr-kms-permissions",
    "Statement": [
        {
            "Sid": "AllowAccessToRetireTheGrantsAssociatedWithTheKey",
            "Effect": "Allow",
            "Action": [
                "kms:RetireGrant"
            ],
            "Resource": "arn:aws:kms:{{us-west-2}}:{{111122223333}}:key/{{b8d9ae76-080c-4043-92EXAMPLE}}"
        }
    ]
}
```

------

### カスタマーマネージドキーを使用する場合に必要な IAM アクセス許可
<a name="encryption-customer-managed-key"></a>

カスタマーマネージドキーを使用して AWS KMS 暗号化を有効にしたリポジトリを作成する場合、リポジトリを作成するユーザーまたはロールの KMS キーポリシーと IAM ポリシーの両方に必要なアクセス許可があります。

独自の KMS キーを作成する場合、 AWS KMS が作成するデフォルトのキーポリシーを使用するか、独自のキーポリシーを指定することができます。アカウント所有者がカスタマーマネージドキーを管理できるように、KMS キーのキーポリシーでは、アカウントのルートユーザーのすべての AWS KMS アクションを許可する必要があります。追加のスコープ付きアクセス許可をキーポリシーに追加することもできますが、少なくともルートユーザーには KMS キーを管理するためのアクセス許可が必要です。Amazon ECR から実行されるリクエストにのみ KMS を使用するには、[kms:ViaService 条件キー](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service)を `ecr.{{<region>}}.amazonaws.com` 値で使用できます。

次のキーポリシーの例では、KMS キーを所有する AWS アカウント (ルートユーザー) に KMS キーへのフルアクセスを許可します。このキーポリシーの例の詳細については、「 *AWS Key Management Service デベロッパーガイド*[」の AWS 「アカウントへのアクセスを許可」および「IAM ポリシーを有効にする](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-default-allow-root-enable-iam)」を参照してください。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "ecr-key-policy",
    "Statement": [
        {
            "Sid": "EnableIAMUserPermissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{{111122223333}}:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        }
    ]
}
```

------

リポジトリを作成する IAM ユーザー、IAM ロール、または AWS アカウントには`kms:CreateGrant`、必要な Amazon ECR アクセス`kms:DescribeKey`許可に加えて、、`kms:RetireGrant`、および アクセス許可が必要です。

**注記**  
リポジトリを作成するユーザーまたはロールの IAM ポリシーに `kms:RetireGrant` アクセス許可を追加する必要があります。`kms:CreateGrant` と `kms:DescribeKey` のアクセス許可は、KMS キーのキーポリシー、またはリポジトリを作成するユーザーまたはロールの IAM ポリシーに追加できます。アクセス AWS KMS 許可の仕組みの詳細については、「 *AWS Key Management Service デベロッパーガイド*」の[AWS KMS 「API アクセス許可: アクションとリソースのリファレンス](https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html)」を参照してください。

次の IAM ポリシーの例をインラインポリシーとしてユーザーに追加すると、暗号化が有効なリポジトリの作成、および作業が終了したときにリポジトリの削除を行うのに必要な最小限のアクセス許可がユーザーに付与されます。リポジトリの暗号化に使用する AWS KMS key は、リソースパラメータを使用して指定できます。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "ecr-kms-permissions",
    "Statement": [
        {
            "Sid": "AllowAccessToCreateAndRetireTheGrantsAssociatedWithTheKeyAsWellAsDescribeTheKey",
            "Effect": "Allow",
            "Action": [
                "kms:CreateGrant",
                "kms:RetireGrant",
                "kms:DescribeKey"
            ],
            "Resource": "arn:aws:kms:{{us-west-2}}:{{111122223333}}:key/{{b8d9ae76-080c-4043-92EXAMPLE}}"
        }
    ]
}
```

------

### リポジトリの作成時にコンソールに KMS キーを一覧表示できるようにする
<a name="encryption-at-rest-iam-example"></a>

Amazon ECR コンソールを使用してリポジトリを作成すると、リポジトリの暗号化を有効にするときに、ユーザーがリージョンでカスタマーマネージド KMS キーを一覧表示するアクセス許可を付与できます。次の IAM ポリシーの例は、コンソールを使用するときに KMS キーとエイリアスを一覧表示するために必要なアクセス許可を示しています。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:ListKeys",
      "kms:ListAliases",
      "kms:DescribeKey"
    ],
    "Resource": "*"
  }
}
```

------

## との Amazon ECR インタラクションのモニタリング AWS KMS
<a name="encryption-at-rest-monitoring"></a>

を使用して AWS CloudTrail 、Amazon ECR が AWS KMS ユーザーに代わって に送信するリクエストを追跡できます。CloudTrail ログのログエントリには、より簡単に識別できるように暗号化コンテキストキーが含まれています。

### Amazon ECR 暗号化コンテキスト
<a name="ecr-encryption-context"></a>

*暗号化コンテキスト* は、任意非シークレットデータを含むキーと値のペアのセットです。データを暗号化するリクエストに暗号化コンテキストを含めると、 は暗号化コンテキストを暗号化されたデータに AWS KMS 暗号化バインドします。データを復号するには、同じ暗号化コンテキストに渡す必要があります。

[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) および [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) リクエストでは AWS KMS、Amazon ECR は、使用するリポジトリと Amazon S3 バケットを識別する 2 つの名前と値のペアを持つ暗号化コンテキストを使用します。以下の例ではこれを示しています。名前は変わりませんが、組み合わされた暗号化コンテキストの値は、値ごとに異なります。

```
"encryptionContext": {
    "aws:s3:arn": "arn:aws:s3:::{{us-west-2}}-starport-manifest-bucket/{{EXAMPLE1-90ab-cdef-fedc-ba987BUCKET1}}/sha256:a7766145a775d39e53a713c75b6fd6d318740e70327aaa3ed5d09e0ef33fc3df",
    "aws:ecr:arn": "arn:aws:ecr:{{us-west-2}}:{{111122223333}}:repository/{{repository-name}}"
}
```

暗号化コンテキストを使用して、[AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) や Amazon CloudWatch Logs などの監査レコードやログで、ポリシーや許可の認可の条件として、これらの暗号化オペレーションを識別できます。

Amazon ECR 暗号化コンテキストは、2 つの名前と値のペアで構成されます。
+ **aws:s3:arn** – バケットを識別する最初の名前と値のペア。キーは、`aws:s3:arn` です。値は、Amazon S3 バケットの Amazon リソースネーム (ARN)です。

  ```
  "aws:s3:arn": "{{ARN of an Amazon S3 bucket}}"
  ```

  たとえば、バケットの ARN が `arn:aws:s3:::{{us-west-2}}-starport-manifest-bucket/{{EXAMPLE1-90ab-cdef-fedc-ba987BUCKET1}}/sha256:a7766145a775d39e53a713c75b6fd6d318740e70327aaa3ed5d09e0ef33fc3df` の場合、暗号化コンテキストには次のペアが含まれます。

  ```
  "arn:aws:s3:::{{us-west-2}}-starport-manifest-bucket/{{EXAMPLE1-90ab-cdef-fedc-ba987BUCKET1}}/sha256:a7766145a775d39e53a713c75b6fd6d318740e70327aaa3ed5d09e0ef33fc3df"
  ```
+ **aws:ecr:arn** – リポジトリの Amazon リソースネーム (ARN) を識別する 2 番目の名前と値のペア。キーは、`aws:ecr:arn` です。値は、リポジトリの ARNです。

  ```
  "aws:ecr:arn": "{{ARN of an Amazon ECR repository}}"
  ```

  たとえば、リポジトリの ARN が `arn:aws:ecr:{{us-west-2}}:{{111122223333}}:repository/{{repository-name}}` の場合、暗号化コンテキストには次のペアが含まれます。

  ```
  "aws:ecr:arn": "arn:aws:ecr:{{us-west-2}}:{{111122223333}}:repository/{{repository-name}}"
  ```

## トラブルシューティング
<a name="encryption-at-rest-troubleshooting"></a>

コンソールで Amazon ECR リポジトリを削除するときに、リポジトリが正常に削除されても、Amazon ECR がリポジトリの KMS キーに追加された許可を使用停止できない場合、次のエラーが表示されます。

```
The repository {{[{repository-name}]}} has been deleted successfully but the grants created by the kmsKey {{[{kms_key}]}} failed to be retired
```

この場合、リポジトリの AWS KMS 許可を自分で廃止できます。

**リポジトリの AWS KMS 許可を手動で廃止するには**

1. リポジトリに使用される AWS KMS キーの許可を一覧表示します。`key-id` 値は、コンソールに表示されるエラーに含まれています。`list-keys` コマンドを使用して、アカウント内の特定のリージョンの AWS マネージドキー とカスタマーマネージド KMS キーの両方を一覧表示することもできます。

   ```
   aws kms list-grants \
        --key-id {{b8d9ae76-080c-4043-9237-c815bfc21dfc}} 
        --region {{us-west-2}}
   ```

   出力には、リポジトリの Amazon リソースネーム (ARN) を含む `EncryptionContextSubset` が含まれます。これを使用して、使用停止にするのがキーに追加されたどの許可かを特定できます。`GrantId` 値は、次のステップで許可を使用停止するときに使用します。

1. リポジトリに追加された AWS KMS キーの各許可を廃止します。以前のステップの出力の許可の ID で {{GrantId}} の値を置き換えます。

   ```
   aws kms retire-grant \
        --key-id {{b8d9ae76-080c-4043-9237-c815bfc21dfc}} \
        --grant-id {{GrantId}} \
        --region {{us-west-2}}
   ```