签署镜像 - Amazon ECR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

签署镜像

Amazon ECR Amazon Signer 与集成,为您提供了一种签署容器映像的方法。您可以将容器镜像和签名存储在私有存储库中。

注意事项

使用 Amazon ECR 镜像签名时应注意以下事项。

  • 存储库中存储的签名计入每个存储库的最大镜像数量的服务限额。有关更多信息,请参阅 Amazon ECR 服务配额

  • 在使用 Amazon ECR 生命周期策略时,任何使 OCI 镜像索引过期或删除 OCI 镜像索引的规则操作都将导致 Amazon ECR 在 24 小时内删除该镜像索引引用的任何签名。

先决条件

在您开始之前,必须满足以下先决条件。

为 Notary 客户端配置身份验证

在使用 Notafication CLI 创建签名之前,必须先配置客户端,使其能够向 Amazon ECR 进行身份验证。如果您在安装 Notation 客户端的同一主机上安装了 Docker,那么 Notation 将重用您为 Docker 客户端使用的相同身份验证方法。Docker loginlogout 命令将允许 Notation signverify 命令使用相同的凭证,并且您不必单独对 Notation 进行身份验证。有关配置 Notary 客户端进行身份验证的详细信息,请参阅 Notary Project 文档中的使用符合 OCI 的注册表进行身份验证

如果您没有使用 Docker 或其他使用 Docker 凭证的工具,那么我们建议使用 Amazon ECR Docker 凭证助手作为您的凭证存储。有关如何安装和配置 Amazon ECR 凭证助手的更多信息,请参阅 Amazon ECR Docker 凭证助手

签署镜像

可以使用以下步骤创建签署容器镜像所需的资源,并将签名存储到 Amazon ECR 私有存储库中。Notation 使用摘要对镜像进行签名。

要签署映像
  1. 使用 Amazon Signer 签名平台创建Notation-OCI-SHA384-ECDSA签名配置文件。您可以选择性地使用 --signature-validity-period 参数指定签名有效期。可以使用 DAYSMONTHSYEARS 指定此值。如果未指定有效期,则使用默认值 135 个月。

    aws signer put-signing-profile --profile-name ecr_signing_profile --platform-id Notation-OCI-SHA384-ECDSA
    注意

    签名配置文件名称仅支持字母数字字符和下划线(_)。

  2. 根据您的默认注册表进行 Notation 客户端身份验证。以下示例使用对 Amazon ECR 私有注册表的 Lotation CLI 进行身份验证。 Amazon CLI

    aws ecr get-login-password --region region | notation login --username AWS --password-stdin 111122223333.dkr.ecr.region.amazonaws.com
  3. 使用 Notation CLI 对映像进行签名,并且使用存储库名称和 SHA 摘要指定映像。这将创建签名并将其推送到正在签名的镜像所在的 Amazon ECR 私有存储库。

    在以下示例中,我们正在对curl带 SHA 摘要的存储库sha256:ca78e5f730f9a789ef8c63bb55275ac12dfb9e8099e6EXAMPLE中的映像进行签名。

    notation sign 111122223333.dkr.ecr.region.amazonaws.com/curl@sha256:ca78e5f730f9a789ef8c63bb55275ac12dfb9e8099e6EXAMPLE --plugin "com.amazonaws.signer.notation.plugin" --id "arn:aws:signer:region:111122223333:/signing-profiles/ecrSigningProfileName"

签名后在本地验证映像

使用 Amazon Signer 和 Notation 签署容器镜像后,您或您的团队中的授权成员可以通过加密手段验证镜像的来源和完整性。

完成以下步骤以使用 Notation 验证镜像是否有效。

要验证镜像
  1. 需要使用信任存储进行验证。如果您使用了 Amazon Signer 插件和注释的安装程序,则会自动设置信任存储并配置了根证书。

  2. 设置与以下策略类似的信任策略,根据需要修改用于验证镜像的签名配置文件的名称。

    { "version":"1.0", "trustPolicies":[ { "name":"aws-signer-tp", "registryScopes":[ "*" ], "signatureVerification":{ "level":"strict" }, "trustStores":[ "signingAuthority:aws-signer-ts" ], "trustedIdentities":[ "arn:aws:signer:region:111122223333:/signing-profiles/ecr_signing_profile", "arn:aws:signer:region:111122223333:/signing-profiles/ecr_signing_profile2" ] } ] }
  3. 将策略导入 Notation 中。

    $ notation policy import mypolicy.json

    输出:

    Existing trust policy configuration found, do you want to overwrite it? [y/N] y Trust policy configuration imported successfully.
  4. 验证签名,并且使用存储库名称和 SHA 摘要指定签名。

    $ notation verify 111122223333.dkr.ecr.region.amazonaws.com/curl@SHA256_digest

    输出:

    Successfully verified signature for 111122223333.dkr.ecr.us-west-2.amazonaws.com/curl@SHA256_digest

删除签名

当您使用 Notation CLI 创建和推送签名时,还会在您的 Amazon ECR 存储库中创建 OCI 镜像索引。Amazon ECR API 不支持删除 OCI 镜像索引所引用的构件或镜像,因此以下是清理这些构件的可用选项。

  • (推荐)您可以使用 ORAS CLI 删除构件,ORAS 将处理镜像索引的更新或删除。

  • 您可以使用 Amazon ECR API 或控制台先删除 OCI 镜像索引,然后删除引用的构件,例如签名。

使用 ORAS 客户端删除签名和其他引用类型构件时,ORAS 会管理 OCI 镜像索引。ORAS 将首先从索引中删除对构件的引用,然后删除清单。可以使用 oras manifest delete 命令,以引用签名构件的索引。有关安装和配置 ORAS 客户端的更多信息,请参阅 ORAS 文档中的安装

可以使用以下示例命令删除签名。

oras manifest delete 111122223333.dkr.ecr.region.amazonaws.com/repository_name@sha256:ca78e5f730f9a789ef8c63bb55275ac12dfb9e8099e6EXAMPLE