|
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. |
Stratégies brutes
À partir de v1.9.0, SUSE Security Admission Controller prend en charge la possibilité d’écrire et d’exécuter des stratégies en dehors d’un cluster Kubernetes, en tant que moteur d’évaluation de stratégies générique.
Le serveur de stratégies expose le point de terminaison /validate_raw qui peut être utilisé pour valider des documents JSON arbitraires contre une stratégie Admission Controller.
Pour ce guide, nous utiliserons les stratégies brutes suivantes :
|
Veuillez vous assurer que l’auteur de la stratégie a marqué la stratégie comme
|
Exécution du serveur de stratégies en dehors de Kubernetes
Le serveur de stratégies peut être exécuté en dehors de Kubernetes en tant que conteneur autonome.
Tout d’abord, créez un fichier policies.yml avec le contenu suivant :
raw-validation:
module: ghcr.io/kubewarden/tests/raw-validation-policy:v0.1.0
settings:
validUsers:
- alice
- bob
validActions:
- read
- write
validResources:
- orders
- products
raw-mutation:
module: ghcr.io/kubewarden/tests/raw-mutation-policy:v0.1.0
allowedToMutate: true
settings:
forbiddenResources:
- privateResource
- secretResource
defaultResource: publicResource
Pour démarrer le serveur de stratégies :
# Create a docker volume to store the policies
docker volume create --driver local \
--opt type=tmpfs \
--opt device=tmpfs \
--opt o=ui=65533 \
policy-store
# Start the policy server
docker run --rm -it \
-p 3000:3000 \
-v $(pwd)/policies.yml:/policies.yml \
-v policy-store:/registry \
ghcr.io/kubewarden/policy-server:1.9.0 \
--ignore-kubernetes-connection-failure=true
le drapeau --ignore-kubernetes-connection-failure=true est requis pour démarrer le serveur de stratégies sans Kubernetes.
Cependant, il est possible de démarrer le serveur de stratégies avec/dans Kubernetes et d’utiliser le point de terminaison de validation brute.
Les stratégies brutes peuvent accéder aux capabilities sensibles au contexte comme les stratégies standard.
|
Exécution d’un serveur de stratégies à l’intérieur de Kubernetes sans le contrôleur Admission Controller
Il n’est pas possible d’utiliser une instance de serveur de stratégies gérée par le contrôleur Admission Controller pour héberger des stratégies brutes. Le contrôleur ne permettra pas à l’utilisateur de modifier le ConfigMap du serveur de stratégies pour ajouter une stratégie brute, car il essaiera de le réconcilier en annulant les modifications. À cause de cela, un serveur de stratégies dédié doit être démarré.
Créez un fichier policy-server.yaml avec le contenu suivant :
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: policy-server-deployment
spec:
replicas: 1
selector:
matchLabels:
app: policy-server
template:
metadata:
labels:
app: policy-server
spec:
containers:
- name: policy-server
image: ghcr.io/kubewarden/policy-server:v1.9.0
ports:
- containerPort: 3000
volumeMounts:
- name: policy-store
mountPath: /registry
- name: policies-config
mountPath: /policies.yml
subPath: policies.yml
volumes:
- name: policy-store
emptyDir: {}
- name: policies-config
configMap:
name: policies-configmap
---
apiVersion: v1
kind: Service
metadata:
name: policy-server-service
spec:
selector:
app: policy-server
ports:
- protocol: TCP
port: 3000
targetPort: 3000
---
apiVersion: v1
kind: ConfigMap
metadata:
name: policies-configmap
data:
policies.yml: |
raw-validation:
module: ghcr.io/kubewarden/tests/raw-validation-policy:v0.1.0
settings:
validUsers:
- alice
- bob
validActions:
- read
- write
validResources:
- orders
- products
raw-mutation:
module: ghcr.io/kubewarden/tests/raw-mutation-policy:v0.1.0
allowedToMutate: true
settings:
forbiddenResources:
- privateResource
- secretResource
defaultResource: publicResource
Appliquez la configuration :
kubectl apply -f policy-server.yaml
|
L’instance du serveur de stratégies déployée aura accès aux ressources Kubernetes qui pourraient être utilisées par des stratégies contextuelles. Le niveau d’accès aux ressources Kubernetes est déterminé par le compte de service utilisé pour exécuter la charge de travail du serveur de stratégies. Dans l’exemple précédent, aucun compte de service n’est défini dans la spécification de déploiement ; par conséquent, le compte de service |
Utilisation du point de terminaison validate_raw
Validation
Le point de validation brute est exposé à /validate_raw et accepte les requêtes POST.
Puisque nous avons déployé un service, nous pouvons configurer un port-forward pour y accéder avec kubectl port-forward service/policy-server-service 3000:3000 -n default.
Essayons de valider un document JSON contre la stratégie raw-validation :
curl -X POST \
http://localhost:3000/validate_raw/raw-validation \
-H 'Content-Type: application/json' \
-d '{
"request": {
"user": "alice",
"action": "read",
"resource": "customers"
}
}'
La requête ne sera pas acceptée, car l’accès à la ressource customers n’a pas été accordé à alice :
{
"response": {
"uid": "",
"allowed": false,
"auditAnnotations": null,
"warnings": null
}
}
Essayons à nouveau avec une ressource valide :
curl -X POST \
http://localhost:3000/validate_raw/raw-validation \
-H 'Content-Type: application/json' \
-d '{
"request": {
"user": "alice",
"action": "read",
"resource": "orders"
}
}'
Cette fois, la requête sera acceptée :
{
"response": {
"uid": "",
"allowed": true,
"auditAnnotations": null,
"warnings": null
}
}
|
Si le champ |
Mutation
Maintenant, essayons de modifier un document JSON contre la stratégie raw-mutation :
curl -X POST \
http://localhost:3000/validate_raw/raw-mutation \
-H 'Content-Type: application/json' \
-d '{
"request": {
"user": "alice",
"action": "read",
"resource": "privateResource"
}
}'
La requête sera modifiée et la réponse contiendra un JSONPatch :
{
"response": {
"uid": "",
"allowed": true,
"patchType": "JSONPatch",
"patch": "W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9yZXNvdXJjZSIsInZhbHVlIjoicHVibGljUmVzb3VyY2UifV0=",
"auditAnnotations": null,
"warnings": null
}
}
Rédaction de stratégies brutes
De la même manière que les stratégies qui valident les ressources Kubernetes, les stratégies brutes sont écrites en WebAssembly en utilisant les SDK Admission Controller. Si vous êtes intéressé par l’écriture de stratégies brutes, veuillez vous référer à la documentation spécifique à la langue pour plus d’informations :