Configurer une stratégie à l'aide de l'API REST

Cette page explique comment configurer une stratégie d'autorisation binaire en ligne de commande à l'aide de l'API REST. Vous pouvez également effectuer ces tâches en ligne de commande à l'aide des commandes gcloud, ou bien dans Google Cloud Console. Cette étape fait partie de la configuration de l'autorisation binaire.

Présentation

Une stratégie est un ensemble de règles régissant le déploiement d'une ou plusieurs images de conteneurs.

Lorsque vous configurez une stratégie à l'aide de l'API REST, vous renseignez des valeurs dans un format JSON de structure identique à celle de la structure YAML utilisée dans les interactions gcloud avec le service. Pour en savoir plus, consultez la documentation de référence sur les fichiers YAML de stratégie.

Pour configurer une stratégie, vous devez :

  • exporter un fichier JSON de stratégie ;
  • ajouter des images exclues supplémentaires (facultatif) ;
  • définir la règle par défaut ;
  • ajouter des règles spécifiques à un cluster (facultatif) ;
  • importer le fichier JSON de stratégie.

La plupart des stratégies concrètes vérifient si tous les certificateurs requis ont validé qu'une image de conteneur est prête à être déployée. Dans un tel cas, vous devez également créer des certificateurs lorsque vous configurez la stratégie.

Définir le projet par défaut

Si ce n'est pas déjà fait, définissez le projet Google Cloud par défaut :

PROJECT_ID=PROJECT_ID
gcloud config set project ${PROJECT_ID}

PROJECT_ID correspond à l'ID de votre projet.

Exporter la stratégie

Exportez la stratégie dans un fichier JSON sur votre système local :

curl \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "x-goog-user-project: ${PROJECT_ID}" \
    "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy" \
    -o "/tmp/policy.json"

Par défaut, ce fichier comporte les éléments suivants :

{
  "name": "projects/PROJECT_ID/policy",
  "admissionWhitelistPatterns": [
    {
      "namePattern": "gcr.io/google_containers/*"
    },
    {
      "namePattern": "gcr.io/google-containers/*"
    },
    {
      "namePattern": "k8s.gcr.io/*"
    },
    {
      "namePattern": "gcr.io/stackdriver-agents/*"
    }
  ],
  "globalPolicyEvaluationMode": "ENABLE",
  "defaultAdmissionRule": {
    "evaluationMode": "ALWAYS_ALLOW",
    "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
  }
}

Gérer les images exclues

Une image exclue est une image de conteneur exclue des règles définies dans la stratégie. L'autorisation binaire permet toujours que les images exclues soient déployées.

Chaque stratégie peut inclure une liste d'autorisation d'images exclues, lesquelles sont spécifiées par leur chemin d'accès au registre. Il peut s'agir d'un emplacement dans Container Registry ou dans un autre registre d'images de conteneurs. Si cette liste d'autorisation est activée, elle vient s'ajouter aux images exclues du mode d'évaluation de la stratégie globale.

Pour ajouter une image exclue, ajoutez un nœud namePattern sous une liste admissionWhitelistPatterns dans le fichier JSON de la stratégie :

{
  "name": "projects/PROJECT_ID/policy",
  "admissionWhitelistPatterns": [
    {
      "namePattern": "MATCHING_PATTERN"
    }
  ],
  ...
}

MATCHING_PATTERN est le chemin d'accès à une image unique de votre registre en cas de correspondance exacte, ou à toute image correspondant à un modèle utilisant le caractère générique (*).

Mode d'évaluation de la stratégie globale

Le mode d'évaluation de la stratégie globale est un paramètre de stratégie qui permet à l'autorisation binaire d'évaluer une stratégie globale avant d'évaluer la stratégie que vous configurez en tant qu'utilisateur. La stratégie globale est fournie par Google et exempte une liste d'images système gérées par Google d'une évaluation plus approfondie. Lorsque ce paramètre est activé, les images requises par Google Kubernetes Engine (GKE) ne sont pas bloquées par l'application des stratégies. La stratégie globale est évaluée en plus de la stratégie utilisateur.

Vous pouvez afficher le contenu de la stratégie globale depuis la ligne de commande à l'aide de la commande suivante :

gcloud container binauthz policy export --project=binauthz-global-policy

