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

Cette page vous 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 pour répondre aux exigences spécifiques de votre organisation en termes de sécurité et de conformité. 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 thèmes 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 règle au niveau d'une organisation, Google Cloud l'applique à tous les projets de l'organisation. Pour en savoir plus sur l'héritage des règles et sur la façon de modifier les règles d'évaluation, consultez 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 qu'aux méthodes CREATE ou UPDATE pour les ressources GKE sur AWS.
  • Les nouvelles contraintes personnalisées mises en place 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 en mode dry run.
  • 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) sur votre organisation Google Cloud . Pour en savoir plus sur les autorisations requises pour gérer les règles d'administration avec des contraintes personnalisées, consultez 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'exclusion 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 englober la règle 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, par exemple organizations/123456789/customConstraints/custom.

  • CONDITION : condition écrite pour une représentation d'une ressource Google Cloud . 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 de 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 que la contrainte 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 à la définition YAML de votre contrainte personnalisée.

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

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

    Le résultat liste 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, l'ID de votre projet ou de votre 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 d'administration en créant un cluster AWS dans un projet restreint.

  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