Mantenimiento de las funciones personalizadas con Deployment Manager

Información general

Las funciones personalizadas de Cloud Identity and Access Management te permiten otorgar permisos detallados a cuentas de usuario y de servicio. A diferencia de las funciones predefinidas, que son mantenidas por Google y actualizadas en consecuencia, tu organización mantiene las funciones personalizadas a medida que los nuevos permisos están disponibles.

Cloud Deployment Manager puede facilitar la configuración y el mantenimiento de tus funciones personalizadas. Puedes usar Deployment Manager para describir las funciones mediante archivos de configuración, que luego se pueden incorporar al sistema de control de código fuente que elijas. Juntos, Deployment Manager y el control de código fuente pueden facilitar la configuración como código con los siguientes objetivos:

  • Realizar seguimiento de funciones personalizadas a medida que cambian con el tiempo
  • Promover funciones personalizadas a través de etapas de lanzamiento a medida que se prueban y validan
  • Automatizar cómo se implementan las funciones en toda tu organización

Situaciones para mantener funciones personalizadas con Deployment Manager

Considera las siguientes situaciones, en las que se demuestran los beneficios de usar Deployment Manager para mantener las funciones personalizadas:

  • Cómo controlar el acceso a nuevos permisos: Tienes una función personalizada que contiene permisos para un servicio de Google Cloud Platform. El servicio agrega nuevas características Beta y expone nuevos permisos. Tu función personalizada no heredará automáticamente estos nuevos permisos; deben agregarse manualmente. Hasta que los nuevos permisos se agreguen a tu función personalizada, los usuarios de tu organización no tendrán acceso a las características Beta. Puedes usar los archivos de configuración y el control de código fuente de Deployment Manager para ayudar a auditar los permisos existentes, actualizar tus funciones personalizadas según sea necesario y mantener un historial de revisión.
  • Administración del ciclo de vida de la función: Tienes una función personalizada nueva a la que asignaste una etapa de lanzamiento ALPHA. Después de probar y validar la función personalizada, puedes usar Deployment Manager para actualizar la configuración de la función personalizada y avanzar a la etapa BETA sin usar Google Cloud Platform Console.
  • Cómo comprender la adopción de funciones personalizadas: Cuando tienes más de las definiciones de funciones personalizadas de tu organización en el control de origen, facilita compartir, aprender de los patrones de uso y aplicar restricciones en múltiples proyectos.

Cómo comprender los archivos de configuración de Deployment Manager

Deployment Manager usa tres tipos de archivo diferentes para describir una implementación. Cada tipo se describe a continuación:

  • Las configuraciones son archivos YAML que describen los recursos y sus propiedades. Para las funciones personalizadas de Cloud IAM, cada archivo YAML especifica todas las propiedades para una o más funciones personalizadas, como su nombre, descripción y permisos.
  • Los esquemas especifican todas las propiedades posibles para un recurso dado y sus valores predeterminados. Para las funciones personalizadas de Cloud IAM, hay esquemas para las funciones personalizadas a nivel de proyecto y de la organización.
  • Las plantillas, que son archivos Jinja o Python que mejoran las configuraciones cuando se te permite dividir una configuración en partes reutilizables. Para las funciones personalizadas de Cloud IAM, existen dos plantillas proporcionadas: una destinada a funciones personalizadas a nivel de proyecto y otra a funciones personalizadas a nivel de la organización.

Para obtener más información sobre estos tipos, consulta Información básica de Deployment Manager.

Antes de comenzar

Si no estás familiarizado con Deployment Manager, primero consulta la Guía de inicio rápido. Luego, sigue los pasos a continuación:

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En GCP Console, en la página de selección de proyecto, selecciona o crea un proyecto de GCP.

    Ir a la página de selección de proyecto

  3. Asegúrate de tener habilitada la facturación para tu proyecto de Google Cloud Platform. Obtén información sobre cómo confirmar que tienes habilitada la facturación para tu proyecto.

  4. Habilita lasDeployment Manager and Cloud IAMAPIAPI.

    Habilita lasAPI

  5. Instala e inicializa el SDK de Cloud.

Una vez que se hayan completado estos requisitos previos, puedes comenzar a usar Deployment Manager con Cloud IAM para mantener tus funciones personalizadas.

Otorga permisos a la cuenta de servicio de las API de Google

Para mantener las funciones personalizadas con Deployment Manager, primero debes otorgar los permisos correspondientes a la cuenta de servicio de las API de Google. Esta cuenta se crea de forma predeterminada para cada organización y proyecto.

  1. Abre la página IAM en Google Cloud Platform Console.
    Abrir la página IAM
  2. Haz clic en Seleccionar un proyecto.
  3. Selecciona un proyecto y haz clic en Abrir.
  4. En la lista de miembros, busca el miembro titulado Cuenta de servicio de API de Google.
  5. Haz clic en el menú desplegable ** Función(es) ** para la cuenta de servicio de las API de Google y, luego, haz clic en la función Funciones > Administrador de funciones.
  6. Haz clic en Guardar para aplicar la función.

Ahora que la cuenta de servicio de las API de Google tiene permiso para mantener funciones personalizadas, puedes implementar una función personalizada de muestra con Deployment Manager.

Implementa funciones personalizadas en tu proyecto

Como se describe en la sección anterior, Deployment Manager usa una combinación de archivos de configuración para describir una implementación. Para Cloud IAM, considera los siguientes dos archivos de ejemplo destinados a las funciones personalizadas de un proyecto:

