Mapear papéis do IAM do Container Registry para o Artifact Registry

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 do Cloud Storage que armazena imagens para o Container Registry
  • Retorna uma política com funções semelhantes do Artifact Registry para que você possa conceder acesso aos usuários do Container Registry aos repositórios do Artifact Registry.

O comando usa o Analisador de políticas do IAM para analisar as políticas de permissão do IAM.

Antes de começar

  1. Crie um repositório do Artifact Registry. Se você escolheu o método manual para a transição, siga as etapas para migrar manualmente para repositórios gcr.io no Artifact Registry ou migrar manualmente para repositórios pkg.dev.

  2. Enable the Cloud Asset API.

    Enable the API

    É necessário ativar a API no projeto em que você quer analisar as políticas de permissão existentes.

  3. Instale e inicialize a gcloud CLI. Para uma instalação existente, 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 aos 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 verificar as permissões:

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 aos 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 aos repositórios do Artifact Registry:

  • cloudasset.assets.analyzeIamPolicy
  • cloudasset.assets.searchAllResources
  • cloudasset.assets.searchAllIamPolicies
  • Para analisar políticas com funções personalizadas do IAM: iam.roles.get
  • Para usar a Google Cloud CLI para 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 políticas de permissão para um nome de host do Container Registry especificado, como gcr.io.

A ferramenta verifica se há conjuntos de permissões 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:

  1. 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 de 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 do Google Cloud com o host de 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 para gcr.io no projeto my-project em busca de políticas de permissão que são aplicadas diretamente ao bucket ou são herdadas do ID da organização pai 101231231231 e dos 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 do bucket de armazenamento. Se o projeto pai do bucket de armazenamento estiver em uma organização, o arquivo de política vai incluir os principais que têm acesso concedido no nível da pasta ou da organização.

    Por exemplo, o exemplo a seguir inclui vinculações de função do Artifact Registry para:

    • Agentes de serviço do Cloud Build, Compute Engine e Container Registry. Os agentes de serviço atuam em nome dos serviços do Google 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
    
  2. Remova a linha do agente de serviço do Container Registry do arquivo de política, porque 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.

    No exemplo de política da etapa anterior, a linha com o agente de serviço do Container Registry é:

    - serviceAccount:service-1231231231231@containerregistry.iam.gserviceaccount.com
    
  3. Revise as outras vinculações de papel 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 Create-on-Push no Artifact Registry permite que um principal crie repositórios gcr.io no Artifact Registry, mas não permite que ele crie outros repositórios no Artifact Registry.

  4. Adicione vinculações de papel para todos os principais que estão ausentes no arquivo de política.

    Os principais abaixo podem estar ausentes do arquivo de política retornado:

    • Princípios com funções personalizadas e essas funções não têm os conjuntos de permissões que a ferramenta usou para mapear funções.
    • Pessoas autorizadas a acessar uma pasta ou organização mãe se você não tiver permissões para visualizar uma pasta ou organização mãe.
  5. Aplique as vinculações de políticas 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 arquivo gcr-io-policy.yaml ao repositório gcr.io na multirregião us:

    gcloud artifacts repositories set-iam-policy gcr.io gcr-io-policy.yaml \
        --project=my-project \
        --location=us
    

    Se você quiser aplicar vinculações de função a um recurso de nível mais alto, edite a política de projeto, pasta ou organização atual com as vinculações que você quer adicionar.

Mapeamentos de função

A tabela a seguir mostra quais papéis predefinidos do Artifact Registry devem ser concedidos a usuários do Container Registry, dependendo das permissões do Cloud Storage que eles têm.

Permissões necessárias no papel Função 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