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

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

静态加密

Amazon ECR 将映像存储在 Amazon ECR 管理的 Amazon S3 存储桶中。默认情况下,Amazon ECR 使用具有 Amazon S3 托管加密密密钥的服务器端加密,从而使用 AES-256 加密算法加密您的静态数据。这不需要您采取任何操作,且不另外收取费用。有关更多信息,请参阅 。使用具有 Amazon S3 托管加密密钥的服务器端加密 (SSE-S3) 保护数据中的Amazon Simple Storage Service 开发人员指南.

要更好地控制 Amazon ECR 存储库的加密,您可以将服务器端加密与存储在Amazon Key Management Service(Amazon KMS)。当您使用Amazon KMS来加密您的数据,您可以使用默认的 Amazon 托管密钥 (由 Amazon ECR 管理),或者指定您自己的 KMS 密钥(称为客户管理密钥)。有关更多信息,请参阅 。使用服务器端加密与存储在中的 KMS 密钥保护数据Amazon KMS(小时公里)中的Amazon Simple Storage Service 开发人员指南.

每个 Amazon ECR 存储库都有一个加密配置,该配置在创建存储库时进行设置。您可以对每个存储库使用不同的加密配置。有关更多信息,请参阅 创建存储库

当一个存储库是使用Amazon KMS加密时,KMS 密钥用于加密存储库的内容。此外,亚马逊 ECR 添加了Amazon KMS授予 KMS 密钥,并将 Amazon ECR 存储库作为被授权委托人。

以下内容提供了对 Amazon ECR 如何与Amazon KMS来加密和解密您的存储库:

  1. 创建存储库时,Amazon ECR 会发送DescribeKey调用到Amazon KMS验证和检索在加密配置中指定的 KMS 密钥的 Amazon 资源名称 (ARN)。

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

  3. 当推送图像时,GenerateDataKey请求发送到Amazon KMS,它指定用于加密图像层和清单的 KMS 密钥。

  4. Amazon KMS会生成一个新的数据密钥,使用指定 KMS 密钥对其进行加密,然后将加密后的数据密钥发送到以便与映像层元数据和镜像清单一起存储。

  5. 当拉动图像时,Decrypt请求发送到Amazon KMS,指定加密的数据密钥。

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

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

  8. 删除存储库后,Amazon ECR 会发送两个RetireGrant请求到Amazon KMS以停用为存储库创建的授权。

Considerations

使用时应注意以下事项Amazon KMS使用 Amazon ECR 加密。

  • 如果您使用 KMS 加密创建 Amazon ECR 存储库,并且未指定 KMS 密钥,则 Amazon ECR 将使用 Amazon 托管密钥 使用别名aws/ecr默认情况下。此 KMS 密钥是在您首次创建启用 KMS 加密的存储库时在您的帐户中创建的。

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

  • Amazon KMS强制执行每个 KMS 密钥 500 授权限制。因此,每个 KMS 密钥可以加密的 Amazon ECR 存储库限制为 500 个。

  • 亚马逊 ECR 代表您创建的授权不应被撤销。如果您撤销授予亚马逊 ECR 使用Amazon KMS密钥时,Amazon ECR 无法访问此数据、加密推送到存储库的新图像,也无法在提取这些图像时对其进行解密。当您撤销 Amazon ECR 的授权时,更改将立即生效。要撤销访问权限,您应该删除存储库,而不是撤销该授权。删除存储库后,Amazon ECR 会代表您停用授权。

  • 有一个与使用Amazon KMS键。有关更多信息,请参阅 Amazon Key Management Service 定价

所需的 IAM 权限

当您使用使用的是服务器端加密创建或删除 Amazon ECR 存储库时Amazon KMS,所需的权限取决于您正在使用的特定 KMS 密钥。

使用时所需的 IAM 权限 Amazon 托管密钥 适用于 Amazon ECR

默认情况下,Amazon KMS加密已启用 Amazon ECR 存储库,但未指定 KMS 密钥, Amazon 托管密钥 使用亚马逊 ECR。当AmazonAmazon ECR 的托管 KMS 密钥用于加密存储库,任何有权创建存储库的委托人也可以启用Amazon KMS加密。但是,删除存储库的 IAM 委托人必须具有kms:RetireGrant权限。这样就可以停用添加到Amazon KMS键创建存储库时。

