Este documento mostra como mapear papéis do Container Registry para papéis do Artifact Registry e aplicá-los a um repositório do Artifact Registry. Você pode seguir as mesmas etapas usando a ferramenta de migração automática.
O Container Registry e o Artifact Registry usam diferentes papéis do Identity and Access Management (IAM) para controlar o acesso a imagens de contêiner armazenadas no registro.
Para ajudar na transição do Container Registry para o Artifact Registry, execute um comando da Google Cloud CLI que:
- Identifica políticas de permissão que se aplicam a um bucket de armazenamento do Cloud Storage que armazena imagens para o Container Registry.
- Retorna uma política com papéis semelhantes do Artifact Registry para que você possa conceder aos usuários atuais do Container Registry acesso aos repositórios do Artifact Registry.
O comando usa a Análise de políticas do IAM para analisar políticas de permissão do IAM.
Antes de começar
Crie um repositório do Artifact Registry. Se você escolheu o método manual para fazer a transição, siga as etapas para migrar manualmente para repositórios
gcr.io
no Artifact Registry ou migrar manualmente para repositóriospkg.dev
.Enable the Cloud Asset API.
Você precisa ativar a API no projeto em que quer analisar as políticas de permissão existentes.
Instale e inicialize a gcloud CLI. Para uma instalação atual, atualize para a versão mais recente com o comando:
gcloud components update
Funções exigidas
Para receber as permissões necessárias para analisar políticas de permissão e conceder acesso a repositórios do Artifact Registry, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto, na pasta ou na organização que você quer analisar para permissões:
-
Leitor de recursos do Cloud (
roles/cloudasset.viewer
) -
Para analisar políticas com papéis personalizados do IAM:
Leitor de papéis (
roles/iam.roleViewer
) -
Para usar a Google Cloud CLI e analisar políticas:
Consumidor de uso do serviço (
roles/serviceusage.serviceUsageConsumer
) - Para conceder papéis em um repositório do Artifact Registry: Administrador do Artifact Registry
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Esses papéis predefinidos contêm as permissões necessárias para analisar políticas de permissão e conceder acesso a repositórios do Artifact Registry. Para conferir as permissões exatas necessárias, expanda a seção Permissões necessárias:
Permissões necessárias
As permissões a seguir são necessárias para analisar políticas de permissão e conceder acesso a repositórios do Artifact Registry:
-
cloudasset.assets.analyzeIamPolicy
-
cloudasset.assets.searchAllResources
-
cloudasset.assets.searchAllIamPolicies
-
Para analisar políticas com papéis personalizados do IAM:
iam.roles.get
-
Para usar a Google Cloud CLI e analisar políticas:
serviceusage.services.use
-
Para conceder papéis em um repositório do Artifact Registry:
artifactregistry.repositories.setIamPolicy
Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.
Usar a ferramenta de mapeamento
A ferramenta de mapeamento verifica as políticas de permissão para um nome de host especificado do Container Registry, como gcr.io
.
A ferramenta verifica conjuntos de permissões que estão em papéis predefinidos do Cloud Storage e os mapeia para papéis do Artifact Registry. Para uma comparação das permissões do Cloud Storage com os papéis do Artifact Registry, consulte Mapeamentos de papéis.
Para usar a ferramenta de mapeamento de função:
Execute a ferramenta de mapeamento:
gcloud beta artifacts docker upgrade print-iam-policy HOSTNAME \ --project=PROJECT_ID > POLICY_FILENAME
Substitua os seguintes valores:
HOSTNAME é o nome do host do Container Registry que você quer que a ferramenta analise:
gcr.io
asia.gcr.io
eu.gcr.io
us.gcr.io
PROJECT_ID é o ID do projeto Google Cloud com o host do registro que você está analisando.
POLICY_FILE é o nome do arquivo da política, no formato YAML, que a ferramenta vai retornar.
O comando de exemplo a seguir analisa o bucket de armazenamento de
gcr.io
no projetomy-project
para políticas de permissão aplicadas diretamente ao bucket ou herdadas do ID da organização mãe101231231231
e seus descendentes.gcloud beta artifacts docker upgrade print-iam-policy gcr.io \ --project=my-project > gcr-io-policy.yaml
O comando retorna um arquivo de política no formato YAML com vinculações de função do Artifact Registry, com base nas políticas de permissão atuais para o bucket de armazenamento. Se o projeto pai do bucket de armazenamento estiver em uma organização, o arquivo de política incluirá principais que têm acesso concedido no nível da pasta ou da organização.
Por exemplo, a amostra a seguir inclui vinculações de função do Artifact Registry para:
- Agentes de serviço do Cloud Build, do Compute Engine e do Container Registry. Os agentes de serviço atuam em nome dos serviçosGoogle Cloud .
- A conta de usuário
user@example.com
- A conta serviço gerenciado pelo usuário
deploy@my-project.iam.gserviceaccount.com
.
bindings: - members: - service-3213213213213@gcp-sa-cloudbuild.iam.gserviceaccount.com - user:user@example.com role: roles/artifactregistry.repoAdmin - members: - serviceAccount:deploy@my-project.iam.gserviceaccount.com - serviceAccount:service-1231231231231@@compute-system.iam.gserviceaccount.com - serviceAccount:service-1231231231231@containerregistry.iam.gserviceaccount.com role: roles/artifactregistry.reader
Remova a linha do agente de serviço do Container Registry do arquivo de política, já que essa conta de serviço não exige acesso aos repositórios do Artifact Registry. O sufixo do endereço de e-mail do agente de serviço é
containerregistry.iam.gserviceaccount.com
.Na política de exemplo da etapa anterior, a linha com o agente de serviço do Container Registry é:
- serviceAccount:service-1231231231231@containerregistry.iam.gserviceaccount.com
Revise as outras vinculações de função para confirmar se elas são adequadas.
O Artifact Registry tem outros papéis predefinidos que você pode considerar para alguns principais. Por exemplo, o administrador de repositório de criação por push do Artifact Registry permite que um principal crie repositórios gcr.io no Artifact Registry, mas não permite que ele crie outros repositórios do Artifact Registry.
Adicione vinculações de papéis para os principais que estão faltando no arquivo de política.
Os seguintes principais podem estar ausentes do arquivo de política retornado:
- Principais com papéis personalizados, e esses papéis não têm os conjuntos de permissões que a ferramenta usava para mapear papéis.
- Principais que receberam acesso em uma pasta ou organização pai se você não tiver permissões para visualizar uma pasta ou organização pai.
Aplique as vinculações de política aos repositórios do Artifact Registry.
gcloud artifacts repositories set-iam-policy REPOSITORY FILENAME \ --project=PROJECT_ID \ --location=LOCATION
Substitua os seguintes valores:
- REPOSITORY é o nome do repositório.
- POLICY_FILENAME é o nome do arquivo de política que você está aplicando ao repositório.
- PROJECT_ID é o ID do projeto.
- LOCATION é o local regional ou multirregional do repositório.
O exemplo a seguir para o projeto
my-project
aplica a política no arquivogcr-io-policy.yaml
ao repositório chamadogcr.io
na multirregiãous
:gcloud artifacts repositories set-iam-policy gcr.io gcr-io-policy.yaml \ --project=my-project \ --location=us
Se você quiser aplicar vinculações de papéis a um recurso de nível superior, edite a política de projeto, pasta ou organização com as vinculações que você quer adicionar.
Mapeamentos de papéis
A tabela a seguir mostra quais papéis predefinidos do Artifact Registry precisam ser concedidos aos usuários atuais do Container Registry, dependendo das permissões do Cloud Storage que eles têm.
Permissões necessárias na função | Papel do Artifact Registry |
---|---|
storage.objects.get storage.objects.list |
Leitor do Artifact Registry |
storage.buckets.get storage.objects.get storage.objects.list storage.objects.create |
Gravador do Artifact Registry |
storage.buckets.get storage.objects.get storage.objects.list storage.objects.create storage.objects.delete |
Administrador do repositório do Artifact Registry |
storage.buckets.get storage.objects.get storage.objects.list storage.objects.create storage.buckets.create |
Administrador do Artifact Registry |