Como configurar o controle de acesso

Nesta página, descrevemos as opções de controle de acesso disponíveis no Container Registry e como usar uma chave de criptografia com esse produto.

O Container Registry usa um intervalo do Cloud Storage como back-end para fornecer imagens de contêiner. É possível controlar quem tem acesso às imagens do Container Registry ajustando as permissões do intervalo do Cloud Storage.

Gerencie o controle de acesso no Cloud Storage usando o Console do Cloud ou a ferramenta de linha de comando gsutil. Consulte a documentação de gsutil iam para obter mais informações.

Permissões e papéis

A tabela abaixo explica as permissões e os papéis necessários para realizar as ações do Container Registry.

Se você conceder uma função para o intervalo de armazenamento individual e não para todo o projeto do Google Cloud, primeiro envie uma imagem para o Container Registry no local do host desejado para que exista o intervalo de armazenamento subjacente.

Ação Permissões Papel Título do papel
Enviar (leitura e gravação)

storage.buckets.create

storage.buckets.delete

storage.buckets.get

storage.buckets.list

storage.buckets.update

storage.objects.create

storage.objects.delete

storage.objects.get

storage.objects.list

storage.objects.update

roles/storage.admin Administrador do Storage
Extrair (somente leitura)

storage.objects.get

storage.objects.list

roles/storage.objectViewer Leitor de objetos do Storage

Se você ativar acesso uniforme no nível do intervalo para qualquer intervalo de armazenamento, verifique se todos os usuários e contas de serviço do Container Registry têm os papéis definidos explicitamente. Nesse caso, os papéis Proprietário e Editor por si só podem não ser suficientes para conceder as permissões necessárias.

Como conceder acesso a um registro aos usuários e a outros projetos.

Para permitir que usuários ou clusters de contêiner específicos em execução em outros projetos extraiam as imagens de um registro, você precisa conceder permissão de leitura no intervalo subjacente do Cloud Storage.

O intervalo que mantém as imagens terá um [BUCKET_NAME] com o formato:

  • artifacts.[PROJECT-ID].appspot.com para imagens enviadas para um registro no host gcr.io ou
  • [STORAGE-REGION].artifacts.[PROJECT-ID].appspot.com, em que:

    • [PROJECT-ID] é o ID do projeto do seu Console do Google Cloud.
    • [STORAGE-REGION] é o local do intervalo de armazenamento:
      • us para registros no host us.gcr.io
      • eu para registros no host eu.gcr.io
      • asia para registros no host asia.gcr.io

Conceda permissão de leitura no intervalo subjacente do Cloud Storage usando o Console do Google Cloud ou a linha de comando.

Console

  1. Você precisa ter enviado uma imagem ao Container Registry para que o intervalo de armazenamento subjacente exista.
  2. Visite a página do Cloud Storage no Console do Cloud.
  3. Clique no link artifacts.[PROJECT-ID].appspot.com ou [STORAGE-REGION].artifacts.[PROJECT-ID].appspot.com para o intervalo. Aqui, [PROJECT-ID] é o ID do projeto do Google Cloud do projeto que hospeda o Container Registry e [STORAGE-REGION] é a multirregião (asia, eu ou us) do registro que hospeda a imagem.

  4. Selecione a guia Permissões.

  5. Clique em Adicionar membros.

  6. No menu exibido, preencha o campo Membros com os endereços de e-mail dos usuários que precisam da permissão de leitura, separados por vírgulas. O endereço de e-mail pode ser:

    • uma Conta do Google (por exemplo, someone@example.com);
    • uma conta de serviço do Cloud IAM;
    • a conta de serviço padrão do Compute Engine de outro projeto. Essa conta é usada pelo Google Kubernetes Engine para extrair clusters de imagens de contêiner por padrão. Ele está no formato [PROJECT_NUMBER]-compute@developer.gserviceaccount.com, em que [PROJECT-NUMBER] é o número do projeto do Google Cloud do projeto que executa o cluster do Google Kubernetes Engine.
  7. Na categoria Storage do menu suspenso Selecionar um papel, selecione Visualizador de objetos do Storage.

  8. Clique em Add.

Esse procedimento concede ao usuário permissão de leitura para o intervalo inteiro.

gsutil

  1. Você precisa ter enviado uma imagem ao Container Registry para que o intervalo de armazenamento subjacente exista.
  2. Execute o seguinte comando no shell ou janela do terminal:

    gsutil iam ch [TYPE]:[EMAIL-ADDRESS]:objectViewer gs://[BUCKET_NAME]
        

    onde:

    • [TYPE] pode ser um dos seguintes:
      • serviceAccount, se [EMAIL-ADDRESS] especifica uma conta de serviço.
      • user, se [EMAIL-ADDRESS] for uma Conta do Google.
    • [EMAIL-ADDRESS] pode ser um dos seguintes:
      • uma Conta do Google (por exemplo, someone@example.com);
      • uma conta de serviço do Cloud IAM;
      • a conta de serviço padrão do Compute Engine de outro projeto. Essa conta é usada pelo Google Kubernetes Engine para extrair clusters de imagens de contêiner por padrão. Ele está no formato [PROJECT_NUMBER]-compute@developer.gserviceaccount.com, em que [PROJECT-NUMBER] é o número do projeto do Google Cloud do projeto que executa o cluster do Google Kubernetes Engine.
    • [BUCKET_NAME] é o nome do intervalo do Cloud Storage que hospeda as imagens, conforme descrito acima.

O comando gsutil iam ch altera as permissões de IAM do intervalo de armazenamento em que o registro está hospedado. Você pode executar pull de imagens do registro com uma conta que tenha permissões de objectViewer.

Para contas de serviço, também é necessário configurar o escopo de acesso ao armazenamento.

  • Para definir permissões "somente leitura", execute o comando:

    gcloud compute instances set-service-account INSTANCE --scopes=storage-ro
        
  • Para definir permissões de "leitura e gravação", execute o comando:

    gcloud compute instances set-service-account INSTANCE --scopes=storage-rw
        

Consulte Como usar o Container Registry com o Google Cloud para obter informações adicionais.

Veicular imagens publicamente

O Container Registry é acessível publicamente se o intervalo de armazenamento subjacente do local do host for acessível publicamente. Em um projeto, todas as imagens em cada local do host são públicas ou não. No host de um projeto, não é possível veicular publicamente apenas imagens específicas. Se você tiver imagens específicas que quer tornar públicas:

  • Seja cuidadoso para mantê-las em um local de host separado que você torne público ou
  • crie um novo projeto para manter as imagens acessíveis publicamente.

Para veicular imagens de contêiner publicamente, disponibilize o intervalo de armazenamento subjacente do repositório ao público seguindo estas etapas:

Console

  1. Você precisa ter enviado uma imagem ao Container Registry para que o intervalo de armazenamento subjacente exista.

  2. Abra a página do Container Registry no Console do Cloud.

    Abrir a página do Container Registry

  3. No painel esquerdo, clique em Configurações.

  4. Na página Configurações, em Acesso público, alterne a visibilidade para Público ou Particular. Essa configuração controla o acesso ao intervalo de armazenamento subjacente.

    Quando a visibilidade do host é pública, todas as imagens em seu projeto do Google Cloud que estão nesse local de host podem ser acessadas publicamente.

gsutil

  1. Você precisa ter enviado uma imagem ao Container Registry para que o intervalo de armazenamento subjacente exista.

  2. Encontre o nome do intervalo do Cloud Storage para esse registro. Para fazer isso, liste os intervalos:

    gsutil ls
        

    Seu URL de intervalo do Container Registry será listado como gs://artifacts.[PROJECT-ID].appspot.com ou gs://[STORAGE-REGION].artifacts.[PROJECT-ID].appspot.com, em que:

    • [PROJECT-ID] é o ID do projeto do seu Console do Google Cloud. Os projetos com escopo de domínio terão o nome de domínio como parte do ID do projeto.
    • [STORAGE-REGION] é o local do intervalo de armazenamento:
      • us para registros no host us.gcr.io
      • eu para registros no host eu.gcr.io
      • asia para registros no host asia.gcr.io
  3. Torne o intervalo de armazenamento do Container Registry acessível ao público. Basta executar o comando a seguir, que disponibiliza ao público todas as imagens no intervalo.

    gsutil iam ch allUsers:objectViewer gs://[BUCKET_NAME]
        

    onde:

    • gs://[BUCKET_NAME] é o URL do intervalo do Container Registry

Como extrair imagens acessíveis ao público

Quando o Container Registry é acessível publicamente, qualquer pessoa pode extrair suas imagens. Para instruções, consulte Como extrair imagens de um registro.

Como revogar permissões

Console

  1. Visite a página do Cloud Storage no Console do Cloud.
  2. Clique no link artifacts.[PROJECT-ID].appspot.com ou [STORAGE-REGION].artifacts.[PROJECT-ID].appspot.com para o intervalo. Aqui, [PROJECT-ID] é o ID do projeto do Google Cloud do projeto que hospeda o Container Registry e [STORAGE-REGION] é a multirregião (asia, eu ou us) do registro que hospeda a imagem.

  3. Selecione a guia Permissões.

  4. Clique no ícone da lixeira ao lado de qualquer membro que você quer remover.

gsutil

Execute o seguinte comando no shell ou janela de terminal:

gsutil iam ch -d [MEMBER] gs://[BUCKET_NAME]
    

onde:

  • [MEMBER] pode ser um dos seguintes:
    • user:[EMAIL_ADDRESS] para uma Conta do Google
    • serviceAccount:[EMAIL_ADDRESS] para uma conta de serviço do Cloud IAM
    • allUsers para revogar o acesso público
  • [BUCKET_NAME] é o nome do intervalo desejado.