Mantenimiento de las funciones personalizadas con Deployment Manager

Información general

Las funciones personalizadas de la administración de identidades y accesos te permiten otorgar permisos detallados a cuentas de usuario y de servicio. A diferencia de las funciones predefinidas, las cuales Google mantiene y se actualizan 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

Antes de comenzar

  • Enable the IAM and Cloud Deployment Manager APIs.

    Enable the APIs

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:

  • Control de acceso a permisos nuevos: tienes una función personalizada que contiene permisos para un servicio de Google Cloud. El servicio agrega nuevas funciones 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 el rol personalizado, puedes usar Deployment Manager para actualizar su configuración y avanzar a la etapa BETA sin usar la consola de Google Cloud.
  • Comprende 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, es más fácil compartir, aprender de los patrones de uso y aplicar controles de acceso en múltiples proyectos.

Comprende 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. En el caso de las funciones personalizadas de la administración de identidades y accesos (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. En el caso de las funciones personalizadas de 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 la configuración, ya que te permiten dividir una configuración en partes reutilizables. En el caso de las funciones personalizadas de 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. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Deployment Manager and IAM APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Deployment Manager and IAM APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init

Una vez que se hayan completado estos requisitos, puedes comenzar a usar Deployment Manager con la IAM para mantener las 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. En la consola de Google Cloud, ve a la página IAM.

    Ve a la página IAM

  2. En la lista de principales, busca el principal con el nombre Agente de servicios de las API de Google.

  3. Para editar las funciones de la cuenta de servicio, haz clic en el botón Editar  y, luego, agrega la función Funciones > Administrador de funciones.

  4. 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 IAM, considera los dos archivos de ejemplo siguientes 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 la consola de Google Cloud, sigue estos pasos:

  1. En la consola de Google Cloud, ve a la página IAM.

    Ve a la página IAM

  2. Selecciona un proyecto y haz clic en Abrir.

  3. En el menú izquierdo, haz clic en Funciones.

  4. 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: