本仓库包含 Notation 的 阿里云KMS凭据管家 签名插件的实现。用户可以使用阿里云凭据管家中的私钥和证书,基于Notation社区的插件规范对指定镜像签名。
注意 Notary的项目文档可参考这里. 你也可以在Notary项目的 README 文件中了解更多关于Notary项目的信息。
本文档介绍了如何使用 Alibaba Cloud Secret Manager Notation 插件对 OCI 构件进行签名和验证。
Capability | Compatibility |
---|---|
keySpec | RSA-2048 , RSA-3072 , EC-256 |
hashAlgorithm | SHA-256 |
signingAlgorithm | RSASSA-PSS-SHA-256 |
pluginCapability | SIGNATURE_GENERATOR.RAW , SIGNATURE_VERIFIER.TRUSTED_IDENTITY , SIGNATURE_VERIFIER.REVOCATION_CHECK |
signingScheme | notary.x509 |
下面总结了配置 notation-alibabacloud-secret-manager 插件以及容器镜像签名和验签的步骤。
-
安装Notation CLI。版本 v1.1.1 已通过测试。请注意,“make install ”会根据 MacOS 环境创建插件目录结构。请根据您的操作系统更新 Makefile。然后,它会根据符号插件目录结构规范将插件复制到适当的位置。
-
本插件使用 KMS Instance SDK,您需要满足以下先决条件并自定义环境变量:
环境变量 | 描述 |
---|---|
ALIBABA_CLOUD_ACCESS_KEY_ID | 阿里云账户Access Key ID |
ALIBABA_CLOUD_ACCESS_KEY_SECRET | 阿里云账号Access Secret Key |
ALIBABA_CLOUD_KMS_INSTANCE_ENDPOINT | 指定KMS专属实例的VPC Endpoint,比如:kst-hzxxxxxxxxxx.cryptoservice.kms.aliyuncs.com |
ALIBABA_CLOUD_KMS_CLIENTKEY_FILEPATH | 访问指定KMS专属实例应用接入点(AAP)的ClientKey凭据文件对应的本地文件路径 |
ALIBABA_CLOUD_KMS_PASSWORD | 指定KMS专属实例应用接入点(AAP)的密钥 |
ALIBABA_CLOUD_KMS_CA_FILEPATH | 指定KMS专属实例CA证书对应的本地文件路径 |
注意:notation-alibabacloud-secret-manager插件支持多种Credential配置方式。更多的配置方式请参考credentials
您可以通过 Releases 页面下载最新版的命令行工具,或选择基于源码构建和安装
git clone
cd notation-alibabacloud-secret-manager
make build
在下载或构建完成对应的plugin二进制文件后,可以在目标环境上通过执行如下的notation CLI指令完成安装:
notation plugin add --file ./notation-alibabacloud.secretmanager.plugin
--file参数指向plugin二进制文件所在路径
用户可以在控制台启用并管理KMS实例,请关注启用KMS实例的前提条件
插件支持使用KMS实例创建并管理的或使用自签并导入KMS实例这两种类型的密钥进行签名:
用户可以在KMS服务控制台通过以下步骤创建密钥:
-
登录密钥管理服务控制台,在顶部菜单栏选择地域后,在左侧导航栏单击资源 > 密钥管理。
-
在密钥管理页面,单击用户主密钥页签,实例ID选择软件密钥管理实例,单击创建密钥。
-
在创建密钥面板,完成配置项设置,注意这里的密钥规格需要选择非对称密钥,密钥用途选择SIGN/VERIFY,密钥规则选择上文插件规范兼容性里支持的密钥规格(
RSA-2048
,RSA-3072
,EC-256
),然后单击确定。
用户可以使用自签密钥并将密钥材料导入KMS实例管理。作为快速入门,本教程使用 openssl 生成私钥和证书
用户可以使用如下命令基于步骤3中的私钥 TakPrivPkcs1.pem 和openssl.cnf 中的 server_cert 配置获取用于验签的x509 证书,也可以使用插件在签名时自动导出证书
openssl req -x509 -new -nodes -key TakPrivPkcs1.pem -sha256 -days 3650 -out sign.crt -config openssl.cnf -extensions server_cert
到此我们已经完成了所有配置,让我们使用Notation CLI开始制品签名。如果您还没有下载过notation CLI工具,可以从这里获取。
notation sign --id <keyId> --plugin alibabacloud.secretmanager.plugin <myRegistry>/<myRepo>@<digest> --plugin-config output_cert_dir=<dirPath>
参数 | 说明 |
---|---|
id | 指定的阿里云KMS实例ID |
plugin-config | 插件自定义参数,支持如下配置: output_cert_dir:签名过程中可以使用该参数基于指定的KMS密钥签发对应的x509验签证书,并以文件形式输出到参数指定文件目录下 ca_certs:使用自签并导入KMS实例的密钥加签时,如果您同时使用密钥签发了X509证书,可以使用该参数指定自签证书对应的文件路径 |
-
配置trust store:
./notation cert add -t ca -s ack.notation "{path-to-cert}/signer.crt"
其中
signer.crt
是之前签名时插件输出的证书或用户指定的自签证书 -
配置trust policy:
cat <<EOF > ./trustpolicy.json { "version": "1.0", "trustPolicies": [ { "name": "acr-hangzhou-images", "registryScopes": [ "<myRegistry>/<myRepo>" ], "signatureVerification": { "level" : "strict" }, "trustStores": [ "ca:ack.notation" ], "trustedIdentities": [ "*" ] } ] } EOF
./notation policy import ./trustpolicy.json
-
制品验签:
./notation verify <myRegistry>/<myRepo>@<digest> -v