Créer et gérer des contraintes personnalisées

Cette page explique comment activer et utiliser des contraintes personnalisées dans votre environnement GKE sur AWS.Le service de règles d'administration de Google Cloudvous aide à gérer les configurations de ressources et à créer des garde-fous dans votre environnement cloud.

Présentation

Les règles d'administration personnalisées vous permettent de créer des règles de ressources précises dans les environnements GKE Multi-Cloud afin de répondre aux exigences spécifiques de sécurité et de conformité de votre organisation. Vous pouvez également créer des règles d'administration en mode simulation pour tester de nouvelles règles sans affecter vos charges de travail de production.

Pour en savoir plus sur les règles d'administration, consultez la Présentation du service de règles d'administration.

Avant de commencer

Avant de commencer, assurez-vous de bien comprendre les sujets suivants.

Héritage des règles

Par défaut, les règles d'administration sont héritées par les descendants des ressources sur lesquelles vous les appliquez. Par exemple, si vous appliquez une stratégie à une organisation, Google Cloud l'applique à tous les projets de cette organisation. Pour en savoir plus sur l'héritage des stratégies et sur la modification des règles d'évaluation, consultez la section Règles d'évaluation hiérarchique.

Limites

Avant de créer des contraintes personnalisées, tenez compte des limitations suivantes:

  • Les contraintes personnalisées ne peuvent être appliquées que dans les méthodes CREATE ou UPDATE pour les ressources GKE sur AWS.
  • Les contraintes personnalisées nouvellement appliquées ne s'appliquent pas automatiquement aux ressources existantes. Vous devez mettre à jour les ressources existantes pour appliquer la contrainte. Pour trouver les ressources existantes qui doivent être mises à jour, vous pouvez appliquer une règle d'administration de simulation.
  • Pour créer des contraintes et appliquer des règles d'administration, vous avez besoin du rôle IAM Administrateur des règles d'administration (roles/orgpolicy.policyAdmin) dans votre Google Cloud organisation. Pour en savoir plus sur les autorisations requises pour gérer les règles d'administration avec des contraintes personnalisées, consultez la section Rôles requis.

Tarifs

Les règles d'administration et les contraintes personnalisées sont proposées sans frais.

Créer des contraintes personnalisées

Les contraintes personnalisées doivent être spécifiées à l'aide des champs des spécifications de ressources de l'API AwsCluster et AwsNodepool, à l'exception des champs décrits comme "Sortie uniquement".

Créer une contrainte personnalisée

Pour créer une contrainte personnalisée, vous la définissez dans un fichier YAML et vous l'appliquez dans votre organisation à l'aide de Google Cloud CLI. Cette contrainte doit encapsuler la stratégie spécifique que vous souhaitez appliquer à vos ressources GKE sur AWS.

Créez un fichier YAML pour définir une contrainte personnalisée sur votre cluster:

name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- gkemulticloud.googleapis.com/AwsCluster
methodTypes:
- CREATE
condition: CONDITION
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION

Pour définir une contrainte personnalisée sur votre pool de nœuds, utilisez la configuration YAML suivante:

name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- gkemulticloud.googleapis.com/AwsNodePool
methodTypes:
- CREATE
condition: CONDITION
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION

Remplacez les éléments suivants :

  • ORGANIZATION_ID : ID de votre organisation (par exemple, 123456789).

  • CONSTRAINT_NAME : nom de votre nouvelle contrainte personnalisée. Une contrainte personnalisée doit commencer par custom. et ne peut inclure que des lettres majuscules, minuscules ou des chiffres. Par exemple, custom.allowClusterCreateIfAnnotationPresent. La longueur maximale de ce champ est de 70 caractères, sans compter le préfixe, comme par exemple organizations/123456789/customConstraints/custom.

  • CONDITION : condition écrite pour une représentation d'une Google Cloud ressource. Les conditions sont écrites en langage CEL (Common Expression Language). Ce champ ne doit pas comporter plus de 1 000 caractères. Par exemple, condition: "key" in resource.annotations && resource.annotations.key == "created-by".

  • ACTION : action à effectuer si la condition est remplie. Il peut être défini sur ALLOW ou DENY.

  • DISPLAY_NAME : nom à afficher pour la contrainte. Ce champ ne doit pas comporter plus de 200 caractères.

  • DESCRIPTION : description de la contrainte qui sera affichée dans un message d'erreur en cas de non-respect de la règle (par exemple, "Allow new clusters only when certain annotations are set." Ce champ ne doit pas comporter plus de 2 000 caractères).

Pour en savoir plus sur la création d'une contrainte personnalisée, consultez Définir des contraintes personnalisées.

