Ce document a été traduit à l'aide d'une technologie de traduction automatique. Bien que nous nous efforcions de fournir des traductions exactes, nous ne fournissons aucune garantie quant à l'exhaustivité, l'exactitude ou la fiabilité du contenu traduit. En cas de divergence, la version originale anglaise prévaut et fait foi.

Il s'agit d'une documentation non publiée pour Admission Controller 1.34-dev.

Rédaction de stratégies brutes

Les stratégies brutes sont des stratégies qui peuvent évaluer des documents JSON arbitraires. Pour plus d’informations sur les stratégies brutes, veuillez vous référer à la page stratégies brutes.

Par exemple :

Les exemples suivants devraient vous sembler familiers si vous avez complété la page validation de ce didacticiel.

N’oubliez pas de marquer la stratégie comme raw, en utilisant le champ policyType dans la configuration metadata.yml. Veuillez vous référer à la spécification metadata pour plus d’informations.

Validation

Vous allez rédiger une stratégie qui accepte une demande dans le format suivant :

{
  "request": {
    "user": "alice",
    "action": "read",
    "resource": "products"
  }
}

Elle valide que seul l’utilisateur admin peut supprimer des ressources.

Commencez par créer une stratégie en utilisant le modèle de stratégie OPA .

Tout d’abord, vous devez modifier le fichier policy.rego pour qu’il ressemble à ceci :

package validation

deny[msg] {
    input.request.action == "delete"
    input.request.user != "admin"
    msg := sprintf("user %v is not allowed to delete resources", [input.request.user])
}

Le module utility/policy.rego nécessite une modification pour supprimer le code spécifique à Kubernetes :

package policy

import data.validation

main = {
    "response": response,
}

# OPA policy responses need the uid field to be set.
# If the request doesn't contain a uid, set it to an empty string.
default uid = ""

uid = input.request.uid

response = {
    "uid": uid,
    "allowed": false,
    "status": {"message": reason},
} {
    reason = concat(", ", validation.deny)
    reason != ""
} else = {
    "uid": uid,
    "allowed": true,
} {
    true
}