Migração manual para repositórios "gcr.io" no Artifact Registry

Este documento explica como configurar manualmente repositórios gcr.io no Artifact Registry.

Se você quiser criar repositórios gcr.io no Artifact Registry usando chaves de criptografia gerenciadas pelo cliente (CMEK, na sigla em inglês), conclua as etapas em Antes de começar e siga as instruções em Criação manual de repositórios.

Antes de começar

  1. Instale a Google Cloud CLI, caso ainda não esteja instalada. Para uma instalação atual, execute o comando abaixo para atualizar os componentes para as versões mais recentes:

    gcloud components update
    
  2. Ative as APIs Artifact Registry e Resource Manager. A CLI gcloud usa a API Resource Manager para verificar uma das permissões necessárias.

    Execute este comando:

    gcloud services enable \
        cloudresourcemanager.googleapis.com \
        artifactregistry.googleapis.com
    
  3. Saiba mais sobre os preços do Artifact Registry antes de iniciar a transição.

Funções exigidas

Para receber as permissões necessárias para configurar repositórios gcr.io, peça ao administrador para conceder a você os seguintes papéis do IAM:

  • Para criar repositórios do Artifact Registry e conceder acesso a repositórios individuais: Administrador do Artifact Registry (roles/artifactregistry.admin) no projeto do Google Cloud
  • Para conferir e gerenciar a configuração atual do Container Registry aplicada aos buckets do Cloud Storage: Administrador de armazenamento (roles/storage.admin) no projeto do Google Cloud
  • Para criar um repositório gcr.io na primeira vez que você enviar uma imagem para um nome de host gcr.io: Artifact Registry Create-on-push Writer (roles/artifactregistry.createOnPushWriter) no projeto do Google Cloud
  • Para conceder acesso ao repositório no nível do projeto: Administrador do IAM do projeto (roles/resourcemanager.projectIamAdmin) no projeto do Google Cloud
  • Para listar os serviços ativados em uma organização: Visualizador de recursos do Cloud (roles/cloudasset.viewer) na organização

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.

Limitações

As limitações a seguir se aplicam aos repositórios gcr.io do Artifact Registry:

  • Ao fazer a transição do Container Registry, não é possível mapear um host do Container Registry para um repositório do Artifact Registry em um projeto diferente.

  • Cada nome de host do Container Registry é associado a apenas um repositório gcr.io do Artifact Registry correspondente na mesma multirregião.

  • Os nomes dos repositórios gcr.io são predefinidos e não podem ser modificados.

Se você precisar de mais controle sobre o local dos repositórios, faça a transição para os repositórios pkg.dev no Artifact Registry. Como os repositórios pkg.dev não têm suporte para o domínio gcr.io, essa abordagem de transição exige mais mudanças na automação e nos fluxos de trabalho atuais. Consulte Escolher uma opção de transição para saber mais sobre as diferenças entre os recursos.

Criar repositórios

Crie repositórios gcr.io para configurar o acesso dos usuários e copie as imagens do Container Registry para o Artifact Registry antes de ativar o redirecionamento.

Criação manual de repositório

Crie repositórios gcr.io manualmente se quiser usar chaves de criptografia gerenciadas pelo cliente (CMEK, na sigla em inglês) para criptografar o conteúdo do repositório ou se houver uma restrição de local na sua organização do Google Cloud que bloqueia a criação de novos recursos em locais específicos.

Para criar um repositório gcr.io manualmente:

  1. Se você estiver usando CMEK, crie a chave que será usada com este repositório e conceda permissões para usar a chave. Consulte Como ativar chaves de criptografia gerenciadas pelo cliente.

  2. Adicione o repositório.

    Console

    1. Abra a página Repositórios no console Google Cloud .

      Abrir a página Repositórios

    2. Clique em Criar repositório.

    3. Especifique o nome do repositório.

      Nome de host do Container Registry Nome do repositório do Artifact Registry
      gcr.io gcr.io
      asia.gcr.io asia.gcr.io
      eu.gcr.io eu.gcr.io
      us.gcr.io us.gcr.io
    4. Especifique o Docker como o formato do repositório.

    5. Em Tipo de local, especifique a multirregião do repositório:

      Nome de host do Container Registry Local do repositório do Artifact Registry Nome do repositório do Artifact Registry
      gcr.io us gcr.io
      asia.gcr.io asia asia.gcr.io
      eu.gcr.io europa eu.gcr.io
      us.gcr.io us us.gcr.io
    6. Adicione uma descrição para o repositório. Não inclua dados sensíveis, já que as descrições do repositório não são criptografadas.

    7. Na seção Criptografia, escolha o mecanismo de criptografia do repositório.

      • gerenciada pelo Google Cloud: criptografe o conteúdo do repositório com uma do Google gerenciada e pertencente ao Google Cloud.
      • Chave gerenciada pelo cliente: criptografe o conteúdo do repositório com uma chave controlada por você por meio do Cloud Key Management Service. Para instruções de configuração de chaves, consulte Como configurar CMEK para repositórios.
    8. Clique em Criar.

    gcloud

    Execute o comando abaixo para criar um novo repositório:

    gcloud artifacts repositories create REPOSITORY \
        --repository-format=docker \
        --location=LOCATION \
        --description=DESCRIPTION \
        --kms-key=KMS-KEY
    

    Substitua os seguintes valores:

    • REPOSITORY é o nome do repositório.

      Nome de host do Container Registry Nome do repositório do Artifact Registry
      gcr.io gcr.io
      asia.gcr.io asia.gcr.io
      eu.gcr.io eu.gcr.io
      us.gcr.io us.gcr.io
    • LOCATION é a multirregião do repositório:

      Nome de host do Container Registry Local do repositório do Artifact Registry Nome do repositório do Artifact Registry
      gcr.io us gcr.io
      asia.gcr.io asia asia.gcr.io
      eu.gcr.io europa eu.gcr.io
      us.gcr.io us us.gcr.io
    • DESCRIPTION é uma descrição do repositório. Não inclua dados sensíveis, já que as descrições do repositório não são criptografadas.

    • KMS-KEY é o caminho completo para a chave de criptografia do Cloud KMS, se você estiver usando uma chave de criptografia gerenciada pelo cliente para criptografar o conteúdo do repositório. O caminho está no formato:

      projects/KMS-PROJECT/locations/KMS-LOCATION/keyRings/KEY-RING/cryptoKeys/KEY

      Substitua os seguintes valores:

      • KMS-PROJECT é o projeto em que a chave está armazenada.
      • KMS-LOCATION é o local da chave.
      • KEY-RING é o nome do keyring.
      • KEY é o nome da chave.

    Para confirmar que o repositório foi criado, liste seus repositórios com o seguinte comando:

    gcloud artifacts repositories list
    

Antes de redirecionar o tráfego para os novos repositórios, você precisa garantir que a automação existente possa acessar o repositório. A próxima etapa é configurar permissões para conceder acesso aos repositórios.

Conceder permissões a repositórios

O Container Registry usa papéis do Cloud Storage para controlar o acesso. O Artifact Registry tem seus próprios papéis do IAM, e eles separam os papéis de leitura, gravação e administração do repositório de maneira mais clara do que o Container Registry.

Para mapear rapidamente as permissões concedidas em buckets de armazenamento para papéis sugeridos do Artifact Registry, use a ferramenta de mapeamento de papéis.

Como alternativa, é possível conferir uma lista de participantes com acesso a buckets de armazenamento usando o console do Google Cloud .

  1. No console do Google Cloud , acesse a página Buckets do Cloud Storage.

    Acessar buckets

  2. Clique no bucket de armazenamento do host de registro que você quer consultar. Nos nomes dos buckets, PROJECT-ID é o ID do projeto do Google Cloud do seu projeto.

    • gcr.io: artifacts.PROJECT-ID.appspot.com
    • asia.gcr.io: asia.artifacts.PROJECT-ID.appspot.com
    • eu.gcr.io: eu.artifacts.PROJECT-ID.appspot.com
    • us.gcr.io: us.artifacts.PROJECT-ID.appspot.com
  3. Clique na guia Permissões.

  4. Na guia "Permissões", clique na subguia Visualizar por função.

  5. Expanda uma função para ver os principais que têm essa função.

A lista inclui papéis do IAM concedidos diretamente no bucket e papéis herdados do projeto pai. Com base no papel, você pode escolher o papel do Artifact Registry mais adequado para conceder.

Cloud Storage e papéis básicos

Conceda aos usuários e às contas de serviço que acessam o Container Registry acesso aos repositórios do Artifact Registry. Para papéis do Cloud Storage herdados do projeto pai, verifique se o principal usa o Container Registry. Alguns princípios podem acessar apenas outros buckets do Cloud Storage que não estão relacionados ao Container Registry.

