Control de acceso con IAM

En esta página, se describe el control de acceso con Identity and Access Management (IAM) en Artifact Registry.

Los permisos predeterminados de Artifact Registry minimizan el esfuerzo de configuración cuando se implementa una canalización de CI/CD. También puedes integrar Artifact Registry con herramientas de CI/CD de terceros y configurar los permisos y la autenticación necesarios para acceder a los repositorios.

Si usas Artifact Analysis a fin de trabajar con metadatos de contenedores, como vulnerabilidades encontradas en imágenes, consulta la documentación de Artifact Analysis a fin de obtener información sobre cómo otorgar acceso para ver o administrar metadatos.

Antes de comenzar

  1. Habilita Artifact Registry, incluida la habilitación de la API y la instalación de Google Cloud CLI.
  2. Si quieres aplicar permisos específicos del repositorio, crea un repositorio de Artifact Registry para tus paquetes.

Descripción general

Los permisos y las funciones de IAM determinan tu capacidad para crear, ver, editar o borrar datos en un repositorio de Artifact Registry.

Un rol es un conjunto de permisos. No puedes otorgar permisos principales directamente. En su lugar, les otorgas una función. Cuando otorgas un rol a una principal, le otorgas todos los permisos que el rol contiene. Puedes asignar varios roles a la misma principal.

Permisos predeterminados de Google Cloud

De forma predeterminada, los siguientes permisos se aplican a los servicios de CI/CD de Google Cloud en el mismo proyecto que Artifact Registry:

Si todos tus servicios están en el mismo proyecto de Google Cloud y los permisos predeterminados satisfacen tus necesidades, no es necesario que configures los permisos.

Debes configurar los permisos de Artifact Registry para estos servicios si sucede lo siguiente:

  • Deseas usar estos servicios para acceder a Artifact Registry en otro proyecto. En el proyecto con Artifact Registry, otorga el grupo de identidades para cargas de trabajo o la cuenta de servicio de cada servicio a la función requerida. Si te conectas a Cloud Run, otorga al agente de servicio de Cloud Run la función requerida.
  • estás usando una versión de GKE que no tiene compatibilidad integrada para extraer imágenes de Artifact Registry. Consulta la sección de GKE para obtener instrucciones de configuración.
  • Deseas que la cuenta de servicio predeterminada tenga acceso de lectura y escritura a los repositorios. Consulta la siguiente información para obtener más detalles:
  • usas una cuenta de servicio proporcionada por el usuario para tus entornos de ejecución en lugar de la predeterminada. En el proyecto con Artifact Registry, otorga a tu cuenta de servicio la función requerida.

Integración con terceros

Para los clientes de terceros, debes configurar permisos y autenticación.

En general, las aplicaciones que se ejecutan fuera de Google Cloud usan claves de cuentas de servicio para acceder a los recursos de Google Cloud. Sin embargo, las claves de cuentas de servicio son credenciales potentes y pueden representar un riesgo de seguridad si no se administran de forma correcta.

La federación de identidades para cargas de trabajo te permite usar Identity and Access Management para otorgar funciones de IAM a las identidades externas, incluida la capacidad de usar la identidad de cuentas de servicio. Este enfoque elimina la carga de mantenimiento y seguridad asociada con las claves de las cuentas de servicio.

Usa la federación de identidades para cargas de trabajo:

  1. Crea un grupo de federación de identidades para cargas de trabajo.
  2. Crea un proveedor de federación de identidades para cargas de trabajo.
  3. Otorga el rol adecuado de Artifact Registry al grupo de identidades para cargas de trabajo para permitir el acceso al repositorio.
  4. Configura tu cliente de terceros para autenticar con Artifact Registry.

Usa una cuenta de servicio:

  1. Crea una cuenta de servicio que actúe en nombre de tu aplicación o elige una cuenta de servicio existente que se use para la automatización de CI/CD.
  2. Otorga la función adecuada de Artifact Registry a la cuenta de servicio para proporcionar acceso al repositorio.
  3. Configura tu cliente de terceros para autenticar con Artifact Registry.

GitLab en Google Cloud

La integración de GitLab en Google Cloud usa la federación de identidades de cargas de trabajo para la autorización y autenticación de las cargas de trabajo de GitLab en Google Cloud sin la necesidad de cuentas de servicio ni claves de cuenta de servicio. Para obtener más información sobre cómo se usa la federación de identidades para cargas de trabajo en esta asociación, consulta Descripción general de la autenticación.

Si deseas configurar la federación de identidades para cargas de trabajo y las funciones de IAM necesarias para GitLab en Google Cloud, consulta el instructivo de GitLab Políticas de federación de identidades para cargas de trabajo de Google Cloud y de IAM.

Para conectar tu repositorio de Artifact Registry, sigue el instructivo de GitLab Google Artifact Registry.

Funciones y permisos

Cada método de la API de Artifact Registry requiere que la principal (usuario, grupo o cuenta de servicio) que realiza la solicitud tenga los permisos necesarios para usar el recurso. Los permisos se otorgan a las principales mediante la configuración de políticas que otorgan a la principal una función predefinida en el recurso.

Puedes otorgar roles en el proyecto de Google Cloud o en el repositorio de Artifact Registry.

Roles predefinidos de Artifact Registry

IAM proporciona funciones predefinidas que otorgan acceso a recursos específicos de Google Cloud y evitan el acceso no autorizado a otros recursos.

Usa las siguientes funciones predefinidas para repositorios estándar, virtuales y remotos en el dominio pkg.dev:

Rol Descripción
Lector de Artifact Registry
(roles/artifactregistry.reader)
Visualiza y obtén artefactos y metadatos de repositorios.
Escritor de Artifact Registry
(roles/artifactregistry.writer)
Lee y escribe artefactos.
Administrador del repositorio de Artifact Registry
(roles/artifactregistry.repoAdmin)
Lee, escribe y borra artefactos.
Administrador de Artifact Registry
(roles/artifactregistry.admin)
Crear y administrar repositorios y artefactos

Las siguientes funciones predefinidas adicionales incluyen permisos para crear repositorios de gcr.io y alojar imágenes en el dominio gcr.io. Las funciones no incluyen permisos para crear otros formatos de repositorio en Artifact Registry en el dominio pkg.dev. Estas funciones admiten la retrocompatibilidad con Container Registry, ya que Container Registry usa el primer envío de una imagen de contenedor para crear cada registro multirregional.

Rol Descripción
Escritor de creación en push de Artifact Registry (roles/artifactregistry.createOnPushWriter) Lee y escribe artefactos. Crear repositorios de gcr.io
Administrador de repositorio Create-on-push de Artifact Registry (roles/artifactregistry.createOnPushRepoAdmin) Lee, escribe y borra artefactos. Crear repositorios de gcr.io

Para obtener una lista completa de los permisos individuales de cada función, consulta Roles de Artifact Registry. También puedes usar el comando gcloud iam roles describe para ver una lista de los permisos de cada función.

Funciones de IAM básicas

Las funciones de IAM básicas permiten que los usuarios tengan acceso global a nivel de proyecto a todos los recursos de Google Cloud. Usa funciones predefinidas para acceder al repositorio siempre que sea posible, de modo que los usuarios y las cuentas de servicio solo tengan los permisos necesarios.

En la siguiente tabla, se enumeran las funciones básicas que existían antes de IAM y las funciones de IAM de Artifact Registry que estas incluyen:

Rol Título de la función incluye la función
roles/viewer Lector roles/artifactregistry.reader
roles/editor Editor
  • roles/artifactregistry.writer
  • roles/artifactregistry.repoAdmin
roles/owner Propietario roles/artifactregistry.admin

Otorga permisos

Otorga permisos a nivel de proyecto si los mismos permisos se aplican a todos los repositorios del proyecto. Si algunas cuentas requieren diferentes niveles de acceso, otorga funciones a nivel de repositorio.

Si otorgas permisos en un repositorio virtual, esos permisos se aplican a todos los repositorios upstream disponibles a través de este, sin importar los permisos individuales del repositorio.

Si asignas roles con el comando gcloud, puedes especificar una sola vinculación de rol para una principal o usar un archivo de política para definir varias vinculaciones.

Se usa la siguiente plantilla de políticas de referencia para los ejemplos de esta página. El archivo de políticas de referencia se llama policy.yaml. La plantilla contiene ejemplos de nombres de cuentas de servicio y de usuario. Reemplaza estos usuarios y cuentas de servicio de ejemplo según corresponda para tu proyecto.

Para obtener más detalles sobre el formato de la política, consulta la documentación de la política de IAM.

bindings:

- members:
  - user: user@gmail.com
  role: roles/owner

- members:
  - serviceAccount: repo-readonly@iam.gserviceaccount.com
  - user: user2@gmail.com
  role: roles/artifactregistry.reader

- members:
  - serviceAccount: repo-write@iam.gserviceaccount.com
  role: roles/artifactregistry.writer

- members:
  - serviceAccount: repo-admin@iam.gserviceaccount.com
  role: roles/artifactregistry.repoAdmin

- members:
  - serviceAccount: ar-admin@iam.gserviceaccount.com
  role: roles/artifactregistry.admin

Otorga permisos en todo el proyecto

Otorga una función a nivel de proyecto si los mismos permisos se aplican a todos los repositorios del proyecto.

Para agregar un usuario o una cuenta de servicio a un proyecto y otorgarle una función de Artifact Registry, haz lo siguiente:

Console

  1. Abre la página de IAM en la consola de Google Cloud.

    Abrir la página IAM

  2. Haz clic en Seleccionar un proyecto, elige el proyecto en el que se ejecuta Artifact Registry y haz clic en Abrir.

  3. Haz clic en Agregar.

  4. Ingrese una dirección de correo electrónico. Puedes agregar personas individuales, cuentas de servicio o Grupos de Google como principales.

  5. Selecciona un rol para la principal. De acuerdo con el principio de seguridad de privilegio mínimo, considera otorgar la menor cantidad de privilegios necesarios para evitar el acceso no deseado a otros recursos.

  6. Haz clic en Guardar.

gcloud

  1. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

    En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

  2. Para otorgar un rol a una sola principal, ejecuta el siguiente comando:

    gcloud projects add-iam-policy-binding PROJECT \
       --member=PRINCPAL \
       --role=ROLE
    

    donde

    • PROJECT es el ID del proyecto en el que se ejecuta Artifact Registry.
    • PRINCIPAL es el principal al que se agregará la vinculación. Usa el formulario user|group|serviceAccount:email o domain:domain.

      Ejemplos: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com o domain:example.domain.com.

    • ROLE es la función que deseas otorgar.

    Para obtener más información, consulta la documentación de add-iam-policy-binding.

    Para otorgar funciones mediante un archivo de políticas, ejecuta el siguiente comando:

    gcloud projects set-iam-policy PROJECT /PATH/TO/policy.yaml

    Donde

    • PROJECT es el ID del proyecto o el identificador completamente calificado para el proyecto en el que se ejecuta Artifact Registry.
    • /PATH/TO/policy.yaml es la ruta de acceso y el nombre de archivo del archivo de políticas.

    Para obtener la política configurada actual, ejecuta el siguiente comando:

    gcloud projects get-iam-policy PROJECT

    En el ejemplo anterior, PROJECT es el ID del proyecto o el identificador completamente calificado para el proyecto.

    Para obtener más información, consulta la documentación de set-iam-policy.

Otorga permisos específicos del repositorio

Otorga permisos a nivel de repositorio cuando desees que los usuarios o las cuentas de servicio tengan diferentes niveles de acceso para cada repositorio del proyecto.

Console

Para otorgar acceso a un repositorio específico, haz lo siguiente:

  1. Abre la página Repositorios en la consola de Google Cloud.

    Abrir la página Repositorios

  2. Selecciona el repositorio adecuado.

  3. Si no se muestra el panel de información, haz clic en Mostrar panel de información en la barra de menú.

  4. En la pestaña Permisos, haz clic en Agregar principal.

  5. Ingrese una dirección de correo electrónico. Puedes agregar personas, cuentas de servicio o Grupos de Google como principales.

  6. Selecciona un rol para la principal. Recomendamos darle a la principal la menor cantidad de privilegios necesarios.

  7. Haz clic en Guardar.

gcloud

  1. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

    En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

  2. Puedes configurar un conjunto de IAM de vinculaciones de políticas individuales o usar un archivo de políticas.

    Para otorgar un rol a una sola principal, ejecuta el siguiente comando:

    gcloud artifacts repositories add-iam-policy-binding REPOSITORY \
       --location=LOCATION \
       --member=PRINCIPAL \
       --role=ROLE
    

    donde

    • REPOSITORY es el ID del repositorio.
    • PRINCIPAL es el principal al que se agregará la vinculación. Usa el formulario user|group|serviceAccount:email o domain:domain.

      Ejemplos: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com o domain:example.domain.com.

    • ROLE es la función que deseas otorgar.

    • LOCATION es la ubicación regional o multirregional del repositorio.

    Por ejemplo, si deseas agregar una vinculación de una política de IAM para la función roles/artifactregistry.writer para el usuario write@gmail.com con el repositorio my-repo en la ubicación --us-central1, ejecuta lo siguiente:

    gcloud artifacts repositories add-iam-policy-binding my-repo \
    --location=us-central1 --member=user:write@gmail.com --role=roles/artifactregistry.writer
    

    Para otorgar funciones mediante un archivo de políticas, ejecuta el siguiente comando:

    gcloud artifacts repositories set-iam-policy REPOSITORY /PATH/TO/policy.yaml --location=LOCATION

    Donde

    • REPOSITORY es el ID del repositorio.
    • /PATH/TO/policy.yaml es la ruta de acceso y el nombre de archivo del archivo de políticas.
    • LOCATION es la ubicación regional o multirregional del repositorio.

    Por ejemplo, a fin de establecer la política de IAM del repositorio my-repo en la ubicación --us-central1 con la política definida en policy.yaml, ejecuta lo siguiente:

    gcloud artifacts repositories set-iam-policy my-repo policy.yaml --location=us-central1
    

Terraform

Usa el recurso google_artifact_registry_repository_iam para configurar una política de IAM. En el siguiente ejemplo, se define una cuenta de servicio con el nombre de recurso repo-account y se le otorga acceso de lectura a un repositorio con el nombre de recurso my-repo.

Si es la primera vez que usas Terraform para Google Cloud, consulta la página Primeros pasos con Google Cloud en el sitio web de HashiCorp.

provider "google" {
    project = "PROJECT-ID"
}

resource "google_artifact_registry_repository" "my-repo"     {
  provider = google-beta

  location = "LOCATION"
  repository_id = "REPOSITORY"
  description = "DESCRIPTION"
  format = "FORMAT"
}

resource "google_service_account" "repo-account" {
  provider = google-beta

  account_id   = "ACCOUNT-ID"
  display_name = "Repository Service Account"
}

resource "google_artifact_registry_repository_iam_member" "repo-iam" {
  provider = google-beta

  location = google_artifact_registry_repository.my-repo.location
  repository = google_artifact_registry_repository.my-repo.name
  role   = "roles/artifactregistry.reader"
  member = "serviceAccount:${google_service_account.repo-account.email}"
}

ACCOUNT-ID es el ID de la cuenta de servicio. Esta es la parte del campo de correo electrónico de la cuenta de servicio antes del símbolo @.

Para obtener más ejemplos, consulta la documentación del recurso google_artifact_registry_repository_iam.

Configura el acceso público a un repositorio

Si tienes artefactos que deseas que estén disponibles para cualquier persona en Internet sin necesidad de autenticación, almacénalos en un repositorio que hagas público.

Para configurar un repositorio para acceso público de solo lectura, otorga el rol de lector de Artifact Registry a la principal allUsers. También recomendamos limitar las cuotas de solicitudes de usuarios para que un solo usuario no pueda agotar la cuota general de tu proyecto.

Console

  1. Abre la página Repositorios en la consola de Google Cloud.

    Abrir la página Repositorios

  2. Selecciona el repositorio adecuado.

  3. Si no se muestra el panel de información, haz clic en Mostrar panel de información en la barra de menú.

  4. En la pestaña Permisos, haz clic en Agregar principal.

  5. En el campo Principales nuevas, ingresa allUsers.

  6. Selecciona el rol Lector de Artifact Registry.

  7. Establece un límite por usuario en las solicitudes a la API de Artifact Registry para evitar el uso inadecuado por parte de usuarios no autenticados. Consulta Limita el uso para obtener instrucciones.

gcloud

  1. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

    En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

  2. Ejecuta el siguiente comando:

    gcloud artifacts repositories add-iam-policy-binding REPOSITORY \
    --location=LOCATION --member=allUsers --role=ROLE
    

    donde

    • REPOSITORY es el ID del repositorio.

    • ROLE es la función que deseas otorgar.

    • LOCATION es la ubicación regional o multirregional del repositorio.

    Por ejemplo, para configura el repositorio my-repo en la ubicación --us-central1 como un repositorio público, ejecuta lo siguiente:

    gcloud artifacts repositories add-iam-policy-binding my-repo \
     --location=us-central1 --member=allUsers --role=roles/artifactregistry.reader
    
  3. Establece un límite por usuario en las solicitudes a la API de Artifact Registry para evitar el uso inadecuado por parte de usuarios no autenticados. Consulta Limita el uso para obtener instrucciones.

Revoca permisos

Para revocar el acceso a un repositorio, quita la principal de la lista de principales autorizadas.

Para quitar el acceso público de un repositorio, quita la principal allUsers.

Console

Para revocar permisos, haz lo siguiente:

  1. Abre la página Repositorios en la consola de Google Cloud.

    Abrir la página Repositorios

  2. Selecciona el repositorio adecuado.

  3. Si no se muestra el panel de información, haz clic en Mostrar panel de información en la barra de menú.

  4. En la pestaña Permisos, expande la principal adecuada. Si haces que un repositorio público sea privado, expande la principal allUsers.

  5. Haz clic en Quitar principal para revocar el acceso.

gcloud

  1. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

    En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

  2. Para revocar una función a nivel de proyecto, ejecuta el siguiente comando:

    gcloud projects remove-iam-policy-binding PROJECT \
       --member=PRINCIPAL \
       --role=ROLE
    
    • PROJECT es el ID del proyecto.
    • PRINCIPAL es la principal para la que se quitará la vinculación. Usa el formulario user|group|serviceAccount:email o domain:domain.

      Ejemplos: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com o domain:example.domain.com.

    • ROLE es la función que deseas revocar.

    Para revocar una función de un repositorio, ejecuta el siguiente comando:

    gcloud artifacts repositories remove-iam-policy-binding REPOSITORY
       --location=LOCATION \
       --member=PRINCIPAL \
       --role=ROLE
    

    donde

    • REPOSITORY es el ID del repositorio.
    • PRINCIPAL es la principal para la que se quitará la vinculación. Usa el formulario user|group|serviceAccount:email o domain:domain.

      Ejemplos: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com o domain:example.domain.com.

      Para revocar el acceso público al repositorio, especifica la principal allUsers.

    • ROLE es la función que deseas revocar.

    Por ejemplo, a fin de quitar una vinculación de una política para la función roles/artifactregistry.writer del usuario write@gmail.com con el repositorio my-repo en la ubicación --us-central1, ejecuta lo siguiente:

    gcloud artifacts repositories remove-iam-policy-binding my-repo \
       --location=us-central1 \
       --member=user:write@gmail.com \
       --role=roles/artifactregistry.writer

    Para revocar el acceso público a my-repo en la ubicación --us-central1, ejecuta lo siguiente:

    gcloud artifacts repositories remove-iam-policy-binding my-repo \
       --location=us-central1 \
       --member=allUsers \
       --role=roles/artifactregistry.reader
    

Otorga acceso condicional con etiquetas

Esta función está en vista previa.

Los administradores de proyectos pueden crear etiquetas para los recursos de todo Google Cloud y administrarlas en Resource Manager. Cuando adjuntas una etiqueta a un repositorio de Artifact Registry, los administradores pueden usar la etiqueta con condiciones de IAM para otorgar acceso condicional al repositorio.

No puedes adjuntar etiquetas a artefactos individuales.

Para obtener más información, consulta la siguiente documentación:

Integra los servicios de Google Cloud

Para la mayoría de las cuentas de servicio de Google Cloud, la configuración del acceso a un registro solo requiere otorgar los permisos de IAM adecuados.

Permisos predeterminados para los servicios de Google Cloud

Los servicios de Google Cloud, como Cloud Build o Google Kubernetes Engine, usan una cuenta de servicio predeterminada o administrada por Google para interactuar con los recursos dentro del mismo proyecto.

Debes configurar o modificar los permisos tú mismo si:

  • El servicio de Google Cloud está en un proyecto diferente que Artifact Registry.
  • Los permisos predeterminados no satisfacen tus necesidades. Por ejemplo, la cuenta de servicio predeterminada de Compute Engine tiene acceso de solo lectura al almacenamiento en el mismo proyecto. Si quieres enviar una imagen de una VM a Artifact Registry, puedes modificar los permisos de la cuenta de servicio de la VM o usar una cuenta diferente con los permisos necesarios.
  • usas una cuenta de servicio proporcionada por el usuario para interactuar con Artifact Registry en lugar de la cuenta de servicio predeterminada.

Por lo general, las siguientes cuentas de servicio acceden a Artifact Registry. La dirección de correo electrónico de la cuenta de servicio incluye el ID o número de proyecto de Google Cloud del proyecto en el que se ejecuta el servicio.

Servicio Cuenta de servicio Dirección de correo electrónico Permisos
Entorno flexible de App Engine Cuenta de servicio de App Engine PROJECT-ID@appspot.gserviceaccount.com Rol de editor, puede leer y escribir en repositorios
Compute Engine Cuenta de servicio predeterminada de Compute Engine PROJECT-NUMBER-compute@developer.gserviceaccount.com Rol de editor, limitado al acceso de solo lectura a los repositorios
Cloud Build Cuenta de servicio de Cloud Build PROJECT-NUMBER@cloudbuild.gserviceaccount.com
Los permisos predeterminados incluyen el acceso de lectura y escritura a los repositorios y la capacidad de crear repositorios de gcr.io.
Cloud Run Agente de servicio de Cloud Run
El agente de servicio para run.googleapis.com.
service-PROJECT-NUMBER@serverless-robot-prod.iam.gserviceaccount.com Permisos de lector, limitados al acceso de solo lectura a los repositorios
GKE Cuenta de servicio predeterminada de Compute Engine
La cuenta de servicio predeterminada para los nodos.
PROJECT-NUMBER-compute@developer.gserviceaccount.com Rol de editor, limitado al acceso de solo lectura a los repositorios

Otorga acceso a las instancias de Compute Engine

Las instancias de VM que acceden a los repositorios deben tener configurados el permiso de acceso almacenamiento y los permisos de Artifact Registry.

Mientras que el nivel de acceso de una cuenta de servicio está determinado por las funciones de IAM otorgadas a la cuenta de servicio, los permisos de acceso en una instancia de VM determinan los permisos predeterminados de OAuth para las solicitudes realizadas a través de gcloud CLI y las bibliotecas cliente en la instancia. Como resultado, es posible que los permisos de acceso limiten aún más el acceso a los métodos de la API cuando se autentica con las credenciales predeterminadas de la aplicación.

Compute Engine usa los siguientes valores predeterminados:

  • La cuenta de servicio predeterminada de Compute Engine es la identidad para las instancias de VM. La dirección de correo electrónico de la cuenta de servicio tiene el sufijo @developer.gserviceaccount.com.
  • La cuenta de servicio predeterminada tiene la función básica de editor de IAM, si aún no inhabilitaste este comportamiento.
  • Las instancias que crees con la cuenta de servicio predeterminada tendrán los permisos de acceso predeterminados de Compute Engine, incluido el acceso de solo lectura al almacenamiento. Si bien el rol de editor generalmente otorga acceso de escritura, el permiso de acceso de almacenamiento read-only limita la cuenta de servicio de la instancia a descargar artefactos solo desde cualquier repositorio en el mismo proyecto.

Debes configurar el permiso de acceso de la cuenta de servicio si sucede lo siguiente:

  • La cuenta de servicio de VM debe acceder a un repositorio en un proyecto diferente.
  • La cuenta de servicio de VM debe realizar acciones que no sean la lectura de artefactos de repositorios. Por lo general, esto aplica herramientas de terceros en una VM que necesita enviar imágenes o ejecutar comandos de gcloud de Artifact Registry.

Para configurar los permisos y establecer el permiso de acceso, haz lo siguiente:

  1. En el proyecto que tiene la instancia de VM, obtén el nombre de la cuenta de servicio predeterminada de Compute Engine. La dirección de correo electrónico de la cuenta de servicio tiene el sufijo @developer.gserviceaccount.com.

  2. En el proyecto que tiene el repositorio, otorga permisos para que la cuenta de servicio pueda acceder al repositorio.

  3. Configura el permiso de acceso con la opción --scopes.

    1. Detén la instancia de VM. Consulta Detén una instancia.

    2. Establece el permiso de acceso mediante el siguiente comando:

      gcloud compute instances set-service-account INSTANCE --scopes=SCOPE
      

      Reemplaza SCOPE por el valor adecuado.

      • En Docker, se admiten las siguientes opciones:

        • storage-ro: Otorga permiso de lectura solo para extraer imágenes.
        • storage-rw: Otorga permiso de lectura y escritura para enviar o extraer imágenes.
        • cloud-platform: Permite ver y administrar datos, incluidos los metadatos, en el servicio de Google Cloud.
      • Para otros formatos, debes usar el permiso cloud-platform.

    3. Reinicia la instancia de VM. Consulta Inicia una instancia detenida.

Otorga acceso a los clústeres de Google Kubernetes Engine

Los clústeres y grupos de nodos de GKE pueden extraer contenedores sin ninguna configuración adicional si se cumplen todos los requisitos que se indican a continuación:

Si tu entorno de GKE no cumple con estos requisitos, las instrucciones para otorgar acceso dependerán de si usas la cuenta de servicio predeterminada de Compute Engine o una cuenta de servicio proporcionada por el usuario como identidad para tus nodos.

Cuenta de servicio predeterminada

Los siguientes requisitos de configuración se aplican a la cuenta de servicio predeterminada de Compute Engine:

  1. Si GKE está en un proyecto diferente de Artifact Registry, otorga los permisos necesarios a la cuenta de servicio.

  2. Para enviar imágenes, interactuar con repositorios para formatos que no sean contenedores o ejecutar comandos de gcloud desde tu clúster, debes configurar permisos de acceso para la cuenta de servicio cuando creas el clúster o el grupo de nodos.

  3. Si no usas una versión compatible de GKE, configura imagePullSecrets.

Cuenta de servicio proporcionada por el usuario

Si deseas usar una cuenta de servicio proporcionada por el usuario como identidad para un clúster, debes hacer lo siguiente:

  1. Otorga los permisos necesarios a la cuenta de servicio desde el proyecto de Google Cloud en el que se ejecuta Artifact Registry.

  2. De forma predeterminada, la creación de un clúster o grupo de nodos con una cuenta de servicio proporcionada por el usuario otorga el permiso de acceso cloud-platform.

    Si usas la marca --scopes con el comando gcloud container clusters create o gcloud container node-pools create, debes incluir los permisos de acceso adecuados para usar con Artifact Registry.

Configura permisos de acceso

Los permisos de acceso son el método heredado de especificar la autorización para las VM de Compute Engine. Para extraer imágenes de los repositorios de Artifact Registry, los nodos de GKE deben tener el permiso de acceso de solo lectura de almacenamiento o algún otro permiso de acceso de almacenamiento que incluya acceso de lectura al almacenamiento.

Solo puedes configurar permisos de acceso cuando creas un clúster o un grupo de nodos. No puedes cambiar los permisos de acceso en los nodos existentes.

Para especificar los permisos de acceso cuando creas un clúster, ejecuta el siguiente comando:

gcloud container clusters create NAME --scopes=SCOPES

Para especificar los permisos de acceso cuando crees un grupo de nodos, ejecuta el siguiente comando:

gcloud container node-pools create NAME --scopes=SCOPES

Reemplaza los siguientes valores:

  • NAME es el nombre del clúster o grupo de nodos.
  • SCOPES es una lista separada por comas de los permisos de acceso que se deben otorgar.

    • Para acceder a los repositorios de Docker, usa uno de los siguientes alcances:

    • storage-ro: Otorga permiso de solo lectura para extraer imágenes.

    • storage-rw: Otorga permiso de lectura y escritura para enviar o extraer imágenes.

    • cloud-platform: Permite ver y administrar datos, incluidos los metadatos, en el servicio de Google Cloud.

    • Para acceder a otros repositorios, debes usar el permiso cloud-platform.

    Para obtener una lista completa de los permisos, consulta la documentación de gcloud container clusters create o gcloud container node-pools create.

Para obtener más información sobre los permisos que puedes configurar cuando creas un clúster nuevo, consulta la documentación del comando gcloud container clusters create.

Configura un imagePullSecret

Para configurar un imagePullSecret, haz lo siguiente:

  1. En el proyecto con GKE, busca la cuenta de servicio predeterminada de Compute Engine. La dirección de correo electrónico de la cuenta tiene el sufijo @developer.gserviceaccount.com.

  2. Descarga la clave de la cuenta de servicio.

  3. En el proyecto que tiene el repositorio, verifica que haber otorgado permisos al repositorio.

  4. En el proyecto que tiene el clúster, crea un secreto imagePullSecret llamado artifact-registry con la clave de la cuenta de servicio.

    kubectl create secret docker-registry artifact-registry \
    --docker-server=https://LOCATION-docker.pkg.dev \
    --docker-email=SERVICE-ACCOUNT-EMAIL \
    --docker-username=_json_key \
    --docker-password="$(cat KEY-FILE)"
    

    Donde

    • LOCATION es la ubicación regional o multirregional del repositorio.
    • SERVICE-ACCOUNT-EMAIL es la dirección de correo electrónico de la cuenta de servicio de Compute Engine.
    • KEY-FILE es el nombre del archivo de claves de la cuenta de servicio. Por ejemplo, key.json.
  5. Abre tu cuenta de servicio predeterminada:

    kubectl edit serviceaccount default --namespace default

    Cada espacio de nombres en tu clúster de Kubernetes tiene una cuenta de servicio predeterminada llamada default. Esta cuenta de servicio predeterminada se usa para extraer la imagen del contenedor.

  6. Agrega el secreto imagePullSecret recién creado a tu cuenta de servicio predeterminada:

    imagePullSecrets:
    - name: artifact-registry
    

    Tu cuenta de servicio debería verse así:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: default
      namespace: default
      ...
    secrets:
    - name: default-token-zd84v
    # The secret you created:
    imagePullSecrets:
    - name: artifact-registry
    

Ahora, todos los Pods nuevos creados en el espacio de nombres default actual tendrán definido el secreto imagePullSecret.

Cuenta de servicio de Artifact Registry

El agente de servicio de Artifact Registry es una cuenta de servicio administrada por Google que actúa en nombre de Artifact Registry cuando interactúa con los servicios de Google Cloud. Para obtener más información sobre la cuenta y sus permisos, consulta Cuenta de servicio de Artifact Registry.

¿Qué sigue?

Después de configurar los permisos, obtén más información sobre cómo trabajar con los artefactos.