Observação
Antes de continuar, verifique se você habilitou a procedência do build para imagens de contêiner, incluindo a definição do atributo push-to-registry
na ação attest-build-provenance
, conforme documentado em Gerando a procedência do build para imagens de contêiner. Isso é necessário para que o Controlador de Política verifique o atestado.
Introdução ao controlador de admissão do Kubernetes
Para configurar um controlador de admissão para aplicar atestados de artefato do GitHub, você precisa:
- Implantar o Sigstore Policy Controller.
- Adicionar o GitHub
TrustRoot
e umaClusterImagePolicy
ao cluster. - Habilitar a política em seu namespace.
Implantar o Sigstore Policy Controller
Nós empacotamos o Sigstore Policy Controller como um gráfico Helm distribuído do GitHub. Antes de começar, verifique se de que tem os seguintes pré-requisitos:
Primeiro, instale o gráfico Helm que implanta o Sigstore Policy Controller:
helm upgrade policy-controller --install --atomic \ --create-namespace --namespace artifact-attestations \ oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller \ --version v0.12.0-github12
helm upgrade policy-controller --install --atomic \
--create-namespace --namespace artifact-attestations \
oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller \
--version v0.12.0-github12
Isso instala o Controlador de Política no namespace artifact-attestations
. Neste ponto, nenhuma política foi configurada e não imporá atestados.
Adicione o GitHub TrustRoot
e um ClusterImagePolicy
Depois que o controlador de política tiver sido implantado, você precisará adicionar o GitHub TrustRoot
e um ClusterImagePolicy
ao cluster. Use o gráfico Helm que fornecemos para fazer isso. Certifique-se de substituir MY-ORGANIZATION
pelo nome da sua organização do GitHub (por exemplo, github
ou octocat-inc
).
helm upgrade trust-policies --install --atomic \ --namespace artifact-attestations \ oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies \ --version v0.6.2 \ --set policy.enabled=true \ --set policy.organization=MY-ORGANIZATION
helm upgrade trust-policies --install --atomic \
--namespace artifact-attestations \
oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies \
--version v0.6.2 \
--set policy.enabled=true \
--set policy.organization=MY-ORGANIZATION
Agora você instalou a raiz de confiança do GitHub e uma política de atestado de artefato em seu cluster. Essa política rejeitará artefatos que não tenham se originado de sua organização do GitHub.
Habilitar a política em seu namespace
Aviso
Essa política não será aplicada até que você especifique a quais namespaces ela deve se aplicar.
Cada namespace em seu cluster pode impor políticas de forma independente. Para habilitar a imposição em um namespace, você pode adicionar o seguinte rótulo ao namespace:
metadata:
labels:
policy.sigstore.dev/include: "true"
Depois que o rótulo for adicionado, a política de atestado de artefato do GitHub será imposta no namespace.
Como alternativa, você pode executar:
kubectl label namespace MY-NAMESPACE policy.sigstore.dev/include=true
kubectl label namespace MY-NAMESPACE policy.sigstore.dev/include=true
Imagens correspondentes
Por padrão, a política instalada com o gráfico do Helm trust-policies
verificará os atestados de todas as imagens antes de admiti-las no cluster. Se você pretende impor atestados apenas para um subconjunto de imagens, pode usar os valores do Helm policy.images
e policy.exemptImages
para especificar uma lista de imagens para correspondência. Esses valores podem ser definidos como uma lista de padrões glob que correspondem aos nomes das imagens. A sintaxe de recurso de curinga usa a semântica do caminho de arquivo Go, com a adição de **
para corresponder a qualquer sequência de caracteres, incluindo barras.
Por exemplo, para impor atestados para imagens que correspondem ao padrão ghcr.io/MY-ORGANIZATION/*
e admitem busybox
sem um atestado válido, é possível executar:
helm upgrade trust-policies --install --atomic \ --namespace artifact-attestations \ oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies \ --version v0.6.2 \ --set policy.enabled=true \ --set policy.organization=MY-ORGANIZATION \ --set-json 'policy.exemptImages=["index.docker.io/library/busybox**"]' \ --set-json 'policy.images=["ghcr.io/MY-ORGANIZATION/**"]'
helm upgrade trust-policies --install --atomic \
--namespace artifact-attestations \
oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies \
--version v0.6.2 \
--set policy.enabled=true \
--set policy.organization=MY-ORGANIZATION \
--set-json 'policy.exemptImages=["index.docker.io/library/busybox**"]' \
--set-json 'policy.images=["ghcr.io/MY-ORGANIZATION/**"]'
Todos os padrões devem usar o nome totalmente qualificado, mesmo que as imagens sejam originadas do Docker Hub. Neste exemplo, se quisermos isentar a imagem busybox
, devemos fornecer o nome completo, incluindo o domínio e o glob de estrela dupla para corresponder a todas as versões da imagem: index.docker.io/library/busybox**
.
Observe que qualquer imagem que você pretende admitir deve ter um padrão glob correspondente na lista policy.images
. Se uma imagem não corresponder a padrão, ela será rejeitada. Além disso, se uma imagem corresponder a ambos policy.images
e policy.exemptImages
, ela será rejeitada.
Uso avançado
Para ver o conjunto completo de opções que você pode configurar com o gráfico Helm, você pode executar um dos seguintes comandos. Para opções de controlador de diretiva:
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller --version v0.12.0-github12
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller --version v0.12.0-github12
Para opções de política de confiança:
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies --version v0.6.2
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies --version v0.6.2
Para obter mais informações sobre o Sigstore Policy Controller, consulte a documentação do Sigstore Policy Controller.