Esta página descreve as autorizações para controlar o acesso ao Container Registry.
Depois de configurar as autorizações, pode configurar a autenticação para os clientes Docker que usa para enviar e extrair imagens.
Se usar a Análise de artefactos para trabalhar com metadados de contentores, como vulnerabilidades encontradas em imagens, consulte a documentação da Análise de artefactos para obter informações sobre como conceder acesso para ver ou gerir metadados.
Antes de começar
Verifique se tem autorizações para gerir utilizadores. Tem de ter autorizações numa das seguintes funções:
- Administrador de IAM de projetos (roles/resourcemanager.projectIamAdmin)
- Administrador de segurança (roles/iam.securityAdmin)
Em alternativa à concessão destas funções, pode usar uma função personalizada ou uma função predefinida com as mesmas autorizações.
Autorizações e funções
Todos os utilizadores, contas de serviço e outras identidades que interagem com o Container Registry têm de ter as autorizações de gestão de identidade e de acesso (IAM) adequadas para o Cloud Storage.
- Google Cloud Os serviços que normalmente acedem ao Container Registry são configurados com autorizações predefinidas para registos no mesmo Google Cloud projeto. Se as autorizações predefinidas não satisfizerem as suas necessidades, tem de configurar as autorizações adequadas.
- Para outras identidades, tem de configurar as autorizações necessárias.
Controla o acesso aos anfitriões do Container Registry com autorizações do Cloud Storage. A tabela seguinte lista as funções do Cloud Storage que têm as autorizações necessárias para o Container Registry.
São necessárias algumas autorizações adicionais quando visualiza imagens do Container Registry através da Google Cloud consola. Consulte o artigo Autorizações comuns necessárias para usar a Cloud Console.
Acesso necessário | Função | Onde conceder autorizações |
---|---|---|
Extrair imagens (apenas leitura) de um registo existente | Storage Object Viewer (roles/storage.objectViewer) | Conceda a função no contentor de armazenamento do registo. |
Envie (escreva) imagens para um anfitrião de registo existente e extraia (leia) imagens do mesmo num projeto | Escritor de contentor antigo de armazenamento (roles/storage.legacyBucketWriter) | Conceda a função no contentor de armazenamento do registo. Esta autorização só está disponível ao nível do contentor. Não a pode conceder ao nível do projeto. |
Adicione anfitriões de registo a Google Cloud projetos e crie os contentores de armazenamento associados. | Administrador de armazenamento (roles/storage.admin) | Conceda a função ao nível do projeto |
O envio de imagens requer autorizações de leitura e escrita de objetos, bem como a autorização storage.buckets.get
. A função Storage Legacy Bucket Writer inclui as autorizações necessárias numa única função do Cloud Storage, mas não concede controlo total sobre contentores e objetos de armazenamento.
A função de administrador de armazenamento concede controlo total sobre os contentores e os objetos de armazenamento. Se conceder esta autorização ao nível do projeto, o principal tem acesso a todos os contentores de armazenamento no projeto, incluindo contentores que não são usados pelo Container Registry. Pondere cuidadosamente que responsáveis precisam desta função.
- Por predefinição, a conta de serviço do Cloud Build tem autorizações na função de administrador do armazenamento. Por conseguinte, esta conta de serviço pode adicionar registos ao respetivo projeto principal com o primeiro envio e enviar imagens para registos existentes no respetivo projeto principal.
- Se usar o Docker ou outras ferramentas para criar e enviar imagens para um registo, considere adicionar registos ao seu projeto através de uma conta com a função de administrador de armazenamento mais permissiva e, em seguida, conceda as funções de escritor de contentores antigos de armazenamento ou visualizador de objetos de armazenamento a outras contas que precisem de enviar ou extrair imagens.
Para mais informações acerca das funções e autorizações do Cloud Storage, consulte a documentação do Cloud Storage.
Conceda autorizações de IAM
O Container Registry usa contentores do Cloud Storage como o armazenamento subjacente para imagens de contentores. Controla o acesso às suas imagens concedendo autorizações ao contentor para um registo.
O primeiro envio de uma imagem para um nome do anfitrião adiciona o anfitrião do registo e o respetivo contentor de armazenamento a um projeto. Por exemplo, o primeiro envio para gcr.io/my-project
adiciona o anfitrião do registo gcr.io
ao projeto com o
ID do projeto
my-project
e cria um contentor de armazenamento para o registo. O nome do contentor tem um dos seguintes formatos:
artifacts.PROJECT-ID.appspot.com
para imagens armazenadas no anfitriãogcr.io
STORAGE-REGION.artifacts.PROJECT-ID.appspot.com
para imagens armazenadas noutros anfitriões de registo
Para realizar com êxito este primeiro envio de imagens, a conta que realiza o envio tem de ter autorizações na função de administrador de armazenamento.
Após o envio inicial da imagem para um anfitrião de registo, concede autorizações no contentor de armazenamento do registo para controlar o acesso às imagens no registo:
- Storage Legacy Bucket Writer para enviar e extrair
- Visualizador de objetos de armazenamento para extrair apenas
Pode conceder autorização para um contentor através da Google Cloud console ou da CLI do Google Cloud.
Limitações e restrições
Só pode conceder autorizações ao nível do contentor de armazenamento para anfitriões do Container Registry.
- O Container Registry ignora as autorizações definidas em objetos individuais num contentor do Cloud Storage.
- Não pode conceder autorizações em repositórios num registo. Se precisar de um controlo de acesso mais detalhado, o Artifact Registry oferece um controlo de acesso ao nível do repositório e pode adequar-se melhor às suas necessidades.
- Se ativar o acesso uniforme ao nível do contentor para qualquer contentor de armazenamento do Container Registry, tem de conceder explicitamente autorizações a todos os utilizadores e contas de serviço que acedem aos seus registos. Neste caso, as funções de proprietário e editor, por si só, podem não conceder as autorizações necessárias.
Conceder autorizações
Se o anfitrião do registo ainda não existir no projeto, uma conta com autorizações na função de administrador de armazenamento tem de enviar a primeira imagem para o registo. Isto cria o contentor de armazenamento para o anfitrião do registo.
O Cloud Build tem as autorizações necessárias para fazer o push da imagem inicial no mesmo projeto. Se estiver a enviar imagens com outra ferramenta, valide as autorizações da Google Cloud conta que está a usar para autenticar com o Container Registry.
Para mais informações sobre como enviar a imagem inicial com o Docker, consulte o artigo Adicionar um registo.
No projeto com o Container Registry, conceda as autorizações adequadas no contentor do Cloud Storage usado pelo anfitrião do registo.
Consola
- Aceda à página do Cloud Storage na Google Cloud consola.
Clique no link
artifacts.PROJECT-ID.appspot.com
ouSTORAGE-REGION.artifacts.PROJECT-ID.appspot.com
para o contentor.Substitua PROJECT-ID pelo Google Cloud ID do projeto do projeto que aloja o Container Registry e STORAGE-REGION pela multirregião (
asia
,eu
ouus
) do registo que aloja a imagem.Selecione o separador Autorizações.
Clique em Adicionar.
No campo Principais, introduza os endereços de email das contas que requerem acesso, separados por vírgulas. Este endereço de email pode ser um dos seguintes:
- Uma Conta Google (por exemplo,
someone@example.com
) - Um Grupo Google (por exemplo,
my-developer-team@googlegroups.com
) Uma conta de serviço do IAM.
Consulte a lista de Google Cloud serviços que acedem normalmente aos registos para encontrar o endereço de email da conta de serviço associada. Se o serviço estiver a ser executado num projeto diferente do Container Registry, certifique-se de que usa o endereço de email da conta de serviço no outro projeto.
- Uma Conta Google (por exemplo,
No menu pendente Selecionar uma função, selecione a categoria Armazenamento na nuvem e, de seguida, selecione a autorização adequada.
- Visualizador de objetos do Storage para extrair apenas imagens
- Storage Legacy Bucket Writer para enviar e receber imagens
Clique em Adicionar.
gcloud
Execute o seguinte comando para listar os contentores no projeto:
gcloud storage ls
A resposta tem o seguinte aspeto:
gs://[BUCKET_NAME1]/ gs://[BUCKET_NAME2]/ gs://[BUCKET_NAME3]/ ...
Encontre o contentor do anfitrião do registo na lista de contentores devolvida. O contentor que armazena as suas imagens tem o nome BUCKET-NAME num dos seguintes formatos:
artifacts.PROJECT-ID.appspot.com
para imagens armazenadas no anfitriãogcr.io
STORAGE-REGION.artifacts.PROJECT-ID.appspot.com
para imagens armazenadas noutros anfitriões de registo
Onde
- PROJECT-ID é o seu Google Cloud ID do projeto.
- STORAGE-REGION é a localização do contentor de armazenamento:
us
para registos no anfitriãous.gcr.io
eu
para registos no anfitriãoeu.gcr.io
asia
para registos no anfitriãoasia.gcr.io
Execute o seguinte comando na shell ou na janela de terminal:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=TYPE:EMAIL-ADDRESS \ --role=ROLE
Onde
- BUCKET_NAME é o nome do contentor do Cloud Storage no formato
artifacts.PROJECT-ID.appspot.com
ouSTORAGE-REGION.artifacts.PROJECT-ID.appspot.com
- TYPE pode ser uma das seguintes opções:
serviceAccount
, se EMAIL-ADDRESS especificar uma conta de serviço.user
, se o EMAIL-ADDRESS for uma Conta Google.group
, se o EMAIL-ADDRESS for um grupo Google.
EMAIL-ADDRESS pode ser uma das seguintes opções:
- Uma Conta Google (por exemplo,
someone@example.com
) - Um Grupo Google (por exemplo,
my-developer-team@googlegroups.com
) Uma conta de serviço do IAM.
Consulte a lista de Google Cloud serviços que acedem normalmente aos registos para encontrar o endereço de email da conta de serviço associada. Se o serviço estiver a ser executado num projeto diferente do Container Registry, certifique-se de que usa o endereço de email da conta de serviço no outro projeto.
- Uma Conta Google (por exemplo,
ROLE é a função do Cloud Storage que quer conceder.
objectViewer
para extrair imagenslegacyBucketWriter
empurrar e puxar imagens
- BUCKET_NAME é o nome do contentor do Cloud Storage no formato
Por exemplo, este comando concede à conta de serviço
my-account@my-project.iam.gserviceaccount.com
autorizações para enviar e extrair imagens no contentormy-example-bucket
:gcloud storage buckets add-iam-policy-binding gs://my-example-bucket \ --member=serviceAccount:my-account@my-project.iam.gserviceaccount.com \ --role=roles/storage.objectUser
O comando
gcloud storage buckets add-iam-policy-binding
altera as autorizações da IAM do contentor de armazenamento onde o registo está alojado. Encontra exemplos adicionais na documentação da CLI gcloud.Se estiver a configurar o acesso para VMs do Compute Engine ou nós do GKE que vão enviar imagens para o Container Registry, consulte o artigo Configurar VMs e clusters para ver passos de configuração adicionais.
Configure o acesso público às imagens
O Container Registry é acessível publicamente se o contentor de armazenamento subjacente da localização do anfitrião for acessível publicamente. Num projeto, todas as imagens em cada localização de anfitrião são públicas ou não. No anfitrião de um projeto, não é possível publicar publicamente apenas imagens específicas. Se tiver imagens específicas que quer tornar públicas:
- Certifique-se de que os mantém numa localização de anfitrião separada que torna pública ou
- Crie um novo projeto para guardar imagens acessíveis publicamente.
Para publicar imagens de contentores, torne o contentor de armazenamento subjacente acessível ao público seguindo estes passos:
Certifique-se de que enviou uma imagem para o Container Registry para que o contentor de armazenamento subjacente exista.
Encontre o nome do contentor do Cloud Storage para esse registo. Para tal, liste os contentores:
gcloud storage ls
O URL do seu bucket do Container Registry é apresentado como
gs://artifacts.PROJECT-ID.appspot.com
ougs://STORAGE-REGION.artifacts.PROJECT-ID.appspot.com
, onde:- PROJECT-ID é o seu Google Cloud ID do projeto. Os projetos com âmbito de domínio têm o nome de domínio como parte do ID do projeto.
- STORAGE-REGION é a localização do contentor de armazenamento:
us
para registos no anfitriãous.gcr.io
eu
para registos no anfitriãoeu.gcr.io
asia
para registos no anfitriãoasia.gcr.io
Torne o contentor de armazenamento do Container Registry acessível publicamente executando o seguinte comando. Este comando torna todas as imagens no contentor acessíveis publicamente.
gcloud storage buckets add-iam-policy-binding gs://BUCKET-NAME \ --member=allUsers --role=roles/storage.objectViewer
where:
gs://BUCKET-NAME
é o URL do contentor do Container Registry
Remova o acesso público às imagens
Consola
Certifique-se de que enviou uma imagem para o Container Registry para que o contentor de armazenamento subjacente exista.
Abra a página Container Registry na Google Cloud consola.
No painel esquerdo, clique em Definições.
Na página Definições, em Acesso público, altere a visibilidade para Privado. Esta definição controla o acesso ao contentor de armazenamento subjacente.
gcloud storage
Encontre o nome do contentor do Cloud Storage para esse registo. Para tal, liste os contentores:
gcloud storage ls
O URL do seu bucket do Container Registry é apresentado como
gs://artifacts.PROJECT-ID.appspot.com
ougs://STORAGE-REGION.artifacts.PROJECT-ID.appspot.com
, onde:- PROJECT-ID é o Google Cloud ID do projeto da consola. Os projetos com âmbito de domínio têm o nome de domínio como parte do ID do projeto.
- STORAGE-REGION é a localização do contentor de armazenamento:
us
para registos no anfitriãous.gcr.io
eu
para registos no anfitriãoeu.gcr.io
asia
para registos no anfitriãoasia.gcr.io
Para remover o acesso público ao seu contentor de armazenamento, execute o seguinte comando na shell ou na janela de terminal:
gcloud storage bucket remove-iam-policy-binding gs://BUCKET-NAME \ --member=allUsers --role=roles/storage.objectViewer
where:
BUCKET-NAME
é o nome do contentor pretendido
Revogue autorizações
Siga estes passos para revogar as autorizações da IAM.
Consola
- Visite a página do Cloud Storage na Google Cloud consola.
Clique no link
artifacts.PROJECT-ID.appspot.com
ouSTORAGE-REGION.artifacts.PROJECT-ID.appspot.com
para o contentor. Aqui, PROJECT-ID é o Google Cloud ID do projeto do projeto que aloja o Container Registry e STORAGE-REGION é a multirregião (asia
,eu
ouus
) do registo que aloja a imagem.Selecione o separador Autorizações.
Clique no ícone de lixo junto a qualquer diretor que queira remover.
gcloud
Execute o seguinte comando na shell ou na janela de terminal:
gcloud storage bucket remove-iam-policy-binding gs://BUCKET-NAME \
--member=PRINCIPAL --all
where:
BUCKET-NAME
é o nome do contentor pretendido- PRINCIPAL pode ser uma das seguintes opções:
user:EMAIL-ADDRESS
para uma Conta GoogleserviceAccount:EMAIL-ADDRESS
para uma conta de serviço da IAMgroup:EMAIL-ADDRESS
para um Grupo Google.allUsers
para revogar o acesso público
Faça a integração com Google Cloud serviços
Para a maioria das Google Cloud contas de serviço, a configuração do acesso a um registo só requer a concessão das autorizações do IAM adequadas.
Autorizações predefinidas para serviços Google Cloud
Google Cloud serviços como o Cloud Build ou o Google Kubernetes Engine usam uma conta de serviço predefinida ou um agente de serviço para interagir com recursos no mesmo projeto.
Tem de configurar ou modificar as autorizações se:
- O Google Cloud serviço está num projeto diferente do Container Registry.
- As autorizações predefinidas não satisfazem as suas necessidades. Por exemplo, a conta de serviço predefinida do Compute Engine tem acesso só de leitura ao armazenamento no mesmo projeto. Se quiser enviar uma imagem da VM para um registo, tem de modificar as autorizações da conta de serviço da VM ou autenticar-se no registo com uma conta que tenha acesso de escrita ao armazenamento.
- Está a usar uma conta de serviço personalizada para interagir com o Container Registry
Normalmente, as seguintes contas de serviço acedem ao Container Registry. O endereço de email da conta de serviço inclui o Google Cloud ID do projeto ou o número do projeto do projeto onde o serviço está a ser executado.
Serviço | Conta de serviço | Endereço de email | Autorizações |
---|---|---|---|
Ambiente flexível do App Engine | Conta de serviço predefinida do App Engine | PROJECT-ID@appspot.gserviceaccount.com | Função de editor, pode ler e escrever no armazenamento |
Compute Engine | Conta de serviço predefinida do Compute Engine | PROJECT-NUMBER-compute@developer.gserviceaccount.com | Função de editor, limitada ao acesso só de leitura ao armazenamento |
Cloud Build | Conta de serviço do Cloud Build | PROJECT-NUMBER@cloudbuild.gserviceaccount.com | As autorizações predefinidas incluem a criação de contentores de armazenamento e o acesso de leitura e escrita ao armazenamento. |
Cloud Run | Conta de serviço predefinida do Compute Engine A conta de serviço de tempo de execução predefinida para revisões. |
PROJECT-NUMBER-compute@developer.gserviceaccount.com | Função de editor, limitada ao acesso só de leitura ao armazenamento |
GKE | Conta de serviço predefinida do Compute Engine A conta de serviço predefinida para nós. |
PROJECT-NUMBER-compute@developer.gserviceaccount.com | Função de editor, limitada ao acesso só de leitura ao armazenamento |
Configure VMs e clusters para enviar imagens
O Compute Engine e qualquer Google Cloud serviço que use o Compute Engine tem a conta de serviço predefinida do Compute Engine como identidade predefinida.
As autorizações do IAM e os âmbitos de acesso afetam a capacidade das VMs de ler e escrever no armazenamento.
- As autorizações do IAM determinam o acesso a recursos.
- Os âmbitos de acesso determinam os âmbitos de OAuth predefinidos para pedidos feitos através da CLI gcloud e das bibliotecas de cliente numa instância de VM. Como resultado, os âmbitos de acesso podem limitar ainda mais o acesso aos métodos da API quando a autenticação é feita com as credenciais predefinidas da aplicação.
- Para extrair uma imagem privada, a conta de serviço da VM tem de ter autorização para o contentor de armazenamento da imagem.
read
- Para enviar imagens privadas, a conta de serviço da VM tem de ter o âmbito de acesso
read-write
,cloud-platform
oufull-control
para o contentor de armazenamento da imagem.
- Para extrair uma imagem privada, a conta de serviço da VM tem de ter autorização para o contentor de armazenamento da imagem.
A conta de serviço predefinida do Compute Engine tem a função de editor por predefinição, o que inclui autorizações para criar e atualizar recursos para a maioria dosGoogle Cloud serviços. No entanto, para a conta de serviço predefinida ou uma conta de serviço personalizada que associa a uma VM, o âmbito de acesso predefinido para contentores de armazenamento é só de leitura. Isto significa que, por predefinição, as VMs não podem enviar imagens.
Se pretender implementar imagens apenas em ambientes como o Compute Engine e o GKE, não precisa de modificar o âmbito de acesso. Se quiser executar aplicações nestes ambientes que enviam imagens para o registo, tem de fazer uma configuração adicional.
As seguintes configurações requerem alterações às autorizações do IAM ou à configuração do âmbito de acesso.
- Enviar imagens a partir de uma MV ou de um cluster
- Se quiser enviar imagens, a conta de serviço da instância de VM tem de ter o âmbito
storage-rw
em vez destorage-ro
. - A VM e o Container Registry estão em projetos separados
- Tem de conceder à conta de serviço autorizações de IAM para aceder ao contentor de armazenamento usado pelo Container Registry.
- Executar comandos do
gcloud
em VMs - A conta de serviço tem de ter o âmbito
cloud-platform
. Este âmbito concede autorizações para enviar e obter imagens, bem como executar comandosgcloud
.
Os passos para configurar os âmbitos encontram-se nas secções seguintes.
Configure âmbitos para VMs
Para definir âmbitos de acesso ao criar uma VM, use a opção --scopes.
gcloud compute instances create INSTANCE --scopes=SCOPE
Onde
- INSTANCE é o nome da instância de VM.
- SCOPE é o âmbito que quer configurar para a conta de serviço
da VM:
- Extrair imagens:
storage-ro
- Aumente e diminua o zoom das imagens:
storage-rw
- Envie e receba imagens, execute comandos gcloud:
cloud-platform
- Extrair imagens:
Para alterar os âmbitos de uma instância de VM existente:
Defina o âmbito de acesso com a opção --scopes.
Pare a instância de VM. Consulte o artigo Parar uma instância.
Altere o âmbito de acesso com o seguinte comando.
gcloud compute instances set-service-account INSTANCE --scopes=SCOPE
Onde
- INSTANCE é o nome da instância de VM.
- SCOPE é o âmbito que quer configurar para a conta de serviço
da VM:
- Extrair imagens:
storage-ro
- Aumente e diminua o zoom das imagens:
storage-rw
- Envie e receba imagens, execute comandos gcloud:
cloud-platform
- Extrair imagens:
Reinicie a instância de VM. Consulte o artigo Iniciar uma instância parada.
Se quiser usar uma conta de serviço personalizada para VMs em vez da conta de serviço predefinida, pode especificar a conta de serviço e os âmbitos de acesso a usar quando criar a VM ou modificar as definições da VM.
Configure âmbitos para clusters do Google Kubernetes Engine
Por predefinição, os novos clusters do GKE são criados com autorizações de leitura apenas para contentores do Cloud Storage.
Para definir o âmbito de armazenamento read-write
quando cria um cluster do Google Kubernetes Engine, use a opção --scopes
.
Por exemplo, o seguinte comando cria um cluster com os âmbitos bigquery
, storage-rw
e compute-ro
:
gcloud container clusters create example-cluster \
--scopes=bigquery,storage-rw,compute-ro
Para mais informações sobre os âmbitos que pode definir quando cria um novo cluster, consulte a documentação do comando gcloud container clusters create.
A conta de serviço do Container Registry
O agente de serviço do Container Registry atua em nome do Container Registry quando interage com os Google Cloud serviços. O agente de serviço tem o conjunto mínimo de autorizações necessárias se tiver ativado a API Container Registry após 5 de outubro de 2020. O agente do serviço tinha anteriormente a função de editor. Para mais informações acerca do agente do serviço e da modificação das respetivas autorizações, consulte o artigo Conta de serviço do Container Registry.
Experimente
Se está a usar o Google Cloud pela primeira vez, crie uma conta para avaliar o desempenho do Container Registry em cenários reais. Os novos clientes também recebem 300 USD em créditos gratuitos para executar, testar e implementar cargas de trabalho.
Experimente o Container Registry gratuitamente