静态加密 - Amazon ECR
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

静态加密

Amazon ECR 将图像存储在 Amazon S3 桶 Amazon ECR 管理。默认情况下, Amazon ECR 使用服务器端加密 Amazon S3-管理的加密密钥,使用AES-256加密算法对静态数据进行加密。这不需要任何您的零件上的任何操作,而且无需额外收费。有关详细信息,请参阅 使用与AmazonS3管理的加密密钥(SSE-S3)的服务器端加密保护数据Amazon Simple Storage Service 开发人员指南.

更多控制加密的 Amazon ECR 存储库,您可以使用存储在中的客户主密钥(CMKS)的服务器端加密 AWS Key Management Service (AWS KMS)。使用时 AWS KMS 要加密数据,可以使用默认值 AWS-管理的CMK,这些管理的CMK Amazon ECR,或指定您自己的CMK(称为客户管理CMK)。有关详细信息,请参阅 使用存储在AWS密钥管理服务(SSE-KMS)中的CMKS的服务器端加密保护数据Amazon Simple Storage Service 开发人员指南.

每个 Amazon ECR 存储库具有加密配置,在创建存储库时设置。您可以在每个存储库上使用不同的加密配置。有关更多信息,请参阅 创建存储库.

创建存储库时 AWS KMS 已启用加密,CMK用于加密存储库内容。此外, Amazon ECR 添加 AWS KMS 与CMK配合使用 Amazon ECR 作为受赠人的资料库。

以下提供了对如何 Amazon ECR 与 AWS KMS 对您的存储库进行加密和解密:

  1. 创建存储库时, Amazon ECR 发送 描述 呼叫 AWS KMS 验证和检索EncryptionConfiguration中指定的CMK的Amazon资源名称(ARN)。

  2. Amazon ECR 发送两个 CreateGrant 请求 AWS KMS 在CMK上创建授权以允许 Amazon ECR 使用数据密钥对数据进行加密和解密。

  3. 在推动图像时, GenerateDataKey 请求为 AWS KMS 指定CMK用于加密图像层和清单。

  4. AWS KMS 生成新的数据密钥,在指定的CMK下加密,然后发送加密数据密钥与图像层元数据和图像清单。

  5. 拉动图像时, 解密 请求为 AWS KMS,指定加密的数据密钥。

  6. AWS KMS 解密加密的数据密钥,然后将解密的数据密钥发送到 。Amazon S3.

  7. 用于在被拉取图像层之前解密图像层的数据密钥。

  8. 删除存储库时, Amazon ECR 发送两个 退休津贴 请求 AWS KMS 要退出为存储库创建的授权。

Considerations

使用时应考虑以下几点 AWS KMS 加密 Amazon ECR.

  • 如果您创建的 Amazon ECR 存储库与KMS加密并且不指定CMK, Amazon ECR 使用 AWS-已管理CMK与别名 aws/ecr 默认情况下。在您第一次创建具有KMS加密功能的存储库时,将在您的帐户中创建此CMK。

  • 当您使用自己的CMK的KMS加密时,密钥必须与存储库存在于同一个区域。

  • AWS KMS 每CMK实施500个津贴限制。因此,500个限制 Amazon ECR 可根据CMK加密的存储库。

  • 授予的资助 Amazon ECR 不应撤销代表您创建的内容。如果您撤销给予 Amazon ECR 使用 AWS KMS 您账户中的密钥, Amazon ECR 无法访问此数据,加密推送到存储库的新映像,或者在拉取时解密这些数据。当您撤销授权时 Amazon ECR,变更立即发生。要撤销访问权限,您应删除存储库,而不是撤销授予。删除存储库时, Amazon ECR 代表您退出资助。

  • 与使用 AWS KMS 键。有关详细信息,请参阅 AWS Key Management Service 定价.

所需的 IAM 权限

创建或删除 Amazon ECR 使用服务器端加密的存储库 AWS KMS,要求的权限取决于您使用的特定客户主密钥(CMK)。

要求 IAM 使用 AWS 管理CMKfor Amazon ECR

默认情况下,当 AWS KMS 启用加密功能 Amazon ECR 存储库未指定CMK, AWS-管理CMK Amazon ECR 使用。当 AWS-管理CMK Amazon ECR 用于加密存储库,任何具有创建资料库权限的负责人也可以启用 AWS KMS 存储库上的加密。但是, IAM 删除存储库的负责人必须 kms:RetireGrant 权限。这可以让退休的补助金被添加到 AWS KMS 创建存储库时的密钥。

以下示例 IAM 可以将策略添加为用户的内联策略,以确保他们拥有删除已启用加密的存储库所需的最小权限。TheThethe AWS KMS 用于加密存储库的密钥可以使用资源参数来指定。

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

要求 IAM 使用客户管理CMK时的权限

在创建存储库时 AWS KMS 使用客户管理的CMK启用加密,CMKKeyPolicy和TheCMKKeyPolicy(CMK主要策略的必要权限)和 IAM 创建存储库的用户或角色的策略。

创建自己的CMK时,可以使用默认密钥策略 AWS KMS 创建或您可以指定自己的。为确保客户管理的CMK保持管理可由客户所有者管理,CMK的关键政策应允许所有 AWS KMS 帐户root用户的操作。可以将其他范围的权限添加到关键策略中,但至少应该给出根用户来管理CMK。允许CMK仅用于发起的请求 Amazon ECR,您可以使用 KMS:ViAservice条件键ecr.<region>.amazonaws.com 值。

以下示例关键策略为 AWS 拥有CMK全权访问CMK的帐户(根用户)。有关此示例关键策略的详细信息,请参阅 允许访问AWS帐户并启用IAM策略AWS Key Management Service Developer Guide.

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

TheThethe IAM 用户, IAM 角色,或 AWS 创建您的存储库的帐户必须有 kms:CreateGrantkms:RetireGrant,和 kms:DescribeKey 除了必要之外 Amazon ECR 权限。

注意

TheThethe kms:RetireGrant 必须将权限添加到 IAM 创建存储库的用户或角色的策略。TheThethe kms:CreateGrantkms:DescribeKey 可以将CMK或 IAM 创建存储库的用户或角色的策略。有关详细信息 AWS KMS 权限工作,请参阅 AWSKMSAPI权限: 操作和资源参考AWS Key Management Service Developer Guide.

以下示例 IAM 可以将策略添加为用户的内联策略,以确保他们拥有创建具有加密功能的存储库所需的最低权限,并且在其完成时删除存储库。TheThethe AWS KMS 用于加密存储库的密钥可以使用资源参数来指定。

{ "Version": "2012-10-17", "Id": "ecr-kms-permissions", "Statement": [ { "Sid": "Allow access to create and retire the grants associated with the key as well as describe the key", "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:RetireGrant", "kms:DescribeKey" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/b8d9ae76-080c-4043-92EXAMPLE" } ] }

在创建存储库时,允许用户在控制台中列出CMKS

使用 Amazon ECR 控制台要创建存储库,您可以授予权限,以便在启用存储库加密时,允许用户列出区域内的客户管理CMKS。以下内容 IAM 策略示例显示使用控制台时列出CMK和别名所需的权限。

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

监控 Amazon ECR 与 AWS KMS

您可以使用 AWS CloudTrail 跟踪请求 Amazon ECR 发送至 AWS KMS 代表。在 CloudTrail 日志包含加密上下文密钥,使其更容易识别。

Amazon ECR 加密上下文

一个 加密上下文 是包含任意非秘密数据的Key-Value对。在请求中包含加密上下文以加密数据时,AWS KMS 以加密方式将加密上下文绑定到加密的数据。要解密数据,您必须传入相同的加密上下文。

在其中 GenerateDataKey解密 请求 AWS KMS, Amazon ECR 使用两个名称的加密上下文–识别存储库和 Amazon S3 使用的桶数。如下例所示。名称不会有所差异,但每个值的组合加密上下文值将不同。

"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,以及政策和授权授权的条件。

TheThethe Amazon ECR 加密上下文包含两个名称值对。

  • AWS:S3:ARN – 名字–值对标识桶。关键是 aws:s3:arn...该值是亚马逊资源名称(ARN)的 Amazon S3 桶。

    "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)。关键是 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"

Troubleshooting

删除 Amazon ECR 存储库,如果存储库已成功删除,但是 Amazon ECR 无法将添加到您的CMK的授权退回至您的资料库,您将收到以下错误。

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 存储库使用的密钥。TheThethe key-id 值包含在控制台的错误中。您还可以使用 list-keys 命令列出您帐户中特定区域的AWS管理CMKS和客户管理CMKS。

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

    输出包括 EncryptionContextSubset 存储库的Amazon资源名称(ARN)。这可用于确定添加到密钥的哪个授权是您要退出的授权。TheThethe GrantId 在下一步中退休授予时,将使用值。

  2. 为每个授权退休 AWS KMS 存储库已添加密钥。更换值 GrantId 从上一步的输出中获得授予的ID。

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