保管中の暗号化 - Amazon ECR

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

保管中の暗号化

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

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

各 Amazon ECR リポジトリには、リポジトリの作成時に設定される暗号化設定があります。リポジトリごとに異なる暗号化設定を使用できます。詳細については、「プライベートリポジトリを作成する」を参照してください。

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

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

  1. リポジトリを作成すると、Amazon ECR は へのDescribeKey呼び出しを送信 AWS KMS して、暗号化設定で指定された KMS キーの Amazon リソースネーム (ARN) を検証および取得します。

  2. Amazon ECR は 2 つのCreateGrantリクエストを に送信 AWS KMS して KMS キーに許可を作成し、Amazon ECR がデータキーを使用してデータを暗号化および復号できるようにします。

  3. イメージをプッシュすると、イメージレイヤーとマニフェストの暗号化に使用する KMS キー AWS KMS を指定する へのGenerateDataKeyリクエストが行われます。

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

  5. イメージをプルすると、暗号化されたデータキーを指定して AWS KMSに Decrypt リクエストが実行されます。

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

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

  8. リポジトリが削除されると、Amazon ECR はリポジトリ用に作成された許可を廃止 AWS KMS するために 2 つのRetireGrantリクエストを に送信します。

考慮事項

Amazon ECR で AWS 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 の料金を参照してください。

必要な IAM 許可

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

Amazon ECR AWS マネージドキー で を使用する場合に必要な IAM アクセス許可

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

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

{ "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 アクセス許可

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

独自の KMS キーを作成する場合、 AWS KMS が作成するデフォルトのキーポリシーを使用するか、独自のキーポリシーを指定することができます。カスタマーマネージドキーがアカウント所有者によって管理されるようにするには、KMS キーのキーポリシーで、アカウントのルートユーザーのすべての AWS KMS アクションを許可する必要があります。追加のスコープ付きアクセス許可をキーポリシーに追加することもできますが、少なくともルートユーザーには KMS キーを管理するためのアクセス許可が必要です。Amazon ECR から送信されるリクエストにのみ KMS キーを使用できるようにするには、 ecr.<region>.amazonaws.com値で kms:ViaService condition キーを使用できます。

次のキーポリシーの例では、KMS キーを所有する AWS アカウント (ルートユーザー) に KMS キーへのフルアクセスを許可します。このキーポリシーの例の詳細については、「 デベロッパーガイド」の「 AWS アカウントへのアクセスを許可し、IAM ポリシーを有効にする」を参照してください。 AWS Key Management Service

{ "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:CreateGrantkms:DescribeKey のアクセス許可は、KMS キーのキーポリシー、またはリポジトリを作成するユーザーまたはロールの IAM ポリシーに追加できます。アクセス AWS KMS 許可の仕組みの詳細については、「 AWS Key Management Service デベロッパーガイド」のAWS KMS 「 API アクセス許可: アクションとリソースのリファレンス」を参照してください。

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

{ "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 キーを一覧表示できるようにする

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

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

AWS KMSと Amazon ECR のインタラクションのモニタリング

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

Amazon ECR 暗号化コンテキスト

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

への GenerateDataKeyおよび Decrypt リクエストでは 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や 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"

トラブルシューティング

コンソールで 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 値は、次のステップで許可を使用停止するときに使用します。

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

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