Associer la contrainte à vos ressources

Après avoir créé le fichier YAML pour une nouvelle contrainte personnalisée, vous devez le configurer de sorte qu'il soit disponible pour les règles d'administration.

  1. Pour configurer une contrainte personnalisée, utilisez la commande gcloud org-policies set-custom-constraint:

    gcloud org-policies set-custom-constraint PATH_TO_FILE
    

    Remplacez PATH_TO_FILE par le chemin d'accès de votre définition YAML de contrainte personnalisée.

  2. Pour vérifier que la contrainte personnalisée est créée, utilisez la commande gcloud org-policies list-custom-constraints:

    gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
    

    Le résultat affiche les règles créées:

    CUSTOM_CONSTRAINT: custom.allowClusterCreateIfAnnotationPresent
    ACTION_TYPE: ALLOW
    METHOD_TYPES: CREATE
    RESOURCE_TYPES: gkemulticloud.googleapis.com/AwsCluster
    DISPLAY_NAME: Allow new clusters only when certain annotations are set.
    

Appliquer la contrainte personnalisée

Pour appliquer la nouvelle contrainte personnalisée, créez une règle d'administration qui fait référence à la contrainte, puis appliquez-la.

  1. Créez un fichier YAML pour la règle d'administration :

    name: RESOURCE_HIERARCHY/policies/POLICY_NAME
    spec:
      rules:
      - enforce: true
    

    Remplacez les éléments suivants :

    • RESOURCE_HIERARCHY: emplacement de la nouvelle règle (affecte le champ d'application). Utilisez la hiérarchie des ressources Google Cloud comme guide. Par exemple, si vous souhaitez appliquer la règle dans un projet spécifique, utilisez projects/PROJECT_ID. Pour appliquer la règle dans une organisation spécifique, utilisez organizations/ORGANIZATION_ID.

    • POLICY_NAME : nom de la nouvelle stratégie.

  2. Appliquez la règle :

    gcloud org-policies set-policy PATH_TO_POLICY
    

    Remplacez PATH_TO_POLICY par le chemin d'accès à votre fichier de définition de règle.

  3. Vérifiez que la règle existe :

    gcloud org-policies list --RESOURCE_FLAG=RESOURCE_ID
    

    Remplacez les éléments suivants :

    • RESOURCE_FLAG: ressource Google Cloud dans laquelle vous avez appliqué la stratégie. (par exemple, un projet ou une organisation).

    • RESOURCE_ID: ID de la ressource dans laquelle vous avez appliqué la stratégie. Par exemple, votre ID de projet ou d'organisation.

    Le résultat ressemble à ce qui suit :

    CONSTRAINT: custom.allowClusterCreateIfAnnotationPresent
    LIST_POLICY: -
    BOOLEAN_POLICY: SET
    ETAG: CPjb27wGEOijhL4B-
    

Tester la stratégie

Testez la règle de l'organisation en créant un cluster AWS dans un projet soumis à des restrictions.

  1. Créez un cluster AWS dans un projet restreint.

    gcloud container aws clusters create CLUSTER_NAME \
      --aws-region AWS_REGION \
      --location GOOGLE_CLOUD_LOCATION \
      --cluster-version CLUSTER_VERSION \
      --fleet-project FLEET_PROJECT \
      --vpc-id VPC_ID \
      --subnet-ids CONTROL_PLANE_SUBNET_1,CONTROL_PLANE_SUBNET_2,CONTROL_PLANE_SUBNET_3 \
      --pod-address-cidr-blocks POD_ADDRESS_CIDR_BLOCKS \
      --service-address-cidr-blocks SERVICE_ADDRESS_CIDR_BLOCKS \
      --role-arn API_ROLE_ARN \
      --database-encryption-kms-key-arn DB_KMS_KEY_ARN \
      --admin-users ADMIN_USERS_LIST \
      --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
      --iam-instance-profile CONTROL_PLANE_PROFILE \
      --tags "Name=CLUSTER_NAME-cp"
    
  2. Le résultat ressemble à ce qui suit :

    FAILED_PRECONDITION: Operation denied by org policy on resource 'projects/PROJECT_NUMBER/locations/GOOGLE_CLOUD_REGION': ["customConstraints/custom.allowClusterCreateIfAnnotationPresent": "Allow new clusters only when certain annotations are set."]
    
    '@type': type.googleapis.com/google.rpc.ErrorInfo
    domain: googleapis.com
    metadata:
      customConstraints: customConstraints/custom.allowClusterCreateIfAnnotationPresent
    service: gkemulticloud.googleapis.com
    reason: CUSTOM_ORG_POLICY_VIOLATION