Asigna roles de IAM de Container Registry a Artifact Registry

Container Registry y Artifact Registry usan diferentes roles de Identity and Access Management para controlar el acceso a las imágenes de contenedor almacenadas en el registro.

Para facilitar la transición desde Container Registry a Artifact Registry, puedes ejecutar un comando de Google Cloud CLI que realice las siguientes acciones:

  • Identifica las políticas de permisos que se aplican a un bucket de almacenamiento de Cloud Storage que almacena imágenes para Container Registry.
  • Muestra una política con roles similares de Artifact Registry para que puedas otorgar a los usuarios existentes de Container Registry acceso a los repositorios de Artifact Registry.

El comando usa el Analizador de políticas de IAM para analizar las políticas de permisos de IAM.

Antes de comenzar

  1. Habilita Cloud Asset API.

    Habilita la API

    Debes habilitar la API en el proyecto o la organización en la que deseas analizar las políticas de permisos existentes.

  2. Instala e inicializa gcloud CLI. Para una instalación existente, actualiza a la versión más reciente con el siguiente comando:

    gcloud components update
    

Roles obligatorios

Para obtener los permisos que necesitas para analizar las políticas de permisos y otorgar acceso a los repositorios de Artifact Registry, pídele a tu administrador que te otorgue los siguientes roles de IAM en el proyecto, la carpeta o la organización que quieres analizar en busca de permisos:

Si quieres obtener más información para otorgar roles, consulta Administra el acceso.

Estos roles predefinidos contienen los permisos necesarios para analizar las políticas de permisos y otorgar acceso a los repositorios de Artifact Registry. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para analizar las políticas de permisos y otorgar acceso a los repositorios de Artifact Registry:

  • cloudasset.assets.analyzeIamPolicy
  • cloudasset.assets.searchAllResources
  • cloudasset.assets.searchAllIamPolicies
  • Para analizar las políticas con roles de IAM personalizados, haz lo siguiente: iam.roles.get
  • Si quieres usar Google Cloud CLI para analizar políticas, haz lo siguiente: serviceusage.services.use
  • Para otorgar roles en un repositorio de Artifact Registry, sigue estos pasos: artifactregistry.repositories.setIamPolicy

Es posible que también puedas obtener estos permisos con funciones personalizadas o con otras funciones predefinidas.

Cómo usar la herramienta de creación de mapas

La herramienta de asignación verifica la existencia de políticas para un nombre de host de Container Registry especificado, como gcr.io.

La herramienta verifica los conjuntos de permisos que se encuentran en los roles predefinidos de Cloud Storage y los asigna a los roles de Artifact Registry. Para ver una comparación de los permisos de Cloud Storage con los roles de Artifact Registry, consulta Asignaciones de funciones.

