Como configurar o controle de acesso

Nesta página, você aprende a conceder permissões para repositórios do Artifact Registry.

Antes de começar

  1. Ative o Artifact Registry, incluindo a ativação da API e a instalação do SDK do Cloud.
  2. Crie os repositórios para seus pacotes se você quiser aplicar permissões específicas ao repositório.

Visão geral

O Artifact Registry está totalmente integrado aos serviços do Google Cloud para implementar um pipeline de CI/CD com permissões padrão para minimizar o esforço de configuração. Também é possível integrar o Artifact Registry com ferramentas de CI/CD de terceiros e configurar as permissões e a autenticação necessárias para acessar repositórios.

Se você usa o Container Analysis para trabalhar com metadados de contêiner, como vulnerabilidades descobertas por imagens, veja a documentação do Container Analysis e saiba como conceder acesso para visualizar ou gerenciar metadados.

Integração com o Google Cloud

Por padrão, as seguintes permissões se aplicam aos serviços de CI/CD do Google Cloud no mesmo projeto que o Artifact Registry:

Se todos os serviços estiverem no mesmo projeto do Google Cloud e as permissões padrão atenderem às suas necessidades, você não precisará configurar permissões.

Você precisará configurar as permissões do Artifact Registry para esses serviços se:

  • Você quiser usar esses serviços para acessar o Artifact Registry em outro projeto. No projeto com o Artifact Registry, conceda o papel necessário à conta de serviço para cada serviço.
  • Você está usando uma versão do GKE que não tem suporte integrado para extrair imagens do Artifact Registry. Consulte a seção do GKE para ver instruções de configuração.
  • Você quiser que a conta de serviço padrão tenha acesso de leitura e gravação aos repositórios. Consulte as seguintes informações para saber mais detalhes:
  • Você está usando uma conta de serviço personalizada para seus ambientes de execução em vez da conta de serviço padrão. No projeto com o Artifact Registry, conceda à conta de serviço o papel necessário.

Integração de terceiros

Para clientes de terceiros, é preciso configurar as permissões e a autenticação.

  1. Crie uma conta de serviço para agir em nome do seu aplicativo ou escolha uma conta de serviço atual que você usa para sua automação de CI/CD.
  2. Conceda o papel apropriado do Artifact Registry à conta de serviço para fornecer acesso ao repositório.
  3. Configure seu cliente terceirizado para autenticar com o Artifact Registry.

Papéis e permissões

Conceda uma permissão de gerenciamento de identidade e acesso (IAM, na sigla em inglês) concedendo um papel que inclua a permissão. Use os papéis do Artifact Registry para controlar o acesso aos repositórios. É possível conceder permissões no nível do projeto ou do repositório.

Embora seja possível usar os papéis básicos Owner, Editor e Viewer para conceder acesso aos repositórios, os papéis do Artifact Registry permitem aplicar o princípio de segurança de privilégio mínimo, para que os usuários e as contas de serviço tenham apenas as permissões necessárias.

Permissões do Artifact Registry

A tabela abaixo lista os papéis do IAM do Artifact Registry e as permissões que eles incluem:

Role Descrição Permissões
roles/artifactregistry.reader Leitor do Artifact Registry

Ver e receber artefatos

  • 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 Gravador do Artifact Registry

Ler e gravar artefatos

Todas as permissões roles/artifactregistry.reader e:

  • artifactregistry.repositories.uploadArtifacts
  • artifactregistry.tags.create
  • artifactregistry.tags.update
roles/artifactregistry.repoAdmin Administrador do repositório do Artifact Registry

Ler, gravar e excluir artefatos

Todas as permissões roles/artifactregistry.writer e:

  • artifactregistry.repositories.deleteArtifacts
  • artifactregistry.packages.delete
  • artifactregistry.projectsettings.update
  • artifactregistry.tags.delete
  • artifactregistry.versions.delete
roles/artifactregistry.admin Administrador do Artifact Registry

Crie e gerencie repositórios e artefatos

Todas as permissões roles/artifactregistry.repoAdmin e:

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

A tabela a seguir lista os papéis básicos que existiam antes do IAM e os papéis de IAM do Artifact Registry que eles incluem:

Role Título do papel Papéis incluídos
roles/viewer Visualizador roles/artifactregistry.reader
roles/editor Editor roles/artifactregistry.writer
roles/owner Proprietário
  • roles/artifactregistry.repoAdmin
  • roles/artifactregistry.admin

Como conceder permissões

Conceda permissões no nível do projeto se as mesmas permissões se aplicarem a todos os repositórios no projeto. Se algumas contas exigirem níveis de acesso diferentes, conceda papéis no nível do repositório.

Se você estiver concedendo papéis usando o comando gcloud, será possível especificar uma única vinculação de papel para um membro ou usar um arquivo de política para definir várias vinculações.

O modelo de política de referência a seguir é usado para os exemplos desta página. O arquivo da política de referência é denominado policy.yaml. O modelo contém exemplos de nomes de conta de serviço e usuário. Substitua esses usuários e contas de serviço de exemplo conforme apropriado para o projeto.

Para saber detalhes sobre o formato da política, consulte a documentação da política do 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

Como conceder permissões em todo o projeto

Conceda um papel no nível do projeto se as mesmas permissões se aplicarem a todos os repositórios no projeto.

Para adicionar um membro da equipe a um projeto e conceder a ele um papel do Artifact Registry:

Console

  1. Abra a página do IAM no Console do Cloud.

    Abrir a página do IAM

  2. Clique em Selecionar um projeto, escolha o projeto em que o Artifact Registry está em execução e clique em Abrir.

  3. Clique em Add.

  4. Insira um endereço de e-mail. É possível adicionar indivíduos, contas de serviço ou Grupos do Google como membros. Para usar os recursos Alfa no Console do Cloud, os membros precisam estar no grupo de usuários Alfa: ar-trusted-testers@googlegroups.com.

  5. Selecione um papel para o membro. De acordo com o princípio de segurança de privilégio mínimo, considere conceder a menor quantidade de privilégio necessária para impedir o acesso indesejado a outros recursos.

  6. Clique em Save.

gcloud

Para conceder um papel a um único membro, execute o seguinte comando:

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

onde

  • PROJECT é o ID do projeto em que o Artifact Registry está sendo executado.
  • MEMBER é membro para quem a vinculação deve ser adicionada. Use o formulário user|group|serviceAccount:email ou domain:domain.

    Exemplos: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com ou domain:example.domain.com.

  • ROLE é o papel que você quer conceder.

Para mais informações, consulte a documentação add-iam-policy-binding.

Para conceder papéis usando um arquivo de política, execute o seguinte comando:

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

Onde

  • PROJECT é o ID do projeto ou identificador totalmente qualificado para o projeto em que o Artifact Registry está em execução.
  • /PATH/TO/policy.yaml é o caminho e o nome do arquivo de política.

Para conseguir a política configurada atualmente, execute o seguinte comando:

gcloud projects get-iam-policy PROJECT

Em que PROJECT é o ID do projeto ou identificador totalmente qualificado para o projeto.

Para mais informações, consulte a documentação set-iam-policy.

Como conceder permissões específicas de repositório

Conceda permissões no nível do repositório quando quiser que os usuários ou as contas de serviço tenham diferentes níveis de acesso para cada repositório no projeto.

Console

Para conceder acesso a um repositório específico:

  1. Abra a página Repositórios no Console do Cloud.

    Abrir a página Repositórios

  2. Selecione o repositório apropriado.

  3. Caso o painel de informações não seja exibido, clique em Mostrar painel de informações na barra de menu.

  4. Na guia Permissões, clique em Adicionar membro.

  5. Insira um endereço de e-mail. É possível adicionar indivíduos, contas de serviço ou Grupos do Google como membros. Para usar os recursos Alfa no Console do Cloud, os membros precisam estar no grupo de usuários Alfa: ar-trusted-testers@googlegroups.com.

  6. Selecione um papel para o membro. Recomendamos dar ao membro o mínimo de privilégio necessário.

  7. Clique em Save.

gcloud

É possível definir um conjunto de IAMs de vinculações de políticas individuais ou usar um arquivo de política.

Para conceder um papel a um único membro, execute o seguinte comando:

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

em que

  • REPOSITORY é o ID do repositório.
  • MEMBER é membro para quem a vinculação deve ser adicionada. Use o formulário user|group|serviceAccount:email ou domain:domain.

    Exemplos: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com ou domain:example.domain.com.

  • ROLE é o papel que você quer conceder.

  • LOCATION é o local regional ou multirregional do repositório.

Por exemplo, para adicionar uma vinculação de política do IAM ao papel roles/artifactregistry.writer para o usuário write@gmail.com com o repositório my-repo no local --us-central1, execute:

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

Para conceder papéis usando um arquivo de política, execute o seguinte comando:

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

Onde

  • REPOSITORY é o ID do repositório.
  • /PATH/TO/policy.yaml é o caminho e o nome do arquivo de política.
  • LOCATION é o local regional ou multirregional do repositório.

Por exemplo, para definir a política do IAM para o repositório my-repo no local --us-central1 com a política definida em policy.yaml, execute:

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

Terraform

Para informações sobre como usar o Terraform para provisionar repositórios e conceder permissões de repositório, consulte Como integrar com o Terraform.

Como configurar o acesso público a um repositório

Se você tiver artefatos que quer disponibilizar para qualquer pessoa na Internet sem autenticação, armazene-os em um repositório público.

Para configurar um repositório para acesso público somente de leitura, conceda o papel Leitor do Artifact Registry ao membro allUsers. Também recomendamos limitar as cotas de solicitação de usuário para que um único usuário não possa usar a cota geral do seu projeto.

Console

  1. Abra a página Repositórios no Console do Cloud.

    Abrir a página Repositórios

  2. Selecione o repositório apropriado.

  3. Caso o painel de informações não seja exibido, clique em Mostrar painel de informações na barra de menu.

  4. Na guia Permissões, clique em Adicionar membro.

  5. No campo Novos membros, insira allUsers.

  6. Selecione o papel Leitor do Artifact Registry.

  7. Defina um limite por usuário nas solicitações da API Artifact Registry para evitar o uso indevido por usuários não autenticados. Consulte Como limitar o uso para ver instruções.

gcloud

  1. Execute este comando:

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

    em que

    • REPOSITORY é o ID do repositório.
    • MEMBER é membro para quem a vinculação deve ser adicionada. Use o formulário user|group|serviceAccount:email ou domain:domain.

      Exemplos: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com ou domain:example.domain.com.

    • ROLE é o papel que você quer conceder.

    • LOCATION é o local regional ou multirregional do repositório.

    Por exemplo, configure o repositório my-repo no local --us-central1 como público, execute:

    gcloud artifacts repositories add-iam-policy-binding my-repo \
     --location=us-central1 --member=allUsers --role=roles/artifactregistry.reader
    
  2. Defina um limite por usuário nas solicitações da API Artifact Registry para evitar o uso indevido por usuários não autenticados. Consulte Como limitar o uso para ver instruções.

Como revogar permissões

Para revogar o acesso a um repositório, remova o membro da lista de membros autorizados.

Para remover o acesso público de um repositório, remova o membro allUsers.

Console

Para revogar as permissões:

  1. Abra a página Repositórios no Console do Cloud.

    Abrir a página Repositórios

  2. Selecione o repositório apropriado.

  3. Caso o painel de informações não seja exibido, clique em Mostrar painel de informações na barra de menu.

  4. Na guia "Permissões", expanda o membro apropriado. Se você estiver tornando um repositório de público para particular, expanda o membro allUsers.

  5. Clique em Remover membro para revogar o acesso.

gcloud

Para revogar um papel no nível do projeto, execute o seguinte comando:

gcloud projects remove-iam-policy-binding PROJECT --member=MEMBER --role=ROLE
  • PROJECT é o ID do projeto;
  • MEMBER é o membro de quem você quer remover a vinculação. Use o formulário user|group|serviceAccount:email ou domain:domain.

    Exemplos: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com ou domain:example.domain.com.

  • ROLE é o papel que você quer revogar.

Para revogar um papel para um repositório, execute o seguinte comando:

gcloud artifacts repositories remove-iam-policy-binding REPOSITORY --member=MEMBER --role=ROLE

em que

  • REPOSITORY é o ID do repositório.
  • MEMBER é o membro de quem você quer remover a vinculação. Use o formulário user|group|serviceAccount:email ou domain:domain.

    Exemplos: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com ou domain:example.domain.com.

    Para revogar o acesso público ao repositório, especifique o membro allUsers.

  • ROLE é o papel que você quer revogar.

Por exemplo, para remover uma vinculação de política do papel roles/artifactregistry.writer para o usuário write@gmail.com com o repositório my-repo no local --us-central1, execute:

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

Para revogar o acesso público a my-repo no local --us-central1, execute:

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

Como conceder acesso a instâncias do Compute Engine

As instâncias de VM que acessam repositórios precisam ter permissões do Artifact Registry e escopo de acesso de armazenamento configurado.

Embora o nível de acesso de uma conta de serviço seja determinado pelos papéis do IAM concedidos a ela, os escopos de acesso em uma instância de VM determinam os escopos padrão do OAuth para as solicitações feitas por meio do gcloud e bibliotecas de cliente na instância. Como resultado, os escopos de acesso podem limitar ainda mais o acesso aos métodos da API ao autenticar com credenciais padrão do aplicativo.

Por padrão, a conta de serviço padrão do Compute Engine tem permissão de editor para recursos no mesmo projeto e no escopo de acesso de armazenamento read-only. O endereço de e-mail da conta de serviço tem o sufixo @developer.gserviceaccount.com.

Enquanto as permissões de Editor geralmente concedem acesso de gravação, o escopo de acesso read-only limita a conta de serviço da instância a fazer o download de artefatos apenas de qualquer repositório no mesmo projeto.

Você precisará configurar o escopo de acesso da conta de serviço se:

  • A conta de serviço da VM precisa acessar um repositório em outro projeto.
  • A conta de serviço da VM precisa executar outras ações além de ler artefatos de repositórios. Isso geralmente aplica ferramentas de terceiros a uma VM que precisa enviar imagens ou executar comandos gcloud do Artifact Registry.

Para configurar permissões e definir o escopo de acesso:

  1. No projeto com a instância de VM, veja o nome da conta de serviço padrão do Compute Engine. O endereço de e-mail da conta de serviço tem o sufixo @developer.gserviceaccount.com.

  2. No projeto com o repositório, conceda permissões para que a conta de serviço possa acessar o repositório.

  3. Defina o escopo de acesso com a opção --scopes.

    1. Pare a instância de VM. Consulte Como interromper uma instância.

    2. Defina o escopo de acesso com o comando a seguir.

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

      Substitua SCOPE pelo valor adequado.

      • No Docker, as seguintes opções são compatíveis:

        • storage-ro: concede permissão de leitura apenas para extrair imagens.
        • storage-rw: concede permissão de leitura e gravação para enviar ou extrair imagens.
        • cloud-platform: visualiza e gerencie dados, incluindo metadados, no serviço do Google Cloud.
      • Para outros formatos, use o escopo cloud-platform.

    3. Reinicie a instância de VM. Consulte Como iniciar uma instância interrompida.

Como conceder acesso a clusters do Google Kubernetes Engine

Os clusters do GKE podem extrair contêineres sem nenhuma configuração extra se todos os requisitos a seguir forem atendidos:

Se o ambiente do GKE não atender a esses requisitos, as instruções para conceder acesso dependerá se você estiver usando a conta de serviço padrão do Compute Engine ou uma conta de serviço personalizada como identidade dos nós.

Conta padrão de serviço

Os requisitos de configuração a seguir se aplicam à conta de serviço padrão do Compute Engine:

  1. Para enviar imagens, interagir com repositórios para formatos diferentes de contêineres ou executar comandos gcloud a partir do cluster, defina escopos de acesso para a conta de serviço ao criar o cluster.

  2. Se o GKE estiver em um projeto diferente do Artifact Registry, conceda as permissões necessárias à conta de serviço.

  3. Se você não estiver usando uma versão compatível do GKE, configure imagePullSecrets.

Como definir escopos de acesso

Para especificar um escopo de acesso ao criar um cluster, execute o seguinte comando:

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

Onde

CLUSTER-NAME é o nome do cluster; SCOPE é um escopo que corresponde às suas necessidades:

  • Para repositórios do Docker, escolha uma das seguintes opções:

    • storage-ro: concede permissão de leitura apenas para extrair imagens.
    • storage-rw: concede permissão de leitura e gravação para enviar ou extrair imagens.
    • cloud-platform: visualiza e gerencie dados, incluindo metadados, no serviço do Google Cloud.
  • Para outros repositórios, use o escopo cloud-platform.

Para mais informações sobre escopos que podem ser definidos ao criar um novo cluster, consulte a documentação do comando gcloud container clusters create.

Como configurar um imagePullSecret

Para configurar um imagePullSecret:

  1. No projeto com o GKE, encontre a conta de serviço padrão do Compute Engine. O endereço de e-mail da conta tem o sufixo @developer.gserviceaccount.com.

  2. Faça o download da chave da conta de serviço para a conta de serviço.

  3. No projeto com o repositório, verifique se você concedeu permissões a ele.

  4. No projeto com o cluster, crie um secret imagePullSecret chamado artifact-registry com a chave da conta de serviço.

    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)"
    

    Onde

    • LOCATION é o local regional ou multirregional do repositório.
    • SERVICE-ACCOUNT-EMAIL é o endereço de e-mail da conta de serviço do Compute Engine.
    • KEY-FILE é o nome do arquivo de chave da conta de serviço. Por exemplo key.json.
  5. Abra sua conta de serviço padrão:

    kubectl edit serviceaccount default --namespace default

    Cada namespace no cluster do Kubernetes tem uma conta de serviço padrão chamada default. Essa conta de serviço padrão é usada para extrair a imagem do contêiner.

  6. Adicione o secret imagePullSecret recém-criado à sua conta de serviço padrão:

    imagePullSecrets:
    - name: artifact-registry
    

    Sua conta de serviço agora terá esta aparência:

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

Agora, todos os novos pods criados no namespace default atual terão o secret imagePullSecret definido.

Como configurar uma conta de serviço personalizada

Para clusters que usam uma conta de serviço personalizada como identidade, é preciso conceder as permissões necessárias à conta de serviço do projeto do Google Cloud em que o Artifact Registry está em execução.

Conta de serviço do Artifact Registry

O agente de serviço do Artifact Registry é uma conta de serviço gerenciada pelo Google que atua em nome do Artifact Registry ao interagir com os serviços do Google Cloud. Para mais informações sobre a conta e as permissões, consulte Conta de serviço do Artifact Registry.

A seguir

Depois de configurar as permissões, saiba mais sobre como trabalhar com os artefatos.