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.

Distribuindo uma política OPA com SUSE Security Admission Controller

Você escreveu, construiu e executou sua política Rego. Agora é hora de distribuir a política.

As políticas precisam ser anotadas para que possam ser executadas no policy-server. O policy-server é a parte que executa as políticas, quando está em execução em um cluster Kubernetes.

Anotando a política

Anotar uma política é um processo que enriquece os metadados da política com informações relevantes. Informações como autoria, licença, localização do código-fonte, regras, que descrevem que tipo de recursos esta política entende e avalia.

Para anotar sua política, você precisa escrever um arquivo metadata.yaml:

rules:
- apiGroups: [""]
  apiVersions: ["*"]
  resources: ["*"]
  operations: ["CREATE"]
mutating: false
contextAware: false
executionMode: opa
annotations:
  io.kubewarden.policy.title: no-default-namespace
  io.kubewarden.policy.version: 0.1.0 # should match the OCI tag
  io.kubewarden.policy.description: This policy will reject any resource created inside the default namespace
  io.kubewarden.policy.author: The SUSE Security Admission Controller Authors
  io.kubewarden.policy.url: https://github.com/kubewarden/some-policy
  io.kubewarden.policy.source: https://github.com/kubewarden/some-policy
  io.kubewarden.policy.license: Apache-2.0
  io.kubewarden.policy.usage: |
      This policy is just an example.

      You can write interesting descriptions about the policy here.

Você pode ver vários detalhes:

  • Regras: Quais recursos a política tem como alvo.

  • Mutação: Se esta política realiza mutação. Neste caso, ela está apenas validando.

  • Sensível ao contexto: Se esta política requer contexto do cluster para avaliar a solicitação.

  • Modo de execução: Como esta é uma política Rego, é obrigatório especificar qual modo de execução ela espera, opa ou gatekeeper. Esta política está escrita no estilo opa, retornando um objeto AdmissionReview completo.

  • Anotações: Metadados armazenados na própria política.

Vá em frente e anote sua política:

$ kwctl annotate policy.wasm --metadata-path metadata.yaml --output-path annotated-policy.wasm

Agora você pode inspecionar a política executando kwctl inspect annotated-policy.wasm.

Enviando a política

Agora que a política está anotada, você pode enviá-la para um registro OCI.

$ kwctl push annotated-policy.wasm registry.my-company.com/kubewarden/no-default-namespace:v0.0.1
Policy successfully pushed

Sua política Rego, direcionada ao framework OPA, tem tudo o que precisa para ser implantada em produção, criando um ClusterAdmissionPolicy. Você também pode preparar isso. Primeiro, você precisa puxar a política para o armazenamento local kwctl:

$ kwctl pull registry://registry.my-company.com/kubewarden/no-default-namespace:v0.0.1
pulling policy...

Crie um ClusterAdmissionPolicy a partir disso. Esta operação leva em conta os metadados que possui sobre a política:

$ kwctl manifest registry://registry.my-company.com/kubewarden/no-default-namespace:v0.0.1 --type ClusterAdmissionPolicy
---
apiVersion: policies.kubewarden.io/v1alpha2
kind: ClusterAdmissionPolicy
metadata:
  name: generated-policy
spec:
  module: "registry://registry.my-company.com/kubewarden/no-default-namespace:v0.0.1"
  settings: {}
  rules:
    - apiGroups:
        - ""
      apiVersions:
        - "*"
      resources:
        - "*"
      operations:
        - CREATE
  mutating: false

Agora você pode usar este ClusterAdmissionPolicy como base para direcionar os recursos que deseja, ou implantar no Kubernetes como está.