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
ouUPDATE
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 parcustom.
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 exempleorganizations/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 surALLOW
ouDENY
.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.
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.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.
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, utilisezprojects/
PROJECT_ID
. Pour appliquer la règle dans une organisation spécifique, utilisezorganizations/
ORGANIZATION_ID
.POLICY_NAME
: nom de la nouvelle stratégie.
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.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.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"
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