Para usar la herramienta de asignación de roles, sigue estos pasos:

  1. Ejecuta la herramienta de asignación:

    gcloud beta artifacts docker upgrade print-iam-policy HOSTNAME \
        --project=PROJECT_ID > POLICY_FILENAME
    

    Reemplaza los siguientes valores:

    • HOSTNAME es el nombre de host de Container Registry que quieres que la herramienta analice:

      • gcr.io
      • asia.gcr.io
      • eu.gcr.io
      • us.gcr.io
    • PROJECT_ID es el ID del proyecto de Google Cloud con el host de registro que estás analizando.

    • POLICY_FILE es el nombre de archivo de la política, en formato YAML, que mostrará la herramienta.

    Con el siguiente comando de ejemplo, se analiza el bucket de almacenamiento de gcr.io en el proyecto my-project para detectar políticas de permisos que se aplican directamente al bucket o se heredan del ID de la organización superior 101231231231 y sus elementos subordinados.

    gcloud beta artifacts docker upgrade print-iam-policy gcr.io \
        --project=my-project > gcr-io-policy.yaml
    

    El comando muestra un archivo de política en formato YAML con vinculaciones de funciones de Artifact Registry, basadas en las políticas de permisos existentes para el bucket de almacenamiento. Si el proyecto superior del bucket de almacenamiento está en una organización, el archivo de políticas incluye principales que tienen acceso otorgado a nivel de organización o carpeta.

    En el siguiente ejemplo, se incluyen vinculaciones de roles de Artifact Registry para lo siguiente:

    • Agentes de servicio de Cloud Build, Compute Engine y Container Registry. Los agentes de servicio son cuentas de servicio administradas por Google que actúan en nombre de los servicios de Google Cloud.
    • La cuenta de usuario user@example.com
    • La cuenta de servicio administrada por el usuario deploy@my-project.iam.gserviceaccount.com.
    bindings:
    - members:
      - service-3213213213213@gcp-sa-cloudbuild.iam.gserviceaccount.com
      - user:user@example.com
      role: roles/artifactregistry.repoAdmin
    - members:
      - serviceAccount:deploy@my-project.iam.gserviceaccount.com
      - serviceAccount:service-1231231231231@@compute-system.iam.gserviceaccount.com
      - serviceAccount:service-1231231231231@containerregistry.iam.gserviceaccount.com
      role: roles/artifactregistry.reader
    
  2. Quita la línea para el agente de servicio de Container Registry del archivo de políticas, ya que esa cuenta de servicio no requiere acceso a tus repositorios de Artifact Registry. El sufijo de la dirección de correo electrónico del agente de servicio es containerregistry.iam.gserviceaccount.com.

    En la política de ejemplo del paso anterior, la línea con el agente de servicio de Container Registry es la siguiente:

    - serviceAccount:service-1231231231231@containerregistry.iam.gserviceaccount.com
    
  3. Revisa las otras vinculaciones de roles para confirmar que sean adecuadas.

    Artifact Registry tiene funciones predefinidas adicionales que puedes tener en cuenta para algunas principales. Por ejemplo, el administrador de repositorios Create-on-push de Artifact Registry permite que una principal cree repositorios gcr.io en Artifact Registry, pero no le permite crear otros repositorios de Artifact Registry.

  4. Agrega vinculaciones de roles para cualquier principal que falte en el archivo de políticas.

    Es posible que falten las siguientes principales en el archivo de política que se muestra:

    • Las principales con roles personalizados no tienen los conjuntos de permisos que la herramienta usó para asignar roles.
    • Principales a las que se les otorgó acceso a una organización o carpeta superior si no tienes permisos para ver una organización o carpeta superior.
  5. Aplica las vinculaciones de políticas a tus repositorios de Artifact Registry.

    gcloud artifacts repositories set-iam-policy REPOSITORY FILENAME \
        --project=PROJECT_ID \
        --location=LOCATION
    

    Reemplaza los siguientes valores:

    • REPOSITORY es el nombre del repositorio.
    • POLICY_FILENAME es el nombre del archivo de política que aplicas al repositorio.
    • PROJECT_ID es el ID del proyecto.
    • LOCATION es la ubicación regional o multirregional del repositorio.

    En el siguiente ejemplo para el proyecto my-project, se aplica la política del archivo gcr-io-policy.yaml al repositorio llamado gcr.io en la multirregión us:

    gcloud artifacts repositories set-iam-policy gcr.io gcr-io-policy.yaml \
        --project=my-project \
        --location=us
    

    Si deseas aplicar vinculaciones de funciones a un recurso de nivel superior, edita la política de la organización, el proyecto o la carpeta existente con las vinculaciones que deseas agregar.

Asignaciones de roles

En la siguiente tabla, se muestra qué roles predefinidos de Artifact Registry se deben otorgar a los usuarios existentes de Container Registry según los permisos de Cloud Storage que tengan.

Permisos necesarios en el rol Rol de Artifact Registry
storage.objects.get
storage.objects.list
Lector de Artifact Registry
storage.buckets.get
storage.objects.get
storage.objects.list
storage.objects.create
Escritor de Artifact Registry
storage.buckets.get
storage.objects.get
storage.objects.list
storage.objects.create
storage.objects.delete
Administrador del repositorio de Artifact Registry
storage.buckets.get
storage.objects.get
storage.objects.list
storage.objects.create
storage.buckets.create
Administrador de Artifact Registry