Os papéis básicos de proprietário, editor e leitor que existiam antes do IAM têm acesso limitado aos buckets de armazenamento. Elas não concedem intrinsecamente todo o acesso aos recursos do Cloud Storage que os nomes delas implicam e fornecem permissões adicionais para outros serviços do Google Cloud . Verifique quais usuários e contas de serviço precisam de acesso ao Artifact Registry e use a tabela de mapeamento de papéis para ajudar a conceder os papéis certos, se o acesso ao Artifact Registry for adequado.

A tabela a seguir mapeia os papéis do Artifact Registry com base nas permissões concedidas pelos papéis predefinidos do Cloud Storage para acesso ao Container Registry.

Acesso necessário Papel atual Função do Artifact Registry Onde conceder o papel
Puxar apenas imagens (somente leitura) Leitor de objetos do Storage
(roles/storage.objectViewer)
Leitor do Artifact Registry
(roles/artifactregistry.reader)
Repositório do Artifact Registry ou projeto do Google Cloud
  • Enviar e extrair imagens (leitura e gravação)
  • Excluir imagens
Gravador de bucket legado do Storage
(roles/storage.legacyBucketWriter)
Administrador do repositório do Artifact Registry
(roles/artifactregistry.repoAdmin)
Repositório do Artifact Registry ou projeto do Google Cloud .
Crie um repositório gcr.io no Artifact Registry na primeira vez que uma imagem for enviada para um nome de host gcr.io em um projeto. Administrador do Storage
(roles/storage.admin)
Administrador de repositório de Create-on-Push do Artifact Registry
(roles/artifactregistry.createOnPushRepoAdmin)
Google Cloud project
Criar, gerenciar e excluir repositórios Administrador do Storage
(roles/storage.admin)
Administrador do Artifact Registry
(roles/artifactregistry.Admin)
Google Cloud project
Papéis de agente de serviço herdados do projeto

As contas de serviço padrão para os serviços do Google Cloud têm funções concedidas no nível do projeto. Por exemplo, o agente de serviço do Cloud Run tem o papel de agente de serviço do Cloud Run.

Na maioria dos casos, esses papéis de agente de serviço contêm permissões padrão equivalentes para o Container Registry e o Artifact Registry. Não é necessário fazer outras mudanças se você estiver executando o Artifact Registry no mesmo projeto que o serviço do Container Registry.

Consulte a referência de função de agente de serviço para detalhes sobre as permissões em funções de agente de serviço.

Papéis personalizados

Use a tabela de mapeamento de função para decidir qual função conceder a usuários ou contas de serviço com base no nível de acesso que eles precisam.

Para instruções sobre como conceder papéis do Artifact Registry, consulte Configurar papéis e permissões.

Copiar contêineres do Container Registry

Recomendamos usar nossa ferramenta de migração automática para copiar suas imagens do Container Registry para o Artifact Registry.

Se você quiser usar outras ferramentas para copiar suas imagens, consulte Copiar imagens do Container Registry.

Configurar outros recursos

Esta seção descreve a configuração de outros recursos que você pode ter configurado no Container Registry.

Artifact Analysis

O Artifact Analysis é compatível com o Container Registry e o Artifact Registry. Ambos os produtos usam as mesmas APIs do Artifact Analysis para metadados de imagem e verificação de vulnerabilidade, além dos mesmos tópicos do Pub/Sub para notificações do Artifact Analysis.

No entanto, as seguintes ações só ocorrem quando o redirecionamento está ativado:

  • Verificação automática de repositórios gcr.io no Artifact Registry.
  • Incluir a atividade do repositório gcr.io nas notificações do Pub/Sub.

Você pode continuar usando os comandos gcloud container images para listar notas e ocorrências associadas aos caminhos de imagem gcr.io.

Container Registry Artifact Registry
Verifica se há vulnerabilidades no SO e no pacote de idiomas com a verificação sob demanda em imagens com um SO compatível. A verificação automática só retorna informações de vulnerabilidades do SO. Saiba mais sobre os tipos de verificação.
Verificação sob demanda
Verificação automática
  • O comando da CLI do Google Cloud gcloud container images inclui sinalizações para visualizar os resultados da verificação, incluindo vulnerabilidades e outros metadados.
  • As verificações só retornam informações de vulnerabilidade do SO para imagens no Container Registry com sistemas operacionais compatíveis.
Verifica vulnerabilidades do SO e do pacote de linguagem com verificação sob demanda e automática. Saiba mais sobre os tipos de verificação.
Verificação sob demanda
Verificação automática
  • O comando da CLI do Google Cloud gcloud artifacts docker images inclui flags para visualizar os resultados da verificação, incluindo vulnerabilidades e outros metadados.
  • As verificações retornam informações sobre vulnerabilidades do SO para imagens no Artifact Registry com sistemas operacionais compatíveis e informações sobre vulnerabilidades do pacote de idiomas para sistemas operacionais compatíveis e não compatíveis.

Notificações do Pub/Sub

O Artifact Registry publica alterações no mesmo tópico gcr do Container Registry. Nenhuma outra configuração é necessária se você já usa o Pub/Sub com o Container Registry no mesmo projeto que o Artifact Registry. No entanto, o Artifact Registry não publica mensagens para repositórios gcr.io até que você ative o redirecionamento.

Se você configurar o Artifact Registry em um projeto separado, o tópico gcr poderá não existir. Para instruções de configuração, consulte Como configurar notificações do Pub/Sub.

Ativar o redirecionamento do tráfego gcr.io

Depois de criar seus repositórios gcr.io e configurar permissões e autenticação para seus clientes de terceiros, você pode ativar o redirecionamento do tráfego gcr.io.

Se você encontrar um problema depois de ativar o redirecionamento, poderá encaminhar o tráfego de volta ao Container Registry executando o comando gcloud artifacts settings disable-upgrade-redirection e, depois de resolver o problema, ative o redirecionamento novamente.

Verificar as permissões para ativar o redirecionamento

Para ativar o redirecionamento, você precisa ter estas permissões no nível do projeto:

  • artifactregistry.projectsettings.update: permissões para atualizar as configurações do projeto do Artifact Registry. Essa permissão está no papel de administrador do Artifact Registry (roles/artifactregistry.admin).
  • storage.buckets.update: permissões para atualizar buckets de armazenamento em todo o projeto. Essa permissão está no papel de administrador do Storage (roles/storage.admin).

Se você não tiver essas permissões, peça a um administrador para conceder elas no nível do projeto.

Os comandos abaixo concedem os papéis de administrador do Artifact Registry e de administrador do Storage em um projeto.

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member='user:PRINCIPAL' \
    --role='roles/artifactregistry.admin'

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member='user:PRINCIPAL' \
    --role='roles/storage.admin'

Substitua os seguintes valores:

  • PROJECT_ID é o ID do projeto do Google Cloud.
  • PRINCIPAL é o endereço de e-mail da conta que você está atualizando. Por exemplo, my-user@example.com

Validar a configuração do projeto

Para validar a configuração do projeto, execute o seguinte comando:

gcloud artifacts settings enable-upgrade-redirection \
    --project=PROJECT_ID --dry-run

Substitua PROJECT_ID pelo ID do projeto do Google Cloud.

O Artifact Registry verifica repositórios que são mapeados para nomes de host do Container Registry.

Embora o Artifact Registry possa criar os repositórios gcr.io ausentes para você quando você ativar o redirecionamento, recomendamos criá-los primeiro para que você possa realizar estas ações antes de ativar o redirecionamento:

Ativar redirecionamento

Para ativar o redirecionamento para o tráfego gcr.io:

Para ativar o redirecionamento, execute o seguinte comando:

gcloud artifacts settings enable-upgrade-redirection \
    --project=PROJECT_ID

Substitua PROJECT_ID pelo ID do projeto do Google Cloud.

O Artifact Registry começa a ativar o redirecionamento.

Para verificar o status atual do redirecionamento, execute o seguinte comando:

gcloud artifacts settings describe

Quando o redirecionamento é ativado, o resultado é:

legacyRedirectionState: REDIRECTION_FROM_GCR_IO_ENABLED

Todo o tráfego para gcr.io, asia.gcr.io, eu.gcr.io e us.gcr.io é redirecionado, mesmo que você não tenha criado repositórios gcr.io para todos os nomes de host do Container Registry. Se você enviar uma imagem para um nome de host que não tem um repositório correspondente do Artifact Registry, o Artifact Registry vai criar o repositório se você tiver uma função com a permissão artifactregistry.repositories.createOnPush. Os papéis predefinidos "Criador de push" (artifactregistry.createOnPushWriter) e "Administrador do repositório de push" (artifactregistry.createOnPushRepoAdmin) têm essa permissão.

Com o redirecionamento ativado, é possível testar a automação e verificar se é possível enviar e extrair imagens usando os novos repositórios gcr.io.

Verificar o redirecionamento

Verifique se as solicitações de envio e extração para os nomes de host gcr.io estão funcionando.

  1. Envie uma imagem de teste para um dos repositórios gcr.io usando o caminho gcr.io.

    1. Marque a imagem usando o caminho gcr.io. Por exemplo, este comando marca a imagem local-image como us.gcr.io/my-project/test-image:

      docker tag local-image us.gcr.io/my-project/test-image
      
    2. Envie a imagem que você marcou. Por exemplo, este comando envia a imagem us.gcr.io/my-project/test-image:

      docker push us.gcr.io/my-project/test-image
      
  2. Liste as imagens no repositório para verificar se a imagem foi enviada corretamente. Por exemplo, para listar imagens em us.gcr.io/my-project, execute o comando:

    gcloud container images list --repository=us.gcr.io/my-project
    
  3. Extraia a imagem do repositório usando o caminho do Container Registry. Por exemplo, este comando extrai a imagem us.gcr.io/my-project/test-image.

    docker pull us.gcr.io/my-project/test-image
    

Após esse teste inicial, verifique se a automação atual para criar e implantar imagens funciona como esperado, incluindo:

  • Os usuários e as contas de serviço que usam o Container Registry ainda podem enviar, extrair e implantar imagens quando o redirecionamento está ativado.
  • A automação só envia imagens para repositórios existentes.
  • Se a verificação de vulnerabilidades do Artifact Analysis estiver ativada, a verificação vai identificar imagens com vulnerabilidades nos repositórios gcr.io.
  • Se você usar a autorização binária, suas políticas atuais vão funcionar corretamente para imagens implantadas de repositórios gcr.io.
  • As assinaturas configuradas do Pub/Sub incluem notificações para mudanças nos repositórios gcr.io.

Limpar imagens do Container Registry

Quando o redirecionamento está ativado, os comandos para excluir imagens em caminhos gcr.io excluem imagens no repositório gcr.io correspondente do Artifact Registry. Os comandos de exclusão para excluir imagens em caminhos gcr.io não excluem imagens armazenadas em hosts do Container Registry.

Para remover com segurança todas as imagens do Container Registry, exclua os buckets do Cloud Storage para cada nome de host do Container Registry.

Para excluir cada bucket de armazenamento do Container Registry:

Console

  1. Acesse a página do Cloud Storage no console do .
  2. Selecione o bucket de armazenamento a ser excluído. Nos nomes dos buckets, PROJECT-ID é o ID do projeto do Google Cloud do seu projeto.

    • gcr.io: artifacts.PROJECT-ID.appspot.com
    • asia.gcr.io: asia.artifacts.PROJECT-ID.appspot.com
    • eu.gcr.io: eu.artifacts.PROJECT-ID.appspot.com
    • us.gcr.io: us.artifacts.PROJECT-ID.appspot.com
  3. Clique em Excluir. Uma caixa de diálogo de confirmação vai aparecer.

  4. Para confirmar a exclusão, digite o nome do bucket e clique em Excluir.

gcloud

Se você quiser excluir em massa cem mil ou mais imagens em um bucket, evite usar a CLI gcloud, já que o processo de exclusão leva muito tempo para ser concluído. Use o console Google Cloud para realizar a operação. Para mais informações, consulte Como excluir objetos do Cloud Storage em massa.

Para excluir um bucket, use o comando gcloud storage rm com a flag --recursive.

gcloud storage rm gs://BUCKET-NAME --recursive

Substitua BUCKET-NAME pelo nome do bucket de armazenamento do Container Registry. Nos nomes dos buckets, PROJECT-ID é o ID do projeto do Google Cloud do seu projeto.

  • gcr.io: artifacts.PROJECT-ID.appspot.com
  • asia.gcr.io: asia.artifacts.PROJECT-ID.appspot.com
  • eu.gcr.io: eu.artifacts.PROJECT-ID.appspot.com
  • us.gcr.io: us.artifacts.PROJECT-ID.appspot.com

A resposta terá esta aparência:

Removing gs://artifacts.my-project.appspot.com/...

Se outros serviços do Google Cloud estiverem em execução no mesmo Google Cloud projeto, deixe a API Container Registry ativada. Se você tentar desativar a API Container Registry. O Container Registry mostra um aviso se outros serviços com uma dependência configurada estiverem ativados no projeto. A desativação da API Container Registry desativa automaticamente todos os serviços no mesmo projeto com uma dependência configurada, mesmo que você não esteja usando o Container Registry com esses serviços.

A seguir