Le mode d'évaluation de la stratégie globale rend superflue la spécification explicite dans la liste d'autorisation des chemins d'accès aux images système gérées par Google. Cette option est désactivée par défaut.

Pour activer le mode d'évaluation de la stratégie globale, ajoutez le nœud de niveau supérieur suivant au fichier JSON de la stratégie :

"globalPolicyEvaluationMode": "ENABLE"

Pour désactiver le mode d'évaluation de la stratégie globale, ajoutez la ligne suivante :

"globalPolicyEvaluationMode": "DISABLE"

Définir la règle par défaut

Une règle est la partie d'une stratégie qui définit les contraintes que les images de conteneurs doivent respecter pour pouvoir être déployées. Chaque demande d'admission est associée à un cluster GKE. Si une demande ne correspond à aucune règle spécifique à un cluster, la règle par défaut est utilisée.

La règle par défaut est définie dans le nœud defaultAdmissionRule de la stratégie. Pour en savoir plus sur les éléments de cette règle, consultez la section ADMISSION_RULE dans la documentation de référence sur les fichiers YAML de stratégie. Pour obtenir des exemples de règles par défaut, consultez la page Exemples de stratégies.

Pour définir la règle par défaut, modifiez le nœud defaultAdmissionRule du fichier JSON de stratégie suivant vos besoins :

  "defaultAdmissionRule": {
    "evaluationMode": "EVAL_MODE",
    "enforcementMode": "ENFORCEMENT_MODE"
    requireAttestationsBy: [
      ATTESTOR,
      ...
    ]
  }

Où :

  • EVAL_MODE spécifie le type de contrainte évaluée par l'autorisation binaire avant d'autoriser le déploiement d'une image de conteneur.
  • ENFORCEMENT_MODE spécifie l'action effectuée si une image de conteneur n'est pas conforme aux contraintes définies dans la règle.
  • ATTESTOR spécifie les certificateurs (le cas échéant) devant signer une image de conteneur avant qu'elle puisse être déployée. Utilisez le chemin d'accès complet au certificateur au format projects/PROJECT_ID/attestors/ATTESTOR_NAME.

Si votre règle vérifie que tous les certificateurs requis ont bien signé une image de conteneur, vous devez créer les certificateurs avant de conclure cette étape.

Définir des règles spécifiques à un cluster (facultatif)

Une ou plusieurs règles spécifiques à un cluster peuvent également être définies pour un cluster. Ce type de règle ne s'applique qu'au cluster GKE spécifié. Si un cluster ne présente aucune règle spécifique, la règle par défaut est utilisée. Les règles spécifiques à un cluster constituent une partie facultative d'une stratégie.

Les règles spécifiques à un cluster sont définies dans des nœuds clusterAdmissionRules du fichier JSON de stratégie. Pour en savoir plus sur les éléments de cette règle, consultez la section ADMISSION_RULE dans la documentation de référence sur les fichiers YAML de stratégie. Pour obtenir un exemple, consultez la section Utiliser une règle spécifique à un cluster dans la section Exemples de stratégies.

Pour ajouter une règle spécifique à un cluster :

Dans le fichier JSON de stratégie, ajoutez un nœud clusterAdmissionRules :

"clusterAdmissionRules": {
    "us-central1-a.test-cluster": {
      "evaluationMode": "REQUIRE_ATTESTATION",
      "requireAttestationsBy": [
        "ATTESTOR",
        ...
      ],
      "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
    }
  },

CLUSTER_SPECIFIER est l'ID de ressource du cluster auquel la règle s'applique, au format location.name. Les autres propriétés sont décrites à la section Définir la règle par défaut ci-dessus. Consultez la section Exemples de stratégies pour obtenir un exemple de règle spécifique à un cluster.

Si votre règle vérifie que tous les certificateurs requis ont bien signé une image de conteneur, vous devez créer les certificateurs avant de conclure cette étape.

Importer le fichier JSON de stratégie

La dernière étape consiste à importer le fichier JSON de stratégie dans l'autorisation binaire.

Pour importer le fichier, saisissez la commande suivante :

curl -X PUT \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "x-goog-user-project: ${PROJECT_ID}" \
    --data-binary @/tmp/policy.json  \
    "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy"

Étapes suivantes