本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
签署镜像
Amazon ECR Amazon Signer 与集成,为您提供了一种签署容器映像的方法。您可以将容器镜像和签名存储在私有存储库中。
注意事项
使用 Amazon ECR 镜像签名时应注意以下事项。
-
存储库中存储的签名计入每个存储库的最大镜像数量的服务限额。有关更多信息,请参阅 Amazon ECR 服务配额。
-
在使用 Amazon ECR 生命周期策略时,任何使 OCI 镜像索引过期或删除 OCI 镜像索引的规则操作都将导致 Amazon ECR 在 24 小时内删除该镜像索引引用的任何签名。
先决条件
在您开始之前,必须满足以下先决条件。
-
安装并配置最新版本的 Amazon CLI。有关更多信息,请参阅《Amazon Command Line Interface 用户指南》中的安装或更新最新版本的 Amazon CLI。
-
安装乐谱 CLI 和符号 Amazon Signer 插件。有关更多信息,请参阅《Amazon Signer 开发人员指南》中的对容器镜像进行签名的先决条件。
-
签署存储在 Amazon ECR 私有存储库中的容器镜像。有关更多信息,请参阅 推送镜像。
为 Notary 客户端配置身份验证
在使用 Notafication CLI 创建签名之前,必须先配置客户端,使其能够向 Amazon ECR 进行身份验证。如果您在安装 Notation 客户端的同一主机上安装了 Docker,那么 Notation 将重用您为 Docker 客户端使用的相同身份验证方法。Docker login
和 logout
命令将允许 Notation sign
和 verify
命令使用相同的凭证,并且您不必单独对 Notation 进行身份验证。有关配置 Notary 客户端进行身份验证的详细信息,请参阅 Notary Project 文档中的使用符合 OCI 的注册表进行身份验证
如果您没有使用 Docker 或其他使用 Docker 凭证的工具,那么我们建议使用 Amazon ECR Docker 凭证助手作为您的凭证存储。有关如何安装和配置 Amazon ECR 凭证助手的更多信息,请参阅 Amazon ECR Docker 凭证助手
签署镜像
可以使用以下步骤创建签署容器镜像所需的资源,并将签名存储到 Amazon ECR 私有存储库中。Notation 使用摘要对镜像进行签名。
要签署映像
-
使用 Amazon Signer 签名平台创建
Notation-OCI-SHA384-ECDSA
签名配置文件。您可以选择性地使用--signature-validity-period
参数指定签名有效期。可以使用DAYS
、MONTHS
或YEARS
指定此值。如果未指定有效期,则使用默认值 135 个月。aws signer put-signing-profile --profile-name
ecr_signing_profile
--platform-id Notation-OCI-SHA384-ECDSA注意
签名配置文件名称仅支持字母数字字符和下划线(
_
)。 -
根据您的默认注册表进行 Notation 客户端身份验证。以下示例使用对 Amazon ECR 私有注册表的 Lotation CLI 进行身份验证。 Amazon CLI
aws ecr get-login-password --region
region
| notation login --username AWS --password-stdin111122223333
.dkr.ecr.region
.amazonaws.com -
使用 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 验证镜像是否有效。
要验证镜像
-
需要使用信任存储进行验证。如果您使用了 Amazon Signer 插件和注释的安装程序,则会自动设置信任存储并配置了根证书。
-
设置与以下策略类似的信任策略,根据需要修改用于验证镜像的签名配置文件的名称。
{ "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
" ] } ] } -
将策略导入 Notation 中。
$
notation policy importmypolicy.json
输出:
Existing trust policy configuration found, do you want to overwrite it? [y/N] y Trust policy configuration imported successfully.
-
验证签名,并且使用存储库名称和 SHA 摘要指定签名。
$
notation verify111122223333
.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