第 15 章 ImagePolicy [config.openshift.io/v1]
- 描述
ImagePolicy 包含用于镜像签名验证的命名空间范围的配置
兼容性级别 1:在主发行版本中至少提供 12 个月或 3 个次版本(以更长的时间为准)。
- 类型
-
object
- 必填
-
spec
-
15.1. 规格 复制链接链接已复制到粘贴板!
属性 | 类型 | 描述 |
---|---|---|
|
| APIVersion 定义对象的这个表示法的版本化的 schema。服务器应该将识别的模式转换为最新的内部值,并可拒绝未识别的值。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources |
|
| kind 是一个字符串值,代表此对象所代表的 REST 资源。服务器可以从客户端向其提交请求的端点推断。无法更新。采用驼峰拼写法 (CamelCase)。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds |
| 标准对象元数据。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata | |
|
| spec 包含用于配置的用户可设置值 |
|
| status 包含资源的观察状态。 |
15.1.1. .spec 复制链接链接已复制到粘贴板!
- 描述
- spec 包含用于配置的用户可设置值
- 类型
-
object
- 必填
-
policy
-
scopes
-
属性 | 类型 | 描述 |
---|---|---|
|
| policy 是一个必填字段,其中包含允许验证范围的配置,并且定义如何处理不与验证策略匹配的镜像。 |
|
|
Scope 是一个必填字段,用于定义分配给策略的镜像身份列表。每个项目指的是实现"Docker Registry HTTP API V2"的 registry 中的范围。匹配单个镜像的范围以完全扩展的形式命名 Docker 引用,可以使用标签或摘要。例如,docker.io/library/busybox:latest (not busybox:latest)。更多常规范围是 individual-image 范围的前缀,并指定存储库(通过省略标签或摘要)、存储库命名空间或 registry 主机(仅指定主机名和可能是一个端口号)或通配符表达式,匹配所有子域(不包括端口号)。 |
15.1.2. .spec.policy 复制链接链接已复制到粘贴板!
- 描述
- policy 是一个必填字段,其中包含允许验证范围的配置,并且定义如何处理不与验证策略匹配的镜像。
- 类型
-
object
- 必填
-
rootOfTrust
-
属性 | 类型 | 描述 |
---|---|---|
|
| rootOfTrust 是一个必需字段,它定义了在检索过程中验证镜像签名的信任根。这允许镜像消费者指定 policyType 和相应的策略配置,与策略的生成方式匹配。 |
|
| signedIdentity 是一个可选字段,指定签名对镜像的签名声明的身份。当签名中的镜像身份与原始镜像规格不同时,例如为镜像范围配置镜像 registry 时,镜像 registry 中的签名包含镜像的镜像身份,而不是原始范围。必需的 matchPolicy 字段指定验证过程中用来验证签名中身份和实际镜像身份的方法,默认的 matchPolicy 为 "MatchRepoDigestOrExact"。 |
15.1.3. .spec.policy.rootOfTrust 复制链接链接已复制到粘贴板!
- 描述
- rootOfTrust 是一个必需字段,它定义了在检索过程中验证镜像签名的信任根。这允许镜像消费者指定 policyType 和相应的策略配置,与策略的生成方式匹配。
- 类型
-
object
- 必填
-
policyType
-
属性 | 类型 | 描述 |
---|---|---|
|
| fulcioCAWithRekor 根据 Fulcio 证书和 Rekor 公钥定义信任配置的 root 用户。当 policyType 为 FulcioCAWithRekor 时,需要相应的文档 :https://github.com/sigstore/fulcio 和 https://github.com/sigstore/rekor |
|
| policyType 是一个必填字段,指定用于验证的策略类型。此字段必须与策略的生成方式对应。允许的值是 "PublicKey", "FulcioCAWithRekor", 和 "PKI"。当设置为 "PublicKey" 时,策略依赖于 sigstore publicKey,并可以选择使用 Rekor 验证。当设置为 "FulcioCAWithRekor" 时,该策略基于 Fulcio 认证,并纳入了 Rekor 验证。当设置为 "PKI" 时,该策略基于 Bring Your Own Public Key Infrastructure (BYOPKI)的证书。通过打开 SigstoreImageVerificationPKI 功能门来启用这个值。 |
|
| PublicKey 根据 sigstore 公钥定义信任配置的根。(可选)为 Rekor 验证包括 Rekor 公钥。当 policyType 是 PublicKey 时,需要 publicKey,否则禁止。 |
15.1.4. .spec.policy.rootOfTrust.fulcioCAWithRekor 复制链接链接已复制到粘贴板!
- 描述
- fulcioCAWithRekor 根据 Fulcio 证书和 Rekor 公钥定义信任配置的 root 用户。当 policyType 为 FulcioCAWithRekor 时,需要相应的文档 :https://github.com/sigstore/fulcio 和 https://github.com/sigstore/rekor
- 类型
-
object
- 必填
-
fulcioCAData
-
fulcioSubject
-
rekorKeyData
-
属性 | 类型 | 描述 |
---|---|---|
|
| fulcioCAData 是一个必填字段,包含 PEM 格式的内联 base64 编码数据。fulcioCAData 必须最多为 8192 个字符。 |
|
| fulcioSubject 是一个必填字段,指定 OIDC 签发者和 Fulcio 身份验证配置的电子邮件。 |
|
| rekorKeyData 是一个必需字段,其中包含来自 Rekor 公钥的 PEM 格式的内联 base64 编码数据。rekorKeyData 必须最多为 8192 个字符。 |
- 描述
- fulcioSubject 是一个必填字段,指定 OIDC 签发者和 Fulcio 身份验证配置的电子邮件。
- 类型
-
object
- 必填
-
oidcIssuer
-
signedEmail
-
属性 | 类型 | 描述 |
---|---|---|
|
| oidcIssuer 是一个必需的文件,其中包含预期的 OIDC 签发者。oidcIssuer 必须是有效的 URL,长度最多为 2048 个字符。它将验证 Fulcio-issued 证书是否包含指向此 OIDC 签发者 URL 的(Fulcio-defined)证书扩展。当 Fulcio 发布证书时,它根据客户端提供的 ID 令牌中的 URL 包括值。示例:"https://expected.OIDC.issuer/" |
|
| signedEmail 是必填字段,包含发出 Fulcio 证书的电子邮件地址。signedEmail 必须是有效的电子邮件地址,长度最多为 320 个字符。示例:"expected-signing-user@example.com" |
15.1.6. .spec.policy.rootOfTrust.publicKey 复制链接链接已复制到粘贴板!
- 描述
- PublicKey 根据 sigstore 公钥定义信任配置的根。(可选)为 Rekor 验证包括 Rekor 公钥。当 policyType 是 PublicKey 时,需要 publicKey,否则禁止。
- 类型
-
object
- 必填
-
keyData
-
属性 | 类型 | 描述 |
---|---|---|
|
| keyData 是必填字段,包含 PEM 格式公钥的内联 base64 编码数据。keyData 必须最多为 8192 个字符。 |
|
| rekorKeyData 是一个可选字段,包含来自 Rekor 公钥的 PEM 格式的内联 base64 编码数据。rekorKeyData 必须最多为 8192 个字符。 |
15.1.7. .spec.policy.signedIdentity 复制链接链接已复制到粘贴板!
- 描述
- signedIdentity 是一个可选字段,指定签名对镜像的签名声明的身份。当签名中的镜像身份与原始镜像规格不同时,例如为镜像范围配置镜像 registry 时,镜像 registry 中的签名包含镜像的镜像身份,而不是原始范围。必需的 matchPolicy 字段指定验证过程中用来验证签名中身份和实际镜像身份的方法,默认的 matchPolicy 为 "MatchRepoDigestOrExact"。
- 类型
-
object
- 必填
-
matchPolicy
-
属性 | 类型 | 描述 |
---|---|---|
|
| exactRepository 指定存储库,其必须与签名中的身份完全匹配。如果 matchPolicy 设为 "ExactRepository",则需要 exactRepository。它用于验证签名是否声明与此确切存储库匹配的身份,而不是原始镜像身份。 |
|
| matchPolicy 是一个必需的 filed 指定匹配策略,用于根据镜像范围验证签名中的镜像身份。允许的值是 "MatchRepoDigestOrExact", "MatchRepository", "ExactRepository", "RemapIdentity"。如果省略时,默认值为 "MatchRepoDigestOrExact"。当设置为 "MatchRepoDigestOrExact" 时,如果镜像身份被摘要引用,签名中的身份必须与镜像身份位于同一个存储库中。否则,签名中的身份必须与镜像身份相同。当设置为 "MatchRepository" 时,签名中的身份必须与镜像身份位于同一个存储库中。当设置为 "ExactRepository" 时,必须指定 exactRepository。签名中的身份必须与 "repository" 指定的特定身份位于同一个存储库中。当设置为 "RemapIdentity" 时,必须指定 remapIdentity。签名必须与重新映射镜像身份相同。如果镜像身份与指定的 remapPrefix 匹配,则重新映射镜像身份是通过将 "prefix" 替换为指定的 "signedPrefix"。 |
|
| remapIdentity 指定验证镜像身份的前缀重新映射规则。如果 matchPolicy 设为 "RemapIdentity",则需要重新映射Identity。它用于验证签名是否声明了与原始镜像不同的 registry/存储库前缀。 |
15.1.8. .spec.policy.signedIdentity.exactRepository 复制链接链接已复制到粘贴板!
- 描述
- exactRepository 指定存储库,其必须与签名中的身份完全匹配。如果 matchPolicy 设为 "ExactRepository",则需要 exactRepository。它用于验证签名是否声明与此确切存储库匹配的身份,而不是原始镜像身份。
- 类型
-
object
- 必填
-
软件仓库
-
属性 | 类型 | 描述 |
---|---|---|
|
| Repository 是要匹配的镜像身份的引用。如果 matchPolicy 被设置为 "ExactRepository",则需要 repository。该值应该是存储库名称(通过忽略标签或摘要)来实现 "Docker Registry HTTP API V2"。例如,docker.io/library/busybox |
15.1.9. .spec.policy.signedIdentity.remapIdentity 复制链接链接已复制到粘贴板!
- 描述
- remapIdentity 指定验证镜像身份的前缀重新映射规则。如果 matchPolicy 设为 "RemapIdentity",则需要重新映射Identity。它用于验证签名是否声明了与原始镜像不同的 registry/存储库前缀。
- 类型
-
object
- 必填
-
prefix
-
signedPrefix
-
属性 | 类型 | 描述 |
---|---|---|
|
| 如果 matchPolicy 设置为 "RemapIdentity",则需要 prefix。prefix 是要匹配的镜像身份的前缀。如果镜像身份与指定的前缀匹配,则该前缀将被指定的"signedPrefix"替代(否则会原样使用,且不会重新映射)。这在验证用于保留供应商存储库结构的其他存储库命名空间的签名时很有用。prefix 和 signedPrefix 值可以是 host[:port] 值(完全匹配相同的 host[:port]、字符串)、存储库命名空间或存储库(例如,它们不得包含标签/摘要),并且与完整扩展表单的前缀匹配。例如,docker.io/library/busybox (not busybox)指定该单一存储库,或 docker.io/library (不是空字符串)来指定 docker.io/library/busybox 的父命名空间。 |
|
| 如果 matchPolicy 设置为 "RemapIdentity",则需要 signedPrefix。signedPrefix 是要在签名中匹配的镜像身份的前缀。格式与"前缀"相同。值可以是 host[:port] 值(与相同的 host[:port]、字符串)、存储库命名空间或存储库(例如,不得包含标签/摘要)匹配,并以完全扩展的形式作为前缀匹配。例如,docker.io/library/busybox (not busybox)指定该单一存储库,或 docker.io/library (不是空字符串)来指定 docker.io/library/busybox 的父命名空间。 |
15.1.10. .status 复制链接链接已复制到粘贴板!
- 描述
- status 包含资源的观察状态。
- 类型
-
对象
属性 | 类型 | 描述 |
---|---|---|
|
| 条件提供有关此 API 资源状态的详细信息。条件类型"Pending"表示客户资源包含无法生效的策略。它可以被全局策略覆盖,或者镜像范围无效。 |
|
| condition 包含此 API 资源当前状态的一个方面的详细信息。 |
15.1.11. .status.conditions 复制链接链接已复制到粘贴板!
- 描述
- 条件提供有关此 API 资源状态的详细信息。条件类型"Pending"表示客户资源包含无法生效的策略。它可以被全局策略覆盖,或者镜像范围无效。
- 类型
-
array
15.1.12. .status.conditions[] 复制链接链接已复制到粘贴板!
- 描述
- condition 包含此 API 资源当前状态的一个方面的详细信息。
- 类型
-
对象
- 必填
-
lastTransitionTime
-
message
-
reason
-
status
-
type
-
属性 | 类型 | 描述 |
---|---|---|
|
| lastTransitionTime 是条件从一个状态转换到另一个状态最后一次的时间。这应该是底层条件变化的时间。如果为未知,则使用 API 字段更改的时间是可以接受的。 |
|
| Message 是人类可读的消息,指示有关转换的详细信息。这可能是一个空字符串。 |
|
| observedGeneration 代表 .metadata.generation,这是条件设置所基于的条件。例如,如果 .metadata.generation 目前为 12,但 .status.conditions[x].observedGeneration 是 9,则代表条件与实例的当前状态已不匹配。 |
|
| reason 包含程序标识符,指示条件最后一次转换的原因。特定条件类型的制作者可能会定义预期的值和此字段的含义,以及这些值是否被视为有保证的 API。该值应该是 CamelCase 字符串。此字段可能不是空的。 |
|
| 条件的状态,True, False, Unknown 之一。 |
|
| CamelCase 或 foo.example.com/CamelCase 中的条件类型。 |