以下示例 IAM 策略可作为内联策略添加到用户,以确保用户具有删除启用了加密的存储库所需的最低权限。您可以使用资源参数指定用于加密存储库的 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 权限

在创建具有Amazon KMS加密时,对于创建存储库的用户或角色,KMS 密钥策略和 IAM 策略都必须具有权限。

创建自己的 KMS 密钥时,您可以使用默认密钥策略Amazon KMS创建,或者您可以指定自己的存储桶。为确保客户管理的密钥仍然可由帐户所有者管理,KMS 密钥的密钥策略应允许所有Amazon KMS操作。可以向密钥策略添加额外的作用域权限,但至少应向 root 用户授予管理 KMS 密钥的权限。要允许将 KMS 密钥仅用于源自 Amazon ECR 的请求,可以使用KMS: ViaService 条件键使用ecr.<region>.amazonaws.com值。

以下示例键策略给出Amazon帐户(根用户)拥有对 KMS 密钥的完全访问权限。有关此示例密钥策略的更多信息,请参阅 “”允许访问Amazon账户并启用 IAM 策略中的Amazon Key Management Service开发人员指南.

{ "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": "*" } ] }

IAM 用户、IAM 角色或Amazon帐户创建您的存储库必须具有kms:CreateGrantkms:RetireGrant, 和kms:DescribeKey权限以及必要的 Amazon ECR 权限。

注意

这些区域有:kms:RetireGrant权限必须添加到创建存储库的用户或角色的 IAM 策略中。这些区域有:kms:CreateGrantkms:DescribeKey权限可以添加到 KMS 密钥的密钥策略或创建存储库的用户或角色的 IAM 策略中。有关如何使用的更多信息Amazon KMS权限工作,请参阅Amazon KMSAPI 权限:操作和资源参考中的Amazon Key Management Service开发人员指南.

以下示例 IAM 策略可作为内联策略添加到用户,以确保用户拥有创建启用加密的存储库所需的最低权限,并在完成存储库时删除存储库。这些区域有:Amazon KMS key密钥可以使用资源参数指定用于加密存储库。

{ "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" } ] }

允许用户在创建存储库时在控制台中列出 KMS 密钥

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

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

监控亚马逊 ECR 与Amazon KMS

您可以使用Amazon CloudTrail来跟踪亚马逊 ECR 发送到的请求Amazon KMS代表您。CloudTrail 日志中的日志条目包含加密上下文密钥,以便更容易识别它们。

Amazon ECR 加密上下文

网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的加密上下文是一组包含任意非机密数据的键值对。在请求中包含加密上下文以加密数据时,Amazon KMS 以加密方式将加密上下文绑定到加密的数据。要解密数据,您必须传入相同的加密上下文。

在其GenerateDataKeyDecrypt请求到Amazon 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" }

您可以使用加密上下文在审计记录和日志中识别这些加密操作(例如:Amazon CloudTrail和 Amazon CloudWatch Logs,以及作为策略和授权中授权的条件。

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

  • 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"
  • aw: 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 无法停用添加到您的存储库 KMS 密钥的授权,您将收到以下错误消息。

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

发生这种情况时,您可以将Amazon KMS授予自己的存储库。

要退休Amazon KMS手动授予存储库

  1. 列出Amazon KMS键,用于存储库。这些区域有:key-id值包含在从控制台收到的错误中。您也可以使用list-keys命令以列出 Amazon 托管密钥 和您账户中特定区域中的客户管理 KMS 密钥。

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

    输出包括EncryptionContextSubset替换为存储库的 Amazon 资源名称 (ARN)。这可用于确定添加到密钥中的哪个授权是您想要停用的授权。这些区域有:GrantId值将在下一个步骤中停用授予时使用。

  2. 退出每个授予Amazon KMS键添加到存储库中。替换赠款 d使用上一步的输出中的授予 ID。

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