|
Este documento foi traduzido usando tecnologia de tradução automática de máquina. Sempre trabalhamos para apresentar traduções precisas, mas não oferecemos nenhuma garantia em relação à integridade, precisão ou confiabilidade do conteúdo traduzido. Em caso de qualquer discrepância, a versão original em inglês prevalecerá e constituirá o texto official. |
|
Esta é uma documentação não divulgada para Admission Controller 1.34-dev. |
Formato de configuração de verificação
Introdução
Você pode usar o formato verification-config com:
-
policy-serverpara verificar a proveniência dos módulos de política -
verify-image-signaturespolítica para verificar a proveniência das imagens do cluster
Consulte cadeia de suprimento segura para mais informações.
Formato
A configuração possui 2 chaves raiz:
-
allOf: Você deve satisfazer todas as informações de verificação listadas aqui para verificar as imagens de contêiner como assinadas. -
anyOf: Você deve satisfazer pelo menosanyOf.minimumMatchesde todas as informações de verificação listadas para aceitar uma imagem de contêiner como assinada.
Essas duas chaves raiz aceitam um array de chaves do tipo kind. Uma lista completa de chaves aceitas com base em diferentes casos de uso está abaixo:
-
pubKey: Para assinaturas realizadas com criptografia tradicional de chave pública/privada. -
githubAction: Para assinaturas realizadas com o fluxo de trabalho sem chave do Sigstore dentro do GitHub Actions. Admission Controller verifica essas informações contra a extensão do certificado x509workflow_repositorycriada pelo OpenID Connect do GitHub, e não apenas oissueresubject. Você deve usar estekindse estiver lidando com o GitHub Actions. -
genericIssuer: Para assinaturas realizadas com o fluxo de trabalho sem chave do Sigstore, onde o usuário precisa validar o certificadoissueresubjectpor conta própria. Aceita umsubject, que pode ser:-
equal: O valor passado aqui deve corresponder exatamente aosubjectno certificado de assinatura. -
urlPrefix: O valor passado aqui é post-fixado com/para evitar squatting de digitação, e deve ser um prefixo dosubjectno certificado de assinatura.
-
A chave kind aceita uma chave opcional annotations, com uma lista de pares chave-valor, que deve estar presente na assinatura.
Exemplo
Este é um exemplo de uma configuração para verificar assinaturas usando o fluxo de trabalho do Sigstore:
---
apiVersion: v1
allOf:
- kind: githubAction
owner: kubewarden # mandatory
repo: policy-server # optional
annotations: # optional
env: prod
anyOf: # at least `+anyOf.minimumMatches+` are required to match
minimumMatches: 2 # default is 1
signatures:
- kind: pubKey
owner: alice # optional
key: | # mandatory
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEQiTy5S+2JFvVlhUwWPLziM7iTM2j
byLgh2IjpNQN0Uio/9pZOTP/CsJmXoUNshfpTUHd3OxgHgz/6adtf2nBwQ==
-----END PUBLIC KEY-----
annotations: # optional
env: prod
- kind: genericIssuer
issuer: https://github.com/login/oauth
subject:
equal: alice@example.com
- kind: genericIssuer
issuer: https://token.actions.githubusercontent.com
subject:
equal: https://github.com/bob/app-example/.github/workflows/release.yml@refs/heads/main
annotations: # optional
env: prod
- kind: genericIssuer
issuer: https://token.actions.githubusercontent.com
subject:
urlPrefix: https://github.com/bob # <- it will be post-fixed with `+/+` for security reasons
Referência de configuração de assinatura
Você pode validar os requisitos de assinatura contidos em um arquivo. Expandir para um exemplo:
Um arquivo de requisitos de assinatura
apiVersion: v1
allOf:
- kind: githubAction
owner: kubewarden # mandatory
annotations:
env: prod
anyOf: # at least `+anyOf.minimumMatches+` are required to match
minimumMatches: 2 # default is 1
signatures:
- kind: pubKey
owner: flavio # optional
key: .... # mandatory
annotations: # optional
env: prod
foo: bar
- kind: pubKey
owner: victor # optional
key: .... # mandatory
- kind: genericIssuer
issuer: https://github.com/login/oauth
subject:
equal: alice@example.com
- kind: genericIssuer
issuer: https://token.actions.githubusercontent.com
subject:
equal: https://github.com/flavio/policy-secure-pod-images/.github/workflows/release.yml@refs/heads/main
- kind: genericIssuer
issuer: https://token.actions.githubusercontent.com
subject:
urlPrefix: https://github.com/flavio/
- kind: genericIssuer
issuer: https://token.actions.githubusercontent.com
subject:
urlPrefix: https://github.com/kubewarden # <- it will be post-fixed with `+/+` for security reasons
- kind: githubAction
owner: flavio # mandatory
repo: policy1 # optional
- kind: pubKey
owner: alice # optional
key: .... # mandatory
Validação de assinatura
A configuração anterior contém as duas seções, allOf e anyOf:
-
allOf: Você confia na política apenas se todos os requisitos de assinatura forem válidos. -
anyOf: Você confia na política se o critériominimumMatchesfor válido.
No exemplo, o campo minimumMatches é 2. Portanto, você precisa atender a pelo menos dois dos requisitos de assinatura. O valor padrão para o campo minimumMatches é 1.
Para a validação da assinatura, é necessário atender a todos os requisitos especificados em allOf e ao número mínimo definido em anyOf.
Validação de chave pública
Para verificar se uma política tem a assinatura correta da chave pública, você especifica os dados da chave e o proprietário da chave. Neste exemplo, você define kind como pubKey e a key possui a chave pública. O campo do proprietário é opcional, mas pode ser útil para esclarecer quem possui a chave.
- kind: pubKey
owner: bob # optional
key: |
-----BEGIN PUBLIC KEY-----
MBFKHFDGHKIJH0CAQYIKoZIzj0DAQcDQgAEX0HFTtCfTtPmkx5p1RbDE6HJSGAVD
BVDF6SKFSF87AASUspkQsN3FO4iyWodCy5j3o0CdIJD/KJHDJFHDFIu6sA==
-----END PUBLIC KEY-----
Validação de assinatura sem chave
Uma política assinada em modo sem chave não tem uma chave pública que você possa verificar. Você ainda pode verificar a política com os dados do OpenID Connect (OIDC) usados durante o processo de assinatura. Para isso, é necessário definir a validação da assinatura como genericIssuer.
É possível verificar informações da assinatura:
-
issuer(obrigatório): isso corresponde ao atributoIssuerno certificado gerado pelo Fulcio. Isso mostra o OIDC usado para assinar a política. -
subject: campo usado para corresponder ao atributoSubjectno certificado do Fulcio. O campoSubject(Fulcio) contém o usuário usado para autenticar contra o provedor OIDC. O campo de verificação,subject, pode ter um de dois subcampos:-
equal: oSubject(Fulcio) do certificado deve ser igual ao valor na validação da assinatura; -
urlPrefix: o valor do campoSubject(Fulcio) do certificado deve ser precedido pelo valor definido na validação da assinatura.
-
|
Tanto o |
Por exemplo, essa configuração significa que a política deve ter uma assinatura sem chave da Alice usando o OIDC do GitHub:
- kind: genericIssuer
issuer: https://github.com/login/oauth
subject:
equal: alice@example.com
Essa configuração precisa da política assinada nas ações do GitHub, de um repositório pertencente ao usuário do GitHub flavio:
- kind: genericIssuer
issuer: https://token.actions.githubusercontent.com
subject:
urlPrefix: https://github.com/flavio
Verificação de assinatura das ações do GitHub
O "tipo", githubAction é para validar políticas assinadas nas Ações do GitHub.
Você pode fazer isso com o tipo genericIssuer também. Para simplificar o processo de exigência de assinatura, use dois campos extras para githubAction:
-
owner(obrigatório): ID do GitHub do usuário ou organização a ser confiável. -
repo: O nome do repositório a ser confiável.
Por exemplo, o último trecho, usando genericIssuer, poderia ser reescrito como:
- kind: githubAction
owner: flavio
Validação de anotações de assinatura
Todos os tipos de assinatura podem ter outros campos de validação opcionais, annotations.
Esses campos são dados chave/valor adicionados durante o processo de assinatura.
Com Admission Controller, você pode verificar se a assinatura da política provém de usuários confiáveis e possui anotações específicas.
A próxima validação verifica duas condições para a política:
-
que está assinada com uma chave específica
-
tem uma anotação de ambiente de produção.
- kind: pubKey
key: |
-----BEGIN PUBLIC KEY-----
MBFKHFDGHKIJH0CAQYIKoZIzj0DAQcDQgAEX0HFTtCfTtPmkx5p1RbDE6HJSGAVD
BVDF6SKFSF87AASUspkQsN3FO4iyWodCy5j3o0CdIJD/KJHDJFHDFIu6sA==
-----END PUBLIC KEY-----
annotations:
environment: production
Usando um arquivo de configuração de verificação de assinatura para verificar um artefato OCI da política.
Você pode testar se uma política passa na verificação usando o arquivo de configuração de verificação. Use a flag --verification-config-path do comando kwctl
verify.
$ cat signatures_requirements.yaml
apiVersion: v1
allOf:
- kind: pubKey
key: |
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5Q+cN1Jj2S7N05J4AXnqwP2DyzSg
Mc+raYce2Wthrd30MSgFtoh5ADAkCd/nML2Nx8UD9KBuASRb0gG5jXqgMQ==
-----END PUBLIC KEY-----
$ kwctl verify --verification-config-path signatures_requirements.yaml ghcr.io/kubewarden/policies/user-group-psp:latest
2022-03-29T17:34:37.847169Z INFO kwctl::verify: Policy successfully verified
Este último exemplo testa se uma determinada política veio da organização Admission Controller:
$ cat kubewarden_signatures.yaml
apiVersion: v1
allOf:
- kind: githubAction
owner: kubewarden
$ kwctl verify --verification-config-path kubewarden_signatures.yaml ghcr.io/kubewarden/policies/user-group-psp:latest
2022-03-29T18:07:39.062292Z INFO kwctl::verify: Policy successfully verified