|
本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。 |
|
这是尚未发布的文档。 Admission Controller 1.34-dev. |
验证 Rancher 应用程序集合镜像
本节介绍如何利用 SUSE Security Admission Controller 验证来自 Rancher 应用程序集合 的应用程序和镜像。
您通过部署 验证镜像签名 策略并配置 PolicyServers 从应用程序集合中拉取镜像的签名层来执行镜像验证。
|
您需要一个访问令牌或服务帐户身份验证才能访问应用程序集合。 |
对 Rancher 应用程序集合进行身份验证
按照 应用程序集合文档 创建访问令牌,并配置集群以使用 Docker 配置密钥从应用程序集合注册表中拉取。
$ kubectl create secret docker-registry application-collection \
--docker-server=dp.apps.rancher.io \
--docker-username=<mymail> \
--docker-password=<mytoken>
为 PolicyServer 创建密钥,以便它们可以从 Rancher 应用程序集合中拉取。
正在使用的 PolicyServer 需要配置,以便它可以拉取包含签名的镜像层。
按照 私有注册表如何做 为 PolicyServers 创建 Docker 配置密钥 在 PolicyServer 名称空间中。您通过实例化一个与之前 application-collection 内容相同的密钥来完成此操作。
对于在 default 名称空间下使用 kubewarden-defaults Helm 图表安装的 PolicyServer kubewarden,它将是:
$ kubectl create secret docker-registry application-collection-kw -n kubewarden \
--docker-server=dp.apps.rancher.io \
--docker-username=<mymail> \
--docker-password=<mytoken>
配置 PolicyServers 使用新密钥
如果使用来自 default Helm 图表的 PolicyServer kubewarden-defaults,请使用镜像拉取密钥 application-collection-kw 进行配置。这在同一名称空间中完成,通过为图表设置以下值来实现:
$ helm upgrade -i --wait --namespace kubewarden \
--create-namespace kubewarden-defaults kubewarden/kubewarden-defaults \
--reuse-values \
--set policyServer.imagePullSecret=application-collection-kw
如果您正在使用其他PolicyServers,请设置它们的spec.imagePullSecret。Secret 必须与 PolicyServer 在同一名称空间中。
应用策略
您可以通过使用https://artifacthub.io/packages/kubewarden/verify-image-signatures/verify-image-signatures[验证镜像签名]策略来应用ClusterAdmissionPolicy。此策略检查来自`dp.apps.rancher.io/containers/*`的所有容器镜像。该策略支持OCI注册表和工件。
您可以使用https://docs.apps.rancher.io/howto-guides/verify-signatures-with-kubewarden/[公钥]配置策略设置,该公钥来自应用程序集合(在撰写时)中的`pubKeys`数组。
$ kubectl apply -f - <<EOF
apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicy
metadata:
annotations:
artifacthub/pkg: verify-image-signatures/verify-image-signatures/0.2.9
name: check-appcollection-signatures
spec:
backgroundAudit: true
mode: protect
module: ghcr.io/kubewarden/policies/verify-image-signatures:v0.2.9
mutating: true
policyServer: default
# On first policy call, the policy-server downloads the image layers to
# verify the signatures. Later on it's cached. It may be useful to increase
# this timeout:
timeoutSeconds: 30 # default 10 seconds.
rules:
- apiGroups: [""]
apiVersions: ["v1"]
resources: ["pods"]
operations: ["CREATE", "UPDATE"]
- apiGroups: [""]
apiVersions: ["v1"]
resources: ["replicationcontrollers"]
operations: ["CREATE", "UPDATE"]
- apiGroups: ["apps"]
apiVersions: ["v1"]
resources: ["deployments", "replicasets", "statefulsets", "daemonsets"]
operations: ["CREATE", "UPDATE"]
- apiGroups: ["batch"]
apiVersions: ["v1"]
resources: ["jobs", "cronjobs"]
operations: ["CREATE", "UPDATE"]
settings:
modifyImagesWithDigest: true
rule: PublicKey
signatures:
- image: dp.apps.rancher.io/containers/*
pubKeys:
# Note: this array constitutes an AND in validation, not an OR.
- |-
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA02FtEt5gBywiyxbmkVsb
CujcBg5lur0kpEbfDk10gCcs9shVEqEO3ZsOXHursgoaDAWqdPtsYhsgczGeJz9w
Aw+r6BuRV8YOkE37A8s/7IOQUW0tlqtnt11OKhIiZ9+e5l3ed2H1ymKQO3dgreSy
rShqYdA3hrItswyp41ApF6zhjSPlR6lAmq3X4wMYLAPptmzfxigTnR4hxB5UNPhs
i2qA4vLrUM/i+NohECuLr1EAymvupH26HLEdM+eZnlQn+WbhIP5Grc4ba7XrBv7K
kywgTC7CxkiJZR0mUcUD2wTX/Je8Ewj6oPSalx09e2jtzvmU5Kr9XUyMF7Zsj5CA
IwIDAQAB
-----END PUBLIC KEY-----
EOF
$ kubectl apply -f mypolicy.yml
$ kubectl get admissionpolicies -n default # wait for status active
要测试它,请部署一个带有来自应用程序集合的签名镜像的Pod:
$ kubectl run nginx --image [dp.apps.rancher.io/containers/nginx:1.24.0](http://dp.apps.rancher.io/containers/nginx:1.24.0) --overrides='{"spec": {"imagePullSecrets":[{"name": "application-collection"}]}}'
pod/nginx created
您可以检查您的 policy-server Pod 的日志,以查看验证是否已进行。