3.12. 完整性 shield 保护(技术预览)
完整性屏蔽是一种工具,它有助于为创建或更新资源的任何请求执行签名验证。完整性截图支持开放策略代理(OPA)和 Gatekeeper,验证请求是否有签名,并根据定义的约束阻止任何未授权的请求。
请参阅以下完整性盾牌功能:
- 仅支持部署授权的 Kubernetes 清单。
- 在资源配置中支持零偏移,除非资源已添加到 allowlist 中。
- 在集群上执行所有完整性验证,如强制准入控制器。
- 如果集群中部署了未经授权的 Kubernetes 资源,则持续监控资源以报告。
-
X509、GPG 和 Sigstore 签名支持为 Kubernetes 清单 YAML 文件签名。Kubernetes 完整性 shield 使用
k8s-manifest-sigstore
支持 Sigstore 签名。
3.12.1. 完整性 shield 架构
完整性屏蔽由两个主要组件组成,即 API 和 Observer。完整性 shield operator 支持在集群上安装和管理完整的 shield 组件。查看以下组件描述:
-
完整性 shield API 从 OPA 或 gatekeeper 接收 Kubernetes 资源,验证准入请求中包含的资源,并将验证结果发送到 OPA 或 gatekeeper。shield API 在内部使用
k8s-manifest-sigstore
的verify-resource
功能来验证 Kubernetes 清单 YAML 文件。完整性 shield API 根据ManifestingIntegrityConstraint
(是基于 OPA 或 gatekeeper 的约束框架的自定义资源)验证资源。 -
完整性 shield Observer 根据
ManifestingIntegrityConstraint
资源持续验证集群中的 Kubernetes 资源,并将结果导出到名为ManifestIntegrityState
的资源。完整性 shield Observer 还使用k8s-manifest-sigstore
来验证签名。
3.12.2. 支持的版本
以下产品版本支持完整性 shield 保护:
如需了解更多详细信息,请参阅 启用完整性 shield 保护(技术预览)。
3.12.3. 启用完整性 shield 保护(技术预览)
在 Red Hat Advanced Cluster Management for Kubernetes 集群中启用完整性 shield 保护 Kubernetes 资源的完整性。
3.12.3.1. 先决条件
在 Red Hat Advanced Cluster Management 受管集群中启用完整性 shield 保护需要以下先决条件:
-
安装具有一个或多个受管集群的 Red Hat Advanced Cluster Management hub 集群,以及集群管理员对集群的访问权限,以使用
oc
或kubectl
命令。 安装完整性 shield.在安装完整性 shield 前,您必须在集群中安装 Open Policy Agent 或 gatekeeper。完成以下步骤以安装完整性 shield operator:
运行以下命令,在命名空间中安装完整性 shield operator 以获得完整性 shield:
kubectl create -f https://raw.githubusercontent.com/open-cluster-management/integrity-shield/master/integrity-shield-operator/deploy/integrity-shield-operator-latest.yaml
使用以下命令安装完整性 shield 自定义资源:
kubectl create -f https://raw.githubusercontent.com/open-cluster-management/integrity-shield/master/integrity-shield-operator/config/samples/apis_v1_integrityshield.yaml -n integrity-shield-operator-system
完整性屏蔽需要一对密钥来签名和验证集群中需要保护的资源签名。设置签名和验证密钥对:
使用以下命令生成一个新的 GPG 密钥:
gpg --full-generate-key
使用以下命令将您的新 GPG 公钥导出到文件中:
gpg --export signer@enterprise.com > /tmp/pubring.gpg
-
安装
yq
以运行用于签署 Red Hat Advanced Cluster Management 策略的脚本。 -
启用完整性 shield 保护和签名 Red Hat Advanced Cluster Management 包括从
integrity-shield
仓库检索和提交源。您必须安装 Git。
3.12.3.2. 启用完整性 shield 保护
通过完成以下步骤,在 Red Hat Advanced Cluster Management 受管集群中启用完整性 shield:
为完整性 shield 在 hub 集群上创建一个命名空间。运行以下命令:
oc create ns your-integrity-shield-ns
在 Red Hat Advanced Cluster Management 受管集群中部署验证密钥。提醒,您必须创建签名和验证密钥。在 hub 集群上运行
acm-verification-key-setup.sh
以设置验证密钥。运行以下命令:curl -s https://raw.githubusercontent.com/stolostron/integrity-shield/master/scripts/ACM/acm-verification-key-setup.sh | bash -s \ --namespace integrity-shield-operator-system \ --secret keyring-secret \ --path /tmp/pubring.gpg \ --label environment=dev | oc apply -f -
要删除验证密钥,请运行以下命令:
curl -s https://raw.githubusercontent.com/stolostron/integrity-shield/master/scripts/ACM/acm-verification-key-setup.sh | bash -s - \ --namespace integrity-shield-operator-system \ --secret keyring-secret \ --path /tmp/pubring.gpg \ --label environment=dev | oc delete -f -
在 hub 集群中创建一个名为
policy-integrity-shield
的 Red Hat Advanced Cluster Management 策略。-
从
policy-collection
存储库获取policy-integrity-shield
策略。确定 fork 了 存储库。 -
通过更新
remediationAction
参数值(从inform
到enforce
),将命名空间配置为在 Red Hat Advanced Cluster Management 受管集群上部署完整性 shield。 -
通过更新
signerConfig
部分,为签名者和验证密钥配置电子邮件。 -
配置
PlacementRule
决定了 Red Hat Advanced Cluster Management 受管集群应该部署到哪些集群。 运行以下命令,签署
policy-integrity-shield.yaml
:curl -s https://raw.githubusercontent.com/stolostron/integrity-shield/master/scripts/gpg-annotation-sign.sh | bash -s \ signer@enterprise.com \ policy-integrity-shield.yaml
注: 每当您更改策略并应用到其他集群时,您必须创建新的签名。否则,更改会被阻止且不应用。
-
从
如需示例,请参阅 policy-integrity-shield
策略。