project_custom_role.yaml

imports:
- path: project_custom_role.jinja

resources:
- name: custom-role
  type: project_custom_role.jinja
  properties:
    roleId: myCustomRole
    title: My Title
    description: My description.
    includedPermissions:
    - iam.roles.get
    - iam.roles.list

En este archivo YAML, se especifican las propiedades de una función personalizada llamada custom-role, que otorga permisos a iam.roles.get y iam.roles.list. Ten en cuenta que hace referencia a un archivo .jinja dos veces; estas referencias usan los valores que proporciona la plantilla de Jinja como se describe a continuación.

project_custom_role.jinja

# Copyright 2017 Google LLC. All rights reserved.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#     http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

resources:
- name: custom-role
  type: gcp-types/iam-v1:projects.roles
  properties:
    parent: projects/{{ env["project"] }}    roleId: {{ properties["roleId"] }}    role:
      title: {{ properties["title"] }}      description: {{ properties["description"] }}      stage: {{ properties["stage"] }}      includedPermissions: {{ properties["includedPermissions"] }}

Este archivo Jinja proporciona una plantilla para una función personalizada a fin de minimizar la duplicación de las mismas propiedades en muchas funciones. Los valores predeterminados se insertan desde un archivo .schema si el archivo YAML correspondiente no especifica valores para cada propiedad.

Para implementar esta función personalizada con Deployment Manager, haz lo siguiente:

  1. Descarga los contenidos de este repositorio de GitHub en tu máquina local.
  2. En una ventana de la terminal, navega hasta el directorio examples/v2/iam_custom_role/jinja en el repositorio descargado. Este contiene el archivo project_custom_role.yaml y los archivos Jinja asociados.
  3. Ejecuta el siguiente comando para implementar la función personalizada de ejemplo y reemplaza el valor del marcador de posición [YOUR-DEPLOYMENT-NAME] por el nombre de implementación que elijas:

    gcloud deployment-manager deployments create \
       [YOUR-DEPLOYMENT-NAME] --config project_custom_role.yaml
    
  4. Espera a que se complete la operación. Se muestran la huella digital de la implementación y un indicador de progreso:

    The fingerprint of the deployment is PUo2fmKdoFdJqiLViHjT3Q==
    Waiting for create [operation-1513228867042-560460d157ad1-b4ababb8-c6a7dddc]...done.
    
  5. Si la operación fue exitosa, verás el siguiente mensaje de estado:

    Create operation operation-1513228867042-560460d157ad1-b4ababb8-c6a7dddc completed successfully.
    NAME         TYPE                             STATE      ERRORS  INTENT
    custom-role  gcp-types/iam-v1:projects.roles  COMPLETED  []
    

Visualiza tu función personalizada implementada

Para ver tu función personalizada en Deployment Manager, sigue los pasos a continuación:

  1. En una ventana de la terminal, ejecuta el siguiente comando:

    gcloud deployment-manager deployments describe [YOUR-DEPLOYMENT-NAME]
    
  2. Verás una descripción de la implementación, que incluye información completa sobre su estado, cualquier error y más.

    fingerprint: oaJoGesEFYvsAldP2bm5jQ==
    id: '3222872306422524501'
    insertTime: '2018-01-29T13:40:10.822-08:00'
    manifest: manifest-1517262010855
    name: [YOUR-DEPLOYMENT-NAME]
    operation:
    endTime: '2018-01-29T13:40:26.500-08:00'
    name: operation-1517262010573-563f1172be0c9-ce5f0242-239fe1af
    operationType: insert
    progress: 100
    startTime: '2018-01-29T13:40:11.535-08:00'
    status: DONE
    user: id-7201362145@my-example-project.iam.gserviceaccount.com
    NAME         TYPE                             STATE      INTENT
    custom-role  gcp-types/iam-v1:projects.roles  COMPLETED
    
  3. También puedes ver la información detallada sobre la configuración de la función personalizada si recuperas el manifiesto de la implementación. En el resultado del comando describe del paso 2 anterior, ten cuenta el ID del manifest. Copia este ID, con el prefijo manifest- incluido, y úsalo para reemplazar el valor del marcador de posición a continuación:

    gcloud deployment-manager manifests describe [YOUR-MANIFEST-ID] \
        --deployment [YOUR-DEPLOYMENT-NAME]
    
  4. El manifiesto contiene información completa sobre la implementación de la función personalizada, que incluye los contenidos sin procesar de los archivos de origen project_custom_role.yaml y project_custom_role.jinja. En particular, presta atención al bloque resources cerca de la parte inferior del manifiesto, que resume los detalles de la función personalizada:

    ...
    resources:

    • name: custom-role properties: description: My description. includedPermissions:
      • iam.roles.get
      • iam.roles.list roleId: aCustomRole stage: ALPHA title: My Title resources:
      • name: custom-role type: gcp-types/iam-v1:projects.roles type: project_custom_role.jinja ...

Para ver tu función personalizada en Google Cloud Platform Console, sigue estos pasos:

  1. Abre la página IAM en Google Cloud Platform Console.
    Abrir la página IAM
  2. Haz clic en Seleccionar un proyecto.
  3. Selecciona un proyecto y haz clic en Abrir.
  4. En el menú izquierdo, haz clic en Funciones.
  5. Haz clic en el nombre de la función personalizada nueva creada en la lista. Debería verse similar a la captura de pantalla que se muestra a continuación: