Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Configura el control de acceso

En esta página, se describe cómo otorgar permisos a los repositorios de Artifact Registry.

Antes de comenzar

  1. Habilita Artifact Registry. Esto incluye habilitar la API y, también, instalar el SDK de Cloud.
  2. Crea los repositorios para tus paquetes si deseas aplicar permisos específicos del repositorio.

Descripción general

Artifact Registry está integrado por completo en los servicios de Google Cloud a fin de implementar una canalización de CI/CD, con permisos predeterminados para minimizar el esfuerzo de configuración. 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 Container Analysis para trabajar con metadatos de contenedores, como vulnerabilidades encontradas en las imágenes, consulta la documentación de Container Analysis con el fin de obtener información sobre cómo otorgar acceso para ver o administrar metadatos.

Integración en 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 los servicios se encuentran en el mismo proyecto de Google Cloud y los permisos predeterminados satisfacen tus necesidades, no necesitas configurar 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 a cada cuenta de servicio la función requerida.
  • Usas una versión de GKE que no tiene compatibilidad integrada con la extracción de imágenes de Artifact Registry. Consulta la sección 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 personalizada para los entornos de ejecución en lugar de la cuenta de servicio predeterminada. En el proyecto con Artifact Registry, otorga a tu cuenta de servicio la función requerida.

Integración con terceros

Para aplicaciones de terceros, debes configurar permisos y la autenticación.

  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 aplicación de terceros para autenticarte con Artifact Registry.

Funciones y permisos

Otorga un permiso de administración de identidades y accesos (IAM). Para ello, otorga una función que incluya el permiso. Utiliza las funciones de Artifact Registry para controlar el acceso a los repositorios. Puedes otorgar permisos a nivel de proyecto o de repositorio.

Si bien puedes usar las funciones básicas Owner, Editor y Viewer para otorgar acceso a los repositorios, usar las funciones de Artifact Registry te permite aplicar el principio de seguridad de privilegio mínimo, de forma que los usuarios y las cuentas de servicio solo tengan los permisos necesarios.

Permisos de Artifact Registry

En la siguiente tabla, se enumeran las funciones de IAM de Artifact Registry y los permisos que estas incluyen:

Función Descripción Permisos
roles/artifactregistry.reader Lector de Artifact Registry

Permite ver y obtener artefactos

  • artifactregistry.repositories.list
  • artifactregistry.repositories.get
  • artifactregistry.repositories.downloadArtifacts
  • artifactregistry.files.list
  • artifactregistry.files.get
  • artifactregistry.packages.list
  • artifactregistry.packages.get
  • artifactregistry.tags.list
  • artifactregistry.tags.get
  • artifactregistry.versions.list
  • artifactregistry.versions.get
roles/artifactregistry.writer Escritor de Artifact Registry

Permite leer y escribir artefactos

Todos los permisos roles/artifactregistry.reader y los siguientes:

  • artifactregistry.repositories.uploadArtifacts
  • artifactregistry.tags.create
  • artifactregistry.tags.update
roles/artifactregistry.repoAdmin Administrador del repositorio de Artifact Registry

Permite leer, escribir y borrar artefactos

Todos los permisos roles/artifactregistry.writer y los siguientes:

  • artifactregistry.repositories.deleteArtifacts
  • artifactregistry.packages.delete
  • artifactregistry.tags.delete
  • artifactregistry.versions.delete
roles/artifactregistry.admin Administrador de Artifact Registry

Permite crear y administrar repositorios y artefactos

Todos los permisos roles/artifactregistry.repoAdmin y los siguientes:

  • artifactregistry.repositories.create
  • artifactregistry.repositories.update
  • artifactregistry.repositories.delete
  • artifactregistry.repositories.getIamPolicy
  • artifactregistry.repositories.setIamPolicy

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:

Función Título de la función incluye la función
roles/viewer Lector roles/artifactregistry.reader
roles/editor Editor roles/artifactregistry.writer
roles/owner Propietario
  • roles/artifactregistry.repoAdmin
  • 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 funciones mediante el comando gcloud, puedes especificar una sola vinculación de función para un miembro o usar un archivo de políticas con el fin de 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 miembro del equipo a un proyecto y otorgarle una función de Artifact Registry, haz lo siguiente:

Console

  1. Abre la página IAM en Cloud Console.

    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. Haga clic en Add.

  4. Ingresa una dirección de correo electrónico. Puedes agregar personas individuales, cuentas de servicio o Grupos de Google como miembros. Para usar las funciones Alfa, los usuarios deben ser miembros del Grupo de Google ar-trusted-testers@googlegroups.com.

  5. Selecciona una función para el miembro. 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. Haga clic en Save.

gcloud

Para otorgar una función a un solo miembro, ejecuta el siguiente comando:

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

donde

  • PROJECT es el ID del proyecto en el que se ejecuta Artifact Registry.
  • MEMBER es el miembro 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 Cloud Console.

    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 miembro.

  5. Ingresa una dirección de correo electrónico. Puedes agregar personas, cuentas de servicio o Grupos de Google como miembros. Para acceder a las características Alfa, los usuarios deben ser miembros del Grupo de Google ar-trusted-testers@googlegroups.com.

  6. Selecciona una función para el miembro. Recomendamos darle al miembro la menor cantidad de privilegios necesarios.

  7. Haga clic en Save.

gcloud

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

Para otorgar una función a un solo miembro, ejecuta el siguiente comando:

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

donde

  • REPOSITORY es el ID del repositorio.
  • MEMBER es el miembro 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

Si deseas obtener información sobre cómo usar Terraform para aprovisionar repositorios y otorgar permisos de repositorio, consulta Integra con Terraform.

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.

Si deseas configurar un repositorio para el acceso público de solo lectura, otorga la función de lector de Artifact Registry al miembro allUsers.

Console

  1. Abre la página Repositorios en Cloud Console.

    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 miembro.

  5. En el campo Miembros nuevos, ingresa allUsers.

  6. Selecciona la función de lector de Artifact Registry.

gcloud

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.
  • MEMBER es el miembro 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, 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'

Revoca permisos

Para revocar el acceso a un repositorio, quita al miembro de la lista de miembros autorizados.

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

Console

Para revocar permisos, haz lo siguiente:

  1. Abre la página Repositorios en Cloud Console.

    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 el miembro correspondiente. Si haces privado un repositorio público, expande el miembro allUsers.

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

gcloud

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

gcloud projects remove-iam-policy-binding PROJECT --member=MEMBER --role=ROLE
  • PROJECT es el ID del proyecto.
  • MEMBER es el miembro al 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 --member=MEMBER --role=ROLE

donde

  • REPOSITORY es el ID del repositorio.
  • MEMBER es el miembro al 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 el miembro 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-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 el siguiente comando:

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

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.

Si bien al nivel de acceso de una cuenta de servicio lo determinan las funciones de IAM que se otorgan a la cuenta de servicio, los permisos de acceso en una instancia de VM determinan los permisos de OAuth predeterminados para las solicitudes que se realizan a través de la herramienta de gcloud y las bibliotecas cliente de la instancia. Como resultado, los permisos de acceso pueden limitar aún más el acceso a los métodos de la API cuando se autentica con las credenciales predeterminadas de la aplicación.

De forma predeterminada, la cuenta de servicio predeterminada de Compute Engine tiene permiso de editor para los recursos en el mismo proyecto y el permiso de acceso de almacenamiento de read-only. La dirección de correo electrónico de la cuenta de servicio tiene el sufijo @developer.gserviceaccount.com.

Si bien los permisos de editor suelen otorgar acceso de escritura, el permiso de acceso read-only limita la cuenta de servicio de la instancia a descargar artefactos solo de cualquier repositorio que se encuentre 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 de GKE pueden extraer contenedores sin ninguna configuración adicional si se cumplen todos los siguientes requisitos:

Si tu entorno de GKE no cumple con estos requisitos, las instrucciones para otorgar acceso dependen de si usas la cuenta de servicio predeterminada de Compute Engine o una cuenta de servicio personalizada como la 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 deseas enviar imágenes, interactuar con repositorios en formatos distintos de los contenedores o ejecutar comandos de gcloud desde el clúster, debes configurar permisos de acceso para la cuenta de servicio cuando crees el cluster.

  2. Si GKE se encuentra en un proyecto distinto de Artifact Registry, otorga los permisos necesarios a la cuenta de servicio.

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

Configura permisos de acceso

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

gcloud container clusters create CLUSTER-NAME --scopes=SCOPE

Donde

CLUSTER-NAME es el nombre del clúster. SCOPE es un permiso que coincide con tus necesidades:

  • Para los repositorios de Docker, elige una de 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 repositorios, debes usar el permiso cloud-platform.

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.

Configura una cuenta de servicio personalizada

Para los clústeres que usan una cuenta de servicio personalizada como su identidad, debes otorgar los permisos necesarios a la cuenta de servicio desde el proyecto de Google Cloud en el que se ejecuta Artifact Registry.

¿Qué sigue?

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