Las políticas de la organización te brindan un control centralizado y programático de los recursos de tu organización. Como administrador de políticas de la organización, puedes configurar políticas en toda la organización para obtener los siguientes beneficios:
- Centralizar el control para configurar restricciones sobre cómo usar los recursos de tu organización
- Definir y establecer barreras de seguridad para que los equipos de desarrollo se mantengan dentro de los límites de cumplimiento.
- Ayudar a los propietarios de proyectos y a sus equipos a avanzar con rapidez sin infringir el cumplimiento
Google Distributed Cloud (GDC) aislado no proporciona una IU de consola ni una CLI dedicada para crear y administrar políticas de la organización. Debes usar la API de Kubernetes o la CLI de kubectl.
Diferencias con la administración de identidades y accesos
La administración de identidades y accesos (IAM) y las políticas de la organización cumplen funciones complementarias de acceso y administración:
- IAM se enfoca en otorgar permisos. Define quién (miembros, como usuarios, grupos o cuentas de servicio) puede realizar qué acciones (roles) en qué recursos (alcance del recurso). Los permisos otorgados a través de los roles de IAM son aditivos y no tienen reglas de denegación.
- Las políticas de la organización se enfocan en establecer barreras de seguridad. Permiten que los administradores configuren restricciones programáticas en los recursos de toda la organización, como inhabilitar servicios específicos o restringir las modificaciones de recursos según los atributos del sujeto con el control de acceso basado en atributos (ABAC). Las políticas de la organización tienen prioridad para bloquear operaciones, incluso si un miembro tiene un rol de IAM.
Antes de comenzar
Antes de configurar las políticas de la organización, debes solicitar los permisos necesarios y preparar tu entorno.
Solicita roles de IAM
Comunícate con el administrador de la organización de IAM para solicitar los siguientes roles de IAM según las tareas que debas realizar:
- Administrador de políticas de servicio restringido
(
gdchrestrictedservice-policy-admin): Crea, actualiza y borra políticas de servicio restringido. - Administrador de políticas de restricción por atributos
(
gdchrestrictbyattributes-policy-admin): Crea, actualiza y borra políticas de control de acceso basado en atributos.
Prepara el entorno
Genera un archivo kubeconfig para configurar el acceso a la CLI de kubectl.
Configura una política
Puedes configurar dos tipos de políticas de la organización en GDC:
- Política de servicio restringido (
GDCHRestrictedService): Restringe los servicios que puedes usar o modificar en un clúster. - Política de control de acceso basado en atributos (
GDCHRestrictByAttributes): restringe de forma condicional el acceso a los recursos de un clúster según los atributos del sujeto asignados desde tu proveedor de identidad.
Configura una política de servicio restringido
El tipo de política GDCHRestrictedService te permite restringir los servicios que puedes usar
o modificar en un clúster bloqueando APIs específicas, como restringir un servicio a
determinados proyectos o bloquear el acceso a un servicio nuevo mientras lo pruebas. Crea esta
política en el mismo clúster que los recursos del servicio. Puedes crear varias instancias de política
en un clúster para diferentes servicios o proyectos.
GDCHRestrictedService admite las operaciones CREATE, UPDATE y DELETE. Para restringir
las operaciones de lectura de GET y LIST, usa vinculaciones de roles de IAM para
otorgar y revocar el acceso.
Configura una política de servicio restringido:
Define el manifiesto de la política:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: GDCHRestrictedService metadata: name: POLICY_NAME spec: match: kinds: - apiGroups: - "API_GROUP" kinds: - "KIND" parameters: disabledOperations: - DISABLED_OPERATIONReemplaza lo siguiente:
POLICY_NAME: Es el nombre de la política de la organización.API_GROUP: Es el grupo de APIs del servicio que se restringirá, como se indica en la siguiente tabla de servicios compatibles.KIND: Es el tipo de recurso que se restringirá, como se indica en la siguiente tabla de servicios compatibles.DISABLED_OPERATION: son los grupos de operaciones que bloquea esta política. Los valores permitidos sonCREATE,UPDATEyDELETE. El valor predeterminado para el campodisabledOperationses*. Para inhabilitar por completo un servicio, enumeraCREATE,UPDATEyDELETE(y especifica todos sus tipos).
De forma predeterminada, la política se aplica a todos los espacios de nombres del clúster. Para definir el alcance de la política en espacios de nombres o proyectos específicos, consulta Define el alcance de una política de la organización dentro de un clúster.
La política
GDCHRestrictedServiceadmite el siguiente subconjunto de servicios en GDC:Servicio Grupo de APIs kinds Marketplace marketplace.gdc.googMarketplaceServiceVertex AI Workbench aiplatform.gdc.googNotebookServicio de base de datos: Postgres postgresql.dbadmin.gdc.googDBClusterBackupPlanImportRestore
Transfer Appliance system.gpc.gke.ioTransferApplianceRequestCopia de seguridad backup.gdc.googBackupRepositoryManagerContenedor de Dataproc para Spark (servicio de Marketplace) sparkoperator.k8s.ioSparkApplicationSi un servicio enumera varios tipos en la tabla (como Servicio de base de datos), puedes especificar solo los tipos individuales que deseas restringir. Por ejemplo, puedes bloquear las operaciones
Restorey, al mismo tiempo, permitir las operacionesDBCluster.En el siguiente ejemplo, se restringen las actualizaciones de los servicios de 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"Aplica la política con la CLI de kubectl:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f POLICY_NAME.yamlReemplaza lo siguiente:
CLUSTER_KUBECONFIG: Es el archivo kubeconfig del clúster en el que deseas aplicar la política.POLICY_NAME: Es el nombre del archivo de la política de la organización.
Configura una política de control de acceso basado en atributos
El tipo de política GDCHRestrictByAttributes te permite crear políticas de ABAC para
restringir de forma condicional el acceso a los recursos según los atributos del sujeto. Por ejemplo,
puedes usar este tipo de política para restringir las operaciones de escritura o modificación en los buckets de almacenamiento,
de modo que solo los usuarios o las cuentas de servicio con atributos de identidad específicos
(como citizenship=USA o citizenship=UK) puedan realizarlas.
Crea esta política en el mismo clúster que los recursos. Puedes crear varias instancias de política en un clúster para diferentes recursos o proyectos.
Configura una política de control de acceso basado en atributos:
Crea un archivo JSON de parche para asignar atributos de identidad personalizados a tu recurso
IdentityProviderConfig:cat <<EOF > attributeMapping-patch.json { "CUSTOM_ATTRIBUTE": "assertion[\"CUSTOM_ATTRIBUTE\"]" } EOFReemplaza
CUSTOM_ATTRIBUTEpor el nombre del atributo de identidad que se asignará, comocitizenship.Aplica un parche al recurso
IdentityProviderConfigen el espacio de nombresplatform: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)"'}]'Reemplaza lo siguiente:
CLUSTER_KUBECONFIG: Es el archivo kubeconfig del clúster en el que reside el proveedor de identidad.IDENTITY_PROVIDER_CONFIG_NAME: Es el nombre del recursoIdentityProviderConfig.
Define el manifiesto de la política:
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_VALUEReemplaza lo siguiente:
POLICY_NAME: Es el nombre de la política de la organización.API_GROUP: Es el grupo de API de los recursos que se restringirán, comoobject.gdc.goog.KIND: Es el tipo de recurso que se restringirá, comoBucket.CUSTOM_ATTRIBUTE: Es el atributo de asunto personalizado asignado desde el proveedor de identidad, comocitizenship.ALLOWED_ATTRIBUTE_VALUE: Es el valor permitido para el atributo personalizado, comoUSA. Se rechazan las solicitudes de sujetos cuyo atributo no coincide con uno de los valores permitidos.
De forma predeterminada, la política se aplica a todos los espacios de nombres del clúster. Para definir el alcance de la política en espacios de nombres o proyectos específicos, consulta Define el alcance de una política de la organización dentro de un clúster.
En el siguiente ejemplo, se restringe la modificación de los recursos
Bucketen el espacio de nombresproject-fooa los sujetos con el atributocitizenship=USAocitizenship=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"Aplica la política con la CLI de kubectl:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f POLICY_NAME.yamlReemplaza lo siguiente:
CLUSTER_KUBECONFIG: Es el archivo kubeconfig del clúster en el que deseas aplicar la política.POLICY_NAME: Es el nombre del archivo de la política de la organización.
Definir el alcance de una política de la organización dentro de un clúster
Cuando definas una política de la organización, decide si debe afectar a todos
los espacios de nombres, solo a algunos específicos o a todos, excepto a una lista determinada. Para
lograrlo, usa una combinación de los parámetros .spec.match.excludedNamespaces,
.spec.match.namespaceSelector, .spec.match.namespaces y
.spec.match.scope de la definición de la política.
Lee la
sección de coincidencia de la política de la organización
para obtener más información sobre estos parámetros. Por ejemplo, para permitir la creación de
bases de datos solo en espacios de nombres que tengan la etiqueta owner: dba-team, crea la
siguiente política:
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"
Revierte una política existente
Para dejar de aplicar una política existente, bórrala con la CLI de kubectl. Usa un
archivo kubeconfig que te otorgue acceso al clúster en el que se define la política y el rol de IAM correspondiente al tipo de política (como
gdchrestrictedservice-policy-admin o gdchrestrictbyattributes-policy-admin).
Borra una política de la organización:
kubectl --kubeconfig CLUSTER_KUBECONFIG delete \
POLICY_TYPE/POLICY_NAME
Reemplaza lo siguiente:
CLUSTER_KUBECONFIG: Es el archivo kubeconfig del clúster en el que reside la política de la organización.POLICY_TYPE: el tipo de política de la organización que se borrará, comoGDCHRestrictedServiceoGDCHRestrictByAttributesPOLICY_NAME: Es el nombre de la política de la organización que se borrará.
Prueba una política en un modo de auditoría
Puedes probar una política sin aplicarla. Prueba una política para asegurarte de que
no interrumpa los sistemas existentes antes de implementarla o para obtener una
estimación de qué tan extendido está un comportamiento. Para agregar una prueba, agrega un
enforcementAction a la definición de tu política. Hay tres valores posibles
para este parámetro:
deny: Se aplica la política. Esta es la configuración predeterminada.dryrun: Se permite la acción, pero puedes ver que hay un incumplimiento de política tanto en los registros de auditoría como en el estado de la política. Examina el incumplimiento conkubectl --kubeconfig CLUSTER_KUBECONFIG get POLICY_TYPE/POLICY_NAME.warn: Es equivalente adryrun, excepto que la prueba también muestra una advertencia en respuesta a la solicitud que activó un incumplimiento de política.
Por ejemplo, para probar una política que inhabilita Marketplace, crea la siguiente política:
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"]