Les règles d'administration vous offrent un contrôle centralisé et automatisé sur les ressources de votre organisation. En tant qu'administrateur des règles d'administration, vous pouvez configurer des règles pour l'ensemble de votre organisation afin de bénéficier des avantages suivants :
- Centralisez le contrôle pour configurer des restrictions sur l'utilisation des ressources de votre organisation.
- Définissez et établissez des garde-fous pour que vos équipes de développement puissent respecter les limites de conformité.
- Aidez les propriétaires de projet et leurs équipes à agir rapidement sans enfreindre les règles de conformité.
Google Distributed Cloud (GDC) air-gapped ne fournit pas d'interface utilisateur de console ni de CLI dédiée pour créer et gérer des règles d'administration. Vous devez utiliser l'API Kubernetes ou la CLI kubectl.
Différences avec Identity and Access Management
La gestion de l'authentification et des accès (IAM) et les règles d'administration remplissent des fonctions d'accès et de gouvernance complémentaires :
- IAM se concentre sur l'attribution d'autorisations. Il définit qui (membres tels que des utilisateurs, des groupes ou des comptes de service) peut effectuer quelles actions (rôles) sur quelles ressources (champ d'application des ressources). Les autorisations accordées par le biais des rôles IAM sont cumulatives et ne comportent pas de règles de refus.
- Les règles d'administration visent à établir des garde-fous. Elles permettent aux administrateurs de configurer des restrictions programmatiques sur les ressources de l'ensemble de l'organisation, par exemple en désactivant des services spécifiques ou en limitant les modifications de ressources en fonction des attributs du sujet à l'aide du contrôle des accès basé sur les attributs (ABAC). Les règles d'administration prévalent pour bloquer les opérations, même si un membre détient un rôle IAM.
Avant de commencer
Avant de configurer des règles d'administration, vous devez demander les autorisations nécessaires et préparer votre environnement.
Demander des rôles IAM
Contactez l'administrateur IAM de votre organisation pour demander les rôles IAM suivants en fonction des tâches que vous devez effectuer :
- Administrateur des règles de service restreint (
gdchrestrictedservice-policy-admin) : créez, modifiez et supprimez des règles de service restreint. - Administrateur des règles "Restreindre par attributs" (
gdchrestrictbyattributes-policy-admin) : permet de créer, de modifier et de supprimer des règles de contrôle des accès basées sur les attributs.
Préparer votre environnement
Téléchargez et installez la CLI gdcloud, si ce n'est pas déjà fait.
Générez un fichier kubeconfig pour configurer l'accès à CLI kubectl.
Configurer une règle
Vous pouvez configurer deux types de règles d'administration dans GDC :
- Règles relatives aux services restreints (
GDCHRestrictedService) : limitent les services que vous pouvez utiliser ou modifier dans un cluster. - Règle de contrôle des accès basé sur les attributs (
GDCHRestrictByAttributes) : limite l'accès aux ressources d'un cluster en fonction des attributs du sujet mappés à partir de votre fournisseur d'identité.
Configurer une règle de service restreint
Le type de règle GDCHRestrictedService vous permet de limiter les services que vous pouvez utiliser ou modifier dans un cluster en bloquant des API spécifiques. Par exemple, vous pouvez limiter un service à certains projets ou bloquer l'accès à un nouveau service pendant que vous le testez. Créez cette règle dans le même cluster que les ressources de service. Vous pouvez créer plusieurs instances de règles dans un cluster pour différents services ou projets.
GDCHRestrictedService accepte les opérations CREATE, UPDATE et DELETE. Pour restreindre les opérations de lecture GET et LIST, utilisez des liaisons de rôle IAM pour accorder et révoquer l'accès.
Configurer une règle de service restreint :
Définissez le fichier manifeste de la règle :
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: GDCHRestrictedService metadata: name: POLICY_NAME spec: match: kinds: - apiGroups: - "API_GROUP" kinds: - "KIND" parameters: disabledOperations: - DISABLED_OPERATIONRemplacez les éléments suivants :
POLICY_NAME: nom de la règle d'organisation.API_GROUP: groupe d'API du service à limiter, tel qu'indiqué dans le tableau des services compatibles ci-dessous.KIND: type de ressource à restreindre, tel qu'indiqué dans le tableau des services compatibles ci-dessous.DISABLED_OPERATION: groupes d'opérations bloqués par cette règle. Les valeurs autorisées sontCREATE,UPDATEetDELETE. La valeur par défaut du champdisabledOperationsest*. Pour désactiver complètement un service, listezCREATE,UPDATEetDELETE(et spécifiez tous ses types).
Par défaut, la règle s'applique à tous les espaces de noms du cluster. Pour définir le champ d'application de la règle sur des espaces de noms ou des projets spécifiques, consultez Définir le champ d'application d'une règle d'organisation dans un cluster.
La règle
GDCHRestrictedServiceest compatible avec le sous-ensemble de services suivant sur GDC :Service Groupe d'API kinds Marketplace marketplace.gdc.googMarketplaceServiceVertex AI Workbench aiplatform.gdc.googNotebookService de base de données : Postgres postgresql.dbadmin.gdc.googDBClusterBackupPlanImportRestore
Transfer Appliance system.gpc.gke.ioTransferApplianceRequestSauvegarde backup.gdc.googBackupRepositoryManagerConteneur Dataproc pour Spark (service Marketplace) sparkoperator.k8s.ioSparkApplicationSi un service répertorie plusieurs types dans le tableau (comme "Service de base de données"), vous ne pouvez spécifier que les types individuels que vous souhaitez limiter. Par exemple, vous pouvez bloquer les opérations
Restoretout en continuant à autoriser les opérationsDBCluster.L'exemple suivant limite les mises à jour aux services Marketplace :
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: GDCHRestrictedService metadata: name: no-update-to-marketplace-service spec: match: kinds: - apiGroups: - "marketplace.gdc.goog" kinds: - MarketplaceService parameters: disabledOperations: - "UPDATE"Appliquez la règle à l'aide de la CLI kubectl :
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f POLICY_NAME.yamlRemplacez les éléments suivants :
CLUSTER_KUBECONFIG: fichier kubeconfig du cluster auquel vous souhaitez appliquer la règlePOLICY_NAME: nom du fichier de règles de l'organisation
Configurer une stratégie de contrôle des accès basée sur les attributs
Le type de règle GDCHRestrictByAttributes vous permet de créer des règles ABAC pour restreindre l'accès aux ressources de manière conditionnelle en fonction des attributs du sujet. Par exemple, vous pouvez utiliser ce type de stratégie pour limiter les opérations d'écriture ou de modification sur les buckets de stockage afin que seuls les utilisateurs ou les comptes de service disposant d'attributs d'identité spécifiques (tels que citizenship=USA ou citizenship=UK) puissent les effectuer.
Créez cette règle dans le même cluster que les ressources. Vous pouvez créer plusieurs instances de règles dans un cluster pour différents projets ou ressources.
Configurer une règle de contrôle des accès basée sur les attributs :
Créez un fichier JSON de correctif pour mapper les attributs d'identité personnalisés pour votre ressource
IdentityProviderConfig:cat <<EOF > attributeMapping-patch.json { "CUSTOM_ATTRIBUTE": "assertion[\"CUSTOM_ATTRIBUTE\"]" } EOFRemplacez
CUSTOM_ATTRIBUTEpar le nom de l'attribut d'identité à mapper, tel quecitizenship.Appliquez le correctif à la ressource
IdentityProviderConfigdans l'espace de nomsplatform:kubectl --kubeconfig CLUSTER_KUBECONFIG patch \ IdentityProviderConfig IDENTITY_PROVIDER_CONFIG_NAME \ -n platform --type=json \ -p '[{"op":"add","path":"/spec/oidc/attributeMapping", "value": '"$(cat attributeMapping-patch.json)"'}]'Remplacez les éléments suivants :
CLUSTER_KUBECONFIG: fichier kubeconfig du cluster dans lequel réside le fournisseur d'identitéIDENTITY_PROVIDER_CONFIG_NAME: nom de la ressourceIdentityProviderConfig
Définissez le fichier manifeste de la règle :
apiVersion: constraints.global.gatekeeper.sh/v1beta1 kind: GDCHRestrictByAttributes metadata: name: POLICY_NAME spec: match: kinds: - apiGroups: - "API_GROUP" kinds: - "KIND" parameters: attributes: - CUSTOM_ATTRIBUTE attributeValues: - ALLOWED_ATTRIBUTE_VALUERemplacez les éléments suivants :
POLICY_NAME: nom de la règle d'organisation.API_GROUP: groupe d'API des ressources à restreindre, par exempleobject.gdc.goog.KIND: type de ressource à limiter, par exempleBucket.CUSTOM_ATTRIBUTE: attribut de sujet personnalisé mappé à partir du fournisseur d'identité, tel quecitizenship.ALLOWED_ATTRIBUTE_VALUE: valeur autorisée pour l'attribut personnalisé, par exempleUSA. Les demandes provenant de sujets dont l'attribut ne correspond pas à l'une des valeurs autorisées sont refusées.
Par défaut, la règle s'applique à tous les espaces de noms du cluster. Pour définir le champ d'application de la règle sur des espaces de noms ou des projets spécifiques, consultez Définir le champ d'application d'une règle d'organisation dans un cluster.
L'exemple suivant limite la modification des ressources
Bucketdans l'espace de nomsproject-fooaux sujets disposant de l'attributcitizenship=USAoucitizenship=UK:apiVersion: constraints.global.gatekeeper.sh/v1beta1 kind: GDCHRestrictByAttributes metadata: name: restrict-by-citizenship spec: match: scope: Namespaced kinds: - apiGroups: - "object.gdc.goog" kinds: - Bucket namespaces: - project-foo parameters: attributes: - "citizenship" attributeValues: - "USA" - "UK"Appliquez la règle à l'aide de la CLI kubectl :
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f POLICY_NAME.yamlRemplacez les éléments suivants :
CLUSTER_KUBECONFIG: fichier kubeconfig du cluster auquel vous souhaitez appliquer la règlePOLICY_NAME: nom du fichier de règles de l'organisation
Définir le champ d'application d'une règle d'administration dans un cluster
Lorsque vous définissez une règle d'administration, déterminez si elle doit s'appliquer à tous les espaces de noms, à certains espaces de noms uniquement ou à tous les espaces de noms, à l'exception d'une liste donnée. Pour ce faire, utilisez une combinaison des paramètres .spec.match.excludedNamespaces, .spec.match.namespaceSelector, .spec.match.namespaces et .spec.match.scope de la définition de règle.
Consultez la section Correspondance des règles d'administration pour en savoir plus sur ces paramètres. Par exemple, pour autoriser la création de bases de données uniquement dans les espaces de noms portant le libellé owner: dba-team, créez la règle suivante :
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: GDCHRestrictedService
metadata:
name: db-restricted-to-dbas
spec:
match:
scope: Namespaced
namespaceSelector:
matchExpressions:
# We are restricting the use of the service in namespaces that
# don't have the owner: dba-team label
- key: owner
operator: NotIn
values:
- dba-team
kinds:
- apiGroups:
- "postgresql.dbadmin.gdc.goog"
kinds:
- DBCluster
- BackupPlan
- Import
- Restore
parameters:
disabledOperations:
- "UPDATE"
- "CREATE"
- "DELETE"
Restaurer une stratégie existante
Pour arrêter d'appliquer une règle existante, supprimez-la à l'aide de CLI kubectl. Utilisez un fichier kubeconfig qui vous donne accès au cluster où la règle est définie et au rôle IAM correspondant au type de règle (par exemple, gdchrestrictedservice-policy-admin ou gdchrestrictbyattributes-policy-admin).
Supprimer une règle d'administration :
kubectl --kubeconfig CLUSTER_KUBECONFIG delete \
POLICY_TYPE/POLICY_NAME
Remplacez les éléments suivants :
CLUSTER_KUBECONFIG: fichier kubeconfig du cluster dans lequel réside la règle d'administrationPOLICY_TYPE: type de règle d'organisation à supprimer, tel queGDCHRestrictedServiceouGDCHRestrictByAttributesPOLICY_NAME: nom de la règle d'organisation à supprimer
Tester une règle en mode audit
Vous pouvez tester une règle sans l'appliquer. Testez une règle pour vous assurer qu'elle ne perturbe pas les systèmes existants avant de la déployer ou pour obtenir une estimation de la fréquence d'un comportement. Pour ajouter un test, ajoutez un enforcementAction à la définition de votre règle. Ce paramètre peut prendre trois valeurs :
deny: la règle est appliquée. Il s'agit du paramètre par défaut.dryrun: l'action est autorisée, mais vous pouvez constater qu'il existe un non-respect des règles dans les journaux d'audit et dans l'état des règles. Examinez le non-respect aveckubectl --kubeconfig CLUSTER_KUBECONFIG get POLICY_TYPE/POLICY_NAME.warn: équivalent àdryrun, sauf que le test affiche également un avertissement en réponse à la demande qui a déclenché un non-respect des règles.
Par exemple, pour tester une règle qui désactive le Marketplace, créez la règle suivante :
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: GDCHRestrictedService
metadata:
name: disable-marketplace-service-project-alice
spec:
enforcementAction: warn
match:
kinds:
- apiGroups: ["marketplace.gdc.goog"]
kinds: ["MarketplaceService"]