Control de acceso con la gestión de identidades y accesos

En esta página se describe el control de acceso con Gestión de Identidades y Accesos (IAM) en Artifact Registry.

Los permisos predeterminados de Artifact Registry minimizan el esfuerzo de configuración al implementar un flujo de procesamiento 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 para trabajar con metadatos de contenedores, como las vulnerabilidades encontradas en las imágenes, consulta la documentación de Artifact Analysis para obtener información sobre cómo conceder acceso para ver o gestionar metadatos.

Antes de empezar

  1. Habilita Artifact Registry, lo que incluye habilitar la API e instalar la CLI de Google Cloud.
  2. Si quieres aplicar permisos específicos de un repositorio, crea un repositorio de Artifact Registry para tus paquetes.

Información general

Los permisos y los roles de gestión de identidades y accesos determinan tu capacidad para crear, ver, editar o eliminar datos en un repositorio de Artifact Registry.

Un rol es un conjunto de permisos. No puedes conceder permisos a un principal directamente, sino que debes asignarle un rol. Cuando asignas un rol a una entidad, le concedes todos los permisos que contiene el rol. Puedes conceder varios roles al mismo principal.

Google Cloud permisos predeterminados

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

  • Los permisos de Cloud Build incluyen permisos para subir y descargar artefactos.

Si todos tus servicios están en el mismo Google Cloud proyecto y los permisos predeterminados se ajustan a tus necesidades, no tienes que configurar permisos.

Debes configurar los permisos de Artifact Registry para estos servicios si se da alguna de las siguientes circunstancias:

  • Estás usando una versión de GKE que no tiene compatibilidad integrada para extraer imágenes de Artifact Registry. Consulta la sección GKE para ver las instrucciones de configuración.
  • Quieres que la cuenta de servicio predeterminada tenga acceso de lectura y escritura a los repositorios. Para obtener más información, consulta lo siguiente:
  • Estás usando una cuenta de servicio proporcionada por el usuario para tus entornos de ejecución en lugar de la cuenta de servicio predeterminada. En el proyecto con Artifact Registry, asigna a tu cuenta de servicio el rol necesario.

Integración con terceros

En el caso de los clientes de terceros, debes configurar tanto los permisos como la autenticación.

Tradicionalmente, las aplicaciones que se ejecutan fuera de Google Cloud usan claves de cuenta de servicio para acceder a los recursos Google Cloud . Sin embargo, las claves de cuentas de servicio son credenciales potentes y pueden suponer un riesgo para la seguridad si no se gestionan correctamente.

La federación de identidades de carga de trabajo te permite usar Gestión de Identidades y Accesos para conceder roles de IAM a identidades externas, incluida la capacidad de suplantar cuentas de servicio. De esta forma, se elimina la carga de mantenimiento y seguridad asociada a las claves de cuentas de servicio.

Usar la federación de identidades de carga de trabajo:

  1. Crea un grupo de federación de identidades de cargas de trabajo.
  2. Crea un proveedor de federación de identidades de carga de trabajo.
  3. Concede el rol de Artifact Registry adecuado al grupo de identidades de la carga de trabajo para permitir el acceso al repositorio. Para obtener más información, consulta Permitir que tu carga de trabajo externa acceda a recursos de Google Cloud .
  4. Si necesitas acceder a Artifact Registry durante más tiempo, configura un periodo más largo para la caducidad del token OIDC en la configuración de las credenciales.
  5. Configura tu cliente de terceros para que se autentique con Artifact Registry.

Usar una cuenta de servicio:

  1. Crea una cuenta de servicio para que actúe en nombre de tu aplicación o elige una cuenta de servicio que ya tengas y que quieras usar para la automatización de CI/CD.
  2. Asigna el rol de Artifact Registry adecuado a la cuenta de servicio para proporcionar acceso al repositorio.
  3. Configura tu cliente de terceros para que se autentique 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 la autenticación de las cargas de trabajo de GitLab en Google Cloud sin necesidad de cuentas de servicio ni claves de cuentas de servicio. Para obtener más información sobre cómo se usa la federación de identidades de cargas de trabajo en esta colaboración, consulta Google Cloud Federación de identidades de cargas de trabajo y políticas de gestión de identidades y accesos.

Para configurar Workload Identity Federation y los roles de gestión de identidades y accesos necesarios para GitLab en Google Cloud, consulta el tutorial de GitLab Google Cloud Workload Identity Federation and IAM policies (Federación de identidades de cargas de trabajo y políticas de gestión de identidades y accesos).

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

Roles y permisos

Todos los métodos de la API Artifact Registry requieren que la entidad principal que hace la solicitud tenga los permisos necesarios para usar el recurso. Los permisos se conceden a las entidades principales mediante políticas que les asignan un rol predefinido en el recurso.

Puede asignar roles en el proyecto o en el repositorio de Artifact Registry. Google Cloud

Roles predefinidos de Artifact Registry

IAM proporciona roles predefinidos que conceden acceso a recursos Google Cloud específicos.

Usa los siguientes roles predefinidos para los repositorios del dominio pkg.dev:
Rol Descripción
Lector de Artifact Registry
(roles/artifactregistry.reader)
Ver y obtener artefactos, ver metadatos de repositorios.
Escritor de Artifact Registry
(roles/artifactregistry.writer)
Leer y escribir artefactos.
Administrador del repositorio de Artifact Registry
(roles/artifactregistry.repoAdmin)
Leer, escribir y eliminar artefactos.
Administrador de Artifact Registry
(roles/artifactregistry.admin)
Crea y gestiona repositorios y artefactos.
Los siguientes roles predefinidos adicionales contienen los permisos necesarios para migrar de Container Registry a Artifact Registry.

Rol Descripción
Administrador de migración de Container Registry a Artifact Registry (roles/artifactregistry.containerRegistryMigrationAdmin) Incluye todos los permisos necesarios para ejecutar las herramientas de migración.
Escritor de Artifact Registry Create-on-push (roles/artifactregistry.createOnPushWriter) Leer y escribir artefactos. Crea repositorios gcr.io cuando insertes contenido en URLs gcr.io.
Administrador del repositorio de Artifact Registry con creación al insertar (roles/artifactregistry.createOnPushRepoAdmin) Leer, escribir y eliminar artefactos. Crea repositorios gcr.io.
Para ver una lista completa de los permisos individuales de cada rol, consulta los roles de Artifact Registry. También puedes usar el comando gcloud iam roles describe para ver una lista de permisos de cada rol.

Roles básicos de gestión de identidades y accesos

Los roles básicos son roles muy permisivos que existían antes de la introducción de la gestión de identidades y accesos. No debes conceder roles básicos en un entorno de producción, pero sí puedes hacerlo en un entorno de desarrollo o de pruebas.

Utiliza roles predefinidos para el acceso al repositorio siempre que sea posible, de forma que los usuarios y las cuentas de servicio solo tengan los permisos necesarios.

Para obtener más información sobre los roles básicos, consulta la referencia de roles básicos y predefinidos de gestión de identidades y accesos.

Conceder roles

Asigna roles a nivel de proyecto si los mismos roles se aplican a todos los repositorios del proyecto. Si algunas cuentas requieren diferentes niveles de acceso, asigna roles a nivel de repositorio.

Si asignas roles en un repositorio virtual, esos roles se aplicarán a todos los repositorios upstream disponibles a través del repositorio virtual, independientemente de los permisos de cada repositorio.

Si asignas roles mediante el comando gcloud, puedes especificar un solo enlace de rol para un principal o hacer cambios en la política a gran escala. Para ello, obtén la política de permiso de un recurso, modifícala y, a continuación, define la política de permiso modificada. Para obtener más información, consulta Conceder o revocar varios roles mediante programación.

Conceder roles en todo el proyecto

Asigna un rol a nivel de proyecto si los mismos permisos se aplican a todos los repositorios del proyecto.

Para añadir un usuario o una cuenta de servicio a un proyecto y asignarle un rol de Artifact Registry, sigue estos pasos:

Consola

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

    Abre la página de gestión de identidades y accesos.

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

  3. Haz clic en Añadir.

  4. Introduce una dirección de correo electrónico. Puedes añadir personas, cuentas de servicio o grupos de Google como principales.

  5. Selecciona un rol para la entidad. De acuerdo con el principio de seguridad de mínimos accesos, considera la posibilidad de conceder la cantidad mínima de privilegios necesarios para acceder a los recursos de Artifact Registry requeridos. Para obtener información sobre los roles y permisos predefinidos de Artifact Registry, consulta Roles predefinidos de Artifact Registry.

  6. Haz clic en Guardar.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Para conceder un rol a una sola entidad, ejecuta el siguiente comando:

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

    donde

    • PROJECT es el ID del proyecto en el que se ejecuta Artifact Registry.
    • PRINCIPAL es la cuenta principal a la que se va a añadir 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 el rol que quieres conceder.

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

    Para asignar roles mediante un archivo de política, consulta Asignar o revocar varios roles de forma programática.

Conceder roles específicos de un repositorio

Asigna roles a nivel de repositorio cuando quieras que los usuarios o las cuentas de servicio tengan diferentes niveles de acceso para cada repositorio de tu proyecto.

Consola

Para conceder acceso a un repositorio específico, sigue estos pasos:

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

    Abre 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 Añadir principal.

  5. Introduce una dirección de correo electrónico. Puedes añadir personas, cuentas de servicio o grupos de Google como principales.

  6. Selecciona un rol para la entidad. De acuerdo con el principio de seguridad de mínimos accesos, considera la posibilidad de conceder la cantidad mínima de privilegios necesarios para acceder a los recursos de Artifact Registry requeridos. Para obtener información sobre los roles y permisos predefinidos de Artifact Registry, consulta el artículo Roles predefinidos de Artifact Registry.

  7. Haz clic en Guardar.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Puedes definir un conjunto de enlaces de políticas individuales de gestión de identidades y accesos o usar un archivo de políticas.

    Para conceder un rol a una sola entidad, 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 la cuenta principal a la que se va a añadir 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 el rol que quieres conceder.

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

    Por ejemplo, para añadir una vinculación de política de gestión de identidades y accesos para el rol roles/artifactregistry.writer del usuario write@gmail.com con el repositorio my-repo en la ubicación --us-west1, ejecuta el siguiente comando:

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

    Para asignar roles mediante un archivo de política, sigue el procedimiento descrito en Asignar o revocar varios roles de forma programática con los comandos gcloud artifacts repositories get-iam-policy y gcloud artifacts repositories set-iam-policy.

  3. Terraform

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

    Si no has usado Terraform para Google Cloud, consulta la página Empezar Google Cloud del 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. Es la parte del campo de correo de la cuenta de servicio que va antes del símbolo @.

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

Configurar el acceso público a un repositorio

Si tienes artefactos que quieres que estén disponibles para cualquier usuario de Internet sin autenticación, guárdalos en un repositorio público.

Para configurar un repositorio con acceso público de solo lectura, asigna el rol Lector de Artifact Registry al principal allUsers. También te recomendamos que limites las cuotas de solicitudes de los usuarios para que un solo usuario no pueda agotar la cuota general de tu proyecto.

Consola

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

    Abre 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 Añadir principal.

  5. En el campo New principals (Nuevos directores), introduce 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 que los usuarios no autenticados hagan un uso inadecuado. Para obtener instrucciones, consulta Limitar el uso.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  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 el rol que quieres conceder.

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

    Por ejemplo, para configurar el repositorio my-repo en la ubicación --us-west1 como público, ejecuta el siguiente comando:

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

  3. Establece un límite por usuario en las solicitudes a la API de Artifact Registry para evitar que los usuarios no autenticados hagan un uso inadecuado. Para obtener instrucciones, consulta Limitar el uso.

Revocando roles

Para revocar el acceso a un repositorio, quita la entidad de la lista de entidades autorizadas.

Para retirar el acceso público a un repositorio, quita el principal allUsers.

Consola

Para revocar permisos, sigue estos pasos:

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

    Abre 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, despliega la entidad principal correspondiente. Si vas a convertir un repositorio público en privado, despliega el principal allUsers.

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

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Para revocar un rol 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 entidad principal para la que se va a eliminar el enlace. 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 el rol que quieres revocar.

    Para revocar un rol 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 entidad principal para la que se va a eliminar el enlace. 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 el elemento principal allUsers.

    • ROLE es el rol que quieres revocar.

    Por ejemplo, para quitar un enlace de política del rol roles/artifactregistry.writer del usuario write@gmail.com con el repositorio my-repo en la ubicación --us-west1, ejecuta el siguiente comando:

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

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

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

Conceder acceso condicional con etiquetas

Los administradores de proyectos pueden crear etiquetas para los recursos de Google Cloud y gestionarlas en Resource Manager. Cuando adjuntas una etiqueta a un repositorio de Artifact Registry, los administradores pueden usarla con condiciones de gestión de identidades y accesos para conceder acceso condicional al repositorio.

No puede adjuntar etiquetas a artefactos concretos.

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

Integración con Google Cloud servicios

En la mayoría de las Google Cloud cuentas de servicio, para configurar el acceso a un registro, solo hay que conceder los roles de gestión de identidades y accesos adecuados.

Cuentas de servicio predeterminadas para los servicios de Google Cloud

Google Cloud Servicios como Cloud Build o Google Kubernetes Engine usan una cuenta de servicio predeterminada o un agente de servicio para interactuar con los recursos del mismo proyecto.

Debes configurar o modificar los permisos tú mismo si:

  • El Google Cloud servicio está en un proyecto distinto de Artifact Registry.
  • Los permisos predeterminados no satisfacen sus necesidades.
  • Estás usando una cuenta de servicio proporcionada por el usuario para interactuar con Artifact Registry en lugar de la cuenta de servicio predeterminada.
  • La configuración de tu política de organización impide que se concedan roles automáticamente a las cuentas de servicio predeterminadas.

Las siguientes cuentas de servicio suelen acceder a Artifact Registry. La dirección de correo de la cuenta de servicio incluye el Google Cloud ID o número de proyecto del proyecto en el que se ejecuta el servicio.

Servicio Cuenta de servicio Dirección de correo electrónico
Entorno flexible de App Engine Cuenta de servicio de App Engine PROJECT-ID@appspot.gserviceaccount.com
Compute Engine Cuenta de servicio predeterminada de Compute Engine PROJECT-NUMBER-compute@developer.gserviceaccount.com
Cloud Build Cuenta de servicio de Compute Engine
o
Cuenta de servicio de Cloud Build antigua
En función de la configuración de tu organización, la dirección de correo de la cuenta de servicio predeterminada será una de las siguientes:
  • Compute Engine: PROJECT-NUMBER-compute@developer.gserviceaccount.com
  • Cloud Build: PROJECT-NUMBER@cloudbuild.gserviceaccount.com
Cloud Run Agente de servicio de Cloud Run
El agente de servicio de run.googleapis.com.
service-PROJECT-NUMBER@serverless-robot-prod.iam.gserviceaccount.com
GKE Cuenta de servicio predeterminada de Compute Engine
Es la cuenta de servicio predeterminada de los nodos.
PROJECT-NUMBER-compute@developer.gserviceaccount.com

En función de la configuración de la política de tu organización, es posible que se conceda automáticamente el rol Editor a la cuenta de servicio predeterminada de tu proyecto. Te recomendamos que inhabilites la asignación automática de roles aplicando la restricción de la política de organización iam.automaticIamGrantsForDefaultServiceAccounts. Si has creado tu organización después del 3 de mayo del 2024, esta restricción se aplica de forma predeterminada.

Si inhabilitas la concesión automática de roles, debes decidir qué roles quieres conceder a las cuentas de servicio predeterminadas y, a continuación, concederlos tú mismo.

Si la cuenta de servicio predeterminada ya tiene el rol Editor, te recomendamos que lo sustituyas por roles con menos permisos.Para modificar los roles de la cuenta de servicio de forma segura, usa Simulador de políticas para ver el impacto del cambio y, a continuación, asigna y revoca los roles adecuados.

Conceder acceso a instancias de Compute Engine

Las instancias de VM que acceden a los repositorios deben tener configurados tanto los permisos de Artifact Registry como el ámbito de acceso de almacenamiento.

Aunque el nivel de acceso de una cuenta de servicio se determina mediante los roles de gestión de identidades y accesos que se le hayan concedido, los permisos de acceso de una instancia de VM determinan los permisos de OAuth predeterminados de las solicitudes realizadas a través de la CLI de gcloud y las bibliotecas de cliente de la instancia. Por lo tanto, los ámbitos de acceso pueden limitar aún más el acceso a los métodos de la API al autenticarse 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 de las instancias de VM. La dirección de correo de la cuenta de servicio tiene el sufijo @developer.gserviceaccount.com.
  • La cuenta de servicio predeterminada tiene el rol básico de editor de gestión de identidades y accesos, a menos que hayas inhabilitado este comportamiento.
  • Las instancias que crees con la cuenta de servicio predeterminada tienen los ámbitos de acceso predeterminados de Compute Engine, incluido el acceso de solo lectura al almacenamiento. Aunque el rol Editor suele conceder acceso de escritura, el read-only ámbito de acceso al almacenamiento limita la cuenta de servicio de la instancia a descargar artefactos solo de cualquier repositorio del mismo proyecto.

Debes configurar el permiso de acceso de la cuenta de servicio si se da alguna de las siguientes circunstancias:

  • La cuenta de servicio de la VM necesita acceder a un repositorio de otro proyecto.
  • La cuenta de servicio de la VM debe realizar acciones distintas a la lectura de artefactos de repositorios. Esto suele aplicarse a herramientas de terceros en una VM que necesitan enviar imágenes o ejecutar comandos de gcloud de Artifact Registry.

Para configurar los roles y definir el ámbito de acceso, sigue estos pasos:

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

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

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

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

    2. Define el ámbito de acceso con el siguiente comando:

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

      Sustituye SCOPE por el valor que corresponda.

      • En Docker, se admiten las siguientes opciones:

        • storage-ro: concede permiso de lectura solo para extraer imágenes.
        • storage-rw: concede permiso de lectura y escritura para enviar o descargar imágenes.
        • cloud-platform - Ver y gestionar datos, incluidos los metadatos, en todo el Google Cloud servicio.
      • Para otros formatos, debes usar el ámbito cloud-platform.

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

Conceder acceso a clústeres de Google Kubernetes Engine

Los clústeres y los grupos de nodos de GKE pueden extraer contenedores sin necesidad de configuración adicional si se cumplen todos los requisitos siguientes:

Si tu entorno de GKE no cumple estos requisitos, las instrucciones para conceder 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 de 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 al de Artifact Registry, concede los permisos necesarios a la cuenta de servicio.

  2. Para enviar imágenes, interactuar con repositorios de formatos distintos a los contenedores o ejecutar comandos gcloud desde tu clúster, debes definir ámbitos de acceso para la cuenta de servicio al crear 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 quieres usar una cuenta de servicio proporcionada por el usuario como identidad de un clúster, debes hacer lo siguiente:

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

  2. De forma predeterminada, al crear un clúster o un grupo de nodos con una cuenta de servicio proporcionada por el usuario, se concede el ámbito 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 ámbitos de acceso adecuados para usar Artifact Registry.

Definir permisos de acceso

Los permisos de acceso son el método antiguo de especificar la autorización de las VMs de Compute Engine. Para extraer imágenes de repositorios de Artifact Registry, los nodos de GKE deben tener el ámbito de acceso de solo lectura de almacenamiento u otro ámbito de acceso de almacenamiento que incluya acceso de lectura de almacenamiento.

Solo puedes definir ámbitos de acceso al crear un clúster o un grupo de nodos. No puedes cambiar los permisos de acceso de los nodos.

Para especificar los ámbitos de acceso al crear un clúster, ejecuta el siguiente comando:

gcloud container clusters create NAME --scopes=SCOPES

Para especificar los ámbitos de acceso al crear un pool de nodos, ejecuta el siguiente comando:

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

Sustituye los siguientes valores:

  • NAME es el nombre del clúster o del grupo de nodos.
  • SCOPES es una lista separada por comas de los ámbitos de acceso que se van a conceder.

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

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

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

    • cloud-platform - Ver y gestionar datos, incluidos los metadatos, en todo el Google Cloud servicio.

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

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

Para obtener más información sobre los ámbitos que puedes definir al crear un clúster, consulta la documentación del comando gcloud container clusters create.

Configurar un imagePullSecret

Para configurar un imagePullSecret, sigue estos pasos:

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

  2. Descarga la clave de la cuenta de servicio.

  3. En el proyecto con el repositorio, comprueba que has concedido permisos al repositorio.

  4. En el proyecto que contiene tu 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)"
    

    Haz los cambios siguientes:

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

    kubectl edit serviceaccount default --namespace default

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

  6. Añade el secreto imagePullSecret que acabas de crear a tu cuenta de servicio predeterminada:

    imagePullSecrets:
    - name: artifact-registry
    

    Tu cuenta de servicio debería tener este aspecto:

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

Ahora, cualquier pod nuevo que se cree en el espacio de nombres default actual tendrá definido el secreto imagePullSecret.

Cuenta de servicio de Artifact Registry

El agente de servicio de Artifact Registry es una cuenta de servicio gestionada por Google que actúa en nombre de Artifact Registry al interactuar con servicios de Google Cloud. Para obtener más información sobre la cuenta y sus permisos, consulta el artículo sobre la cuenta de servicio de Artifact Registry.

Siguientes pasos

Una vez que hayas configurado los permisos, consulta más información sobre cómo trabajar con tus artefactos.

También puedes restringir las descargas de artefactos con reglas de descarga.