Mantén las funciones personalizadas con Deployment Manager

Fondo

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.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    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:

  • Cómo controlar el acceso a nuevos permisos: Tienes un rol personalizado 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 laGoogle Cloud consola.
  • 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:

    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.

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

    Verify that billing is enabled for your Google Cloud project.

    Enable the Deployment Manager and IAM APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

    Instala Google Cloud CLI. Después de la instalación, inicializa Google Cloud CLI ejecutando el siguiente comando:

    gcloud init

    Si usas un proveedor de identidad externo (IdP), primero debes acceder a gcloud CLI con tu identidad federada.

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

    Verify that billing is enabled for your Google Cloud project.

    Enable the Deployment Manager and IAM APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

    Instala Google Cloud CLI. Después de la instalación, inicializa Google Cloud CLI ejecutando el siguiente comando:

    gcloud init

    Si usas un proveedor de identidad externo (IdP), primero debes acceder a gcloud CLI con tu identidad federada.

    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 rol personalizado en la Google Cloud consola, 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: