Controlo de acesso com a IAM

Esta página descreve o controlo de acesso com a gestão de identidade e de acesso (IAM) no Artifact Registry.

As autorizações predefinidas do Artifact Registry minimizam o esforço de configuração quando implementa um pipeline de CI/CD. Também pode integrar o Artifact Registry com ferramentas de CI/CD de terceiros e configurar as autorizações e a autenticação necessárias para aceder aos repositórios.

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

  1. Ative o Artifact Registry, incluindo a ativação da API e a instalação da CLI Google Cloud.
  2. Se quiser aplicar autorizações específicas do repositório, então crie um repositório do Artifact Registry para os seus pacotes.

Vista geral

As autorizações e as funções da IAM determinam a sua capacidade de criar, ver, editar ou eliminar dados num repositório do Artifact Registry.

Uma função é uma coleção de autorizações. Não pode conceder autorizações a um principal diretamente. Em alternativa, concede-lhe uma função. Quando atribui uma função a um principal, concede-lhe todas as autorizações que a função contém. Pode conceder várias funções ao mesmo principal.

Google Cloud autorizações predefinidas

Por predefinição, as seguintes autorizações aplicam-se aos Google Cloud serviços de CI/CD no mesmo projeto que o Artifact Registry:

  • As autorizações do Cloud Build incluem autorizações para carregar e transferir artefactos.

Se todos os seus serviços estiverem no mesmo Google Cloud projeto e as autorizações predefinidas satisfizerem as suas necessidades, não tem de configurar autorizações.

Tem de configurar as autorizações do Artifact Registry para estes serviços se:

  • Quer usar estes serviços para aceder ao Artifact Registry noutro projeto. No projeto com o Artifact Registry, conceda o workload identity pool ou a conta de serviço para cada serviço com a função necessária. Se estiver a estabelecer ligação ao Cloud Run, conceda ao agente do serviço do Cloud Run a função necessária.
  • Está a usar uma versão do GKE que não tem suporte incorporado para extrair imagens do Artifact Registry. Consulte a secção GKE para ver instruções de configuração.
  • Quer que a conta de serviço predefinida tenha acesso de leitura e escrita aos repositórios. Consulte as seguintes informações para ver detalhes:
  • Está a usar uma conta de serviço fornecida pelo utilizador para os seus ambientes de tempo de execução em vez da conta de serviço predefinida. No projeto com o Artifact Registry, conceda à sua conta de serviço a função necessária.

Integração de terceiros

Para clientes de terceiros, tem de configurar as autorizações e a autenticação.

Normalmente, as aplicações executadas fora do Google Cloud usam chaves de contas de serviço para aceder a recursos do Google Cloud. Google Cloud Google Cloud No entanto, as chaves de contas de serviço são credenciais poderosas e podem representar um risco de segurança se não forem geridas corretamente.

A Workload Identity Federation permite-lhe usar a gestão de identidade e de acesso para conceder identidades externas funções do IAM, incluindo a capacidade de se fazer passar por contas de serviço. Esta abordagem elimina o encargo de manutenção e segurança associado às chaves de contas de serviço.

Use a federação de identidades da carga de trabalho:

  1. Crie um Workload Identity Federation Pool.
  2. Crie um fornecedor da federação de identidades da carga de trabalho.
  3. Conceda a função adequada do Artifact Registry ao conjunto de identidades da carga de trabalho para permitir o acesso ao repositório. Para mais informações, consulte o artigo Permita que a sua carga de trabalho externa aceda aos Google Cloud recursos.
  4. Se precisar de aceder ao Artifact Registry durante mais tempo, configure o tempo de expiração do token OIDC para um período mais longo na sua configuração de credenciais.
  5. Configure o seu cliente de terceiros para autenticar com o Artifact Registry.

Usar uma conta de serviço:

  1. Crie uma conta de serviço para agir em nome da sua aplicação ou escolha uma conta de serviço existente que use para a automatização de CI/CD.
  2. Conceda a função adequada do Artifact Registry à conta de serviço para fornecer acesso ao repositório.
  3. Configure o seu cliente de terceiros para autenticar com o Artifact Registry.

GitLab em Google Cloud

A integração do GitLab usa a federação de identidades da carga de trabalho para autorização e autenticação de cargas de trabalho do GitLab no Google Cloud sem necessidade de contas de serviço nem chaves de contas de serviço. Google Cloud Para mais informações sobre como a Workload Identity Federation é usada nesta parceria, consulte Google Cloud Workload Identity Federation e políticas de IAM.

Para configurar a federação de identidade da força de trabalho e as funções de IAM necessárias para o GitLab no Google Cloud, consulte o tutorial do GitLab Google Cloud Federação de identidade da força de trabalho e políticas de IAM.

Para associar o seu repositório do Artifact Registry, siga o tutorial do GitLab Google Artifact Registry.

Funções e permissões

Todos os métodos da API Artifact Registry requerem que o principal que faz o pedido tenha as autorizações necessárias para usar o recurso. As autorizações são concedidas aos responsáveis através da definição de políticas que concedem ao responsável uma função predefinida no recurso.

Pode conceder funções no Google Cloud projeto ou no repositório do Artifact Registry.

Funções predefinidas do Artifact Registry

A IAM oferece funções predefinidas que concedem acesso a Google Cloud recursos específicos.

Use as seguintes funções predefinidas para repositórios no domínio pkg.dev:
Função Descrição
Leitor do Artifact Registry
(roles/artifactregistry.reader)
Ver e obter artefactos, ver metadados do repositório.
Escritor do Artifact Registry
(roles/artifactregistry.writer)
Ler e escrever artefactos.
Administrador do repositório do Artifact Registry
(roles/artifactregistry.repoAdmin)
Ler, escrever e eliminar artefactos.
Administrador do Artifact Registry
(roles/artifactregistry.admin)
Crie e faça a gestão de repositórios e artefactos.
As seguintes funções predefinidas adicionais contêm as autorizações necessárias para migrar do Container Registry para o Artifact Registry.

Função Descrição
Administrador de migração do Container Registry para o Artifact Registry (roles/artifactregistry.containerRegistryMigrationAdmin) Inclui todas as autorizações necessárias para executar as ferramentas de migração
Escritor de criação no envio do Artifact Registry (roles/artifactregistry.createOnPushWriter) Ler e escrever artefactos. Crie repositórios gcr.io quando envia para URLs gcr.io.
Administrador do repositório de criação no envio do Artifact Registry (roles/artifactregistry.createOnPushRepoAdmin) Ler, escrever e eliminar artefactos. Criar repositórios gcr.io.
Para ver uma lista completa das autorizações individuais em cada função, consulte o artigo Funções do Artifact Registry. Também pode usar o comando gcloud iam roles describe para ver uma lista de autorizações em cada função.

Funções básicas de IAM

As funções básicas são funções altamente permissivas que existiam antes da introdução do IAM. Não deve conceder funções básicas num ambiente de produção, mas pode concedê-las num ambiente de desenvolvimento ou de teste.

Use funções predefinidas para o acesso ao repositório sempre que possível, para que os utilizadores e as contas de serviço tenham apenas as autorizações necessárias.

Para mais informações sobre funções básicas, consulte a referência de funções básicas e predefinidas do IAM.

Conceder funções

Conceda funções ao nível do projeto se as mesmas funções se aplicarem a todos os repositórios no projeto. Se algumas contas precisarem de diferentes níveis de acesso, atribua funções ao nível do repositório.

Se estiver a conceder funções num repositório virtual, essas funções aplicam-se a todos os repositórios upstream disponíveis através do repositório virtual, independentemente das autorizações individuais do repositório.

Se estiver a conceder funções através do comando gcloud, pode especificar uma única associação de funções para um principal ou fazer alterações de políticas em grande escala obtendo a política de autorização de um recurso, modificando-a e, em seguida, definindo a política de autorização modificada. Para mais informações, consulte o artigo Conceda ou revogue várias funções através de programação.

Conceder funções ao nível do projeto

Conceda uma função ao nível do projeto se as mesmas autorizações se aplicarem a todos os repositórios no projeto.

Para adicionar um utilizador ou uma conta de serviço a um projeto e conceder-lhe uma função do Artifact Registry:

Consola

  1. Abra a página IAM na Google Cloud consola.

    Abra a página do IAM

  2. Clique em Selecionar um projeto, escolha o projeto onde o Artifact Registry está a ser executado e clique em Abrir.

  3. Clique em Adicionar.

  4. Introduza um endereço de email. Pode adicionar indivíduos, contas de serviço ou Grupos Google como principais.

  5. Selecione uma função para o principal. De acordo com o princípio de segurança do menor privilégio, considere conceder a menor quantidade de privilégios necessária para aceder aos recursos do Artifact Registry necessários. Para obter informações sobre as funções e as autorizações predefinidas do Artifact Registry, consulte o artigo Funções predefinidas do Artifact Registry.

  6. Clique em Guardar.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Para conceder uma função a um único principal, execute o seguinte comando:

    gcloud projects add-iam-policy-binding PROJECT \
       --member=PRINCIPAL \
       --role=ROLE

    onde

    • PROJECT é o ID do projeto onde o Artifact Registry está em execução.
    • PRINCIPAL é o principal ao qual adicionar a associação. Use o formulário user|group|serviceAccount:email ou domain:domain.

      Exemplos: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com ou domain:example.domain.com.

    • ROLE é a função que quer conceder.

    Para mais informações, consulte a documentação add-iam-policy-binding.

    Para conceder funções através de um ficheiro de política, consulte o artigo Conceda ou revogue várias funções programaticamente

Conceder funções específicas do repositório

Atribua funções ao nível do repositório quando quiser que os utilizadores ou as contas de serviço tenham diferentes níveis de acesso para cada repositório no seu projeto.

Consola

Para conceder acesso a um repositório específico:

  1. Abra a página Repositórios na Google Cloud consola.

    Abra a página Repositórios

  2. Selecione o repositório adequado.

  3. Se o painel de informações não for apresentado, clique em Mostrar painel de informações na barra de menu.

  4. No separador Permissões, clique em Adicionar principal.

  5. Introduza um endereço de email. Pode adicionar indivíduos, contas de serviço ou Grupos Google como principais.

  6. Selecione uma função para o principal. De acordo com o princípio de segurança do menor privilégio, considere conceder a menor quantidade de privilégios necessária para aceder aos recursos do Artifact Registry necessários. Para obter informações sobre as autorizações e as funções predefinidas do Artifact Registry, consulte o artigo Funções predefinidas do Artifact Registry.

  7. Clique em Guardar.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Pode definir um conjunto IAM de associações de políticas individuais ou usar um ficheiro de políticas.

    Para conceder uma função a um único principal, execute o seguinte comando:

    gcloud artifacts repositories add-iam-policy-binding REPOSITORY \
       --location=LOCATION \
       --member=PRINCIPAL \
       --role=ROLE

    onde

    • REPOSITORY é o ID do repositório.
    • PRINCIPAL é o principal ao qual adicionar a associação. Use o formulário user|group|serviceAccount:email ou domain:domain.

      Exemplos: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com ou domain:example.domain.com.

    • ROLE é a função que quer conceder.

    • LOCATION é a localização regional ou multirregional do repositório.

    Por exemplo, para adicionar uma associação de política de IAM para a função roles/artifactregistry.writer para o utilizador write@gmail.com com o repositório my-repo na localização --us-west1, execute:

    gcloud artifacts repositories add-iam-policy-binding my-repo \
    --location=us-west1 --member=user:write@gmail.com --role=roles/artifactregistry.writer

    Para conceder funções através de um ficheiro de política, use o procedimento descrito em Conceda ou revogue várias funções programaticamente com os comandos gcloud artifacts repositories get-iam-policy e gcloud artifacts repositories set-iam-policy.

  3. Terraform

    Use o recurso google_artifact_registry_repository_iam para configurar uma política de IAM. O exemplo seguinte define uma conta de serviço com o nome do recurso repo-account e concede-lhe acesso de leitura a um repositório com o nome do recurso my-repo.

    Se for a primeira vez que usa o Terraform para o Google Cloud, consulte a página Introdução - Google Cloud no Website da HashiCorp.

    provider "google" {
        project = "PROJECT-ID"
    }
    
    resource "google_artifact_registry_repository" "my-repo"     {
      provider = google-beta
    
      location = "LOCATION"
      repository_id = "REPOSITORY"
      description = "DESCRIPTION"
      format = "FORMAT"
    }
    
    resource "google_service_account" "repo-account" {
      provider = google-beta
    
      account_id   = "ACCOUNT-ID"
      display_name = "Repository Service Account"
    }
    
    resource "google_artifact_registry_repository_iam_member" "repo-iam" {
      provider = google-beta
    
      location = google_artifact_registry_repository.my-repo.location
      repository = google_artifact_registry_repository.my-repo.name
      role   = "roles/artifactregistry.reader"
      member = "serviceAccount:${google_service_account.repo-account.email}"
    }
    

    ACCOUNT-ID é o ID da conta de serviço. Esta é a parte do campo de email da conta de serviço antes do símbolo @.

    Para ver exemplos adicionais, consulte a documentação do recurso google_artifact_registry_repository_iam.

Configurar o acesso público a um repositório

Se tiver artefactos que quer disponibilizar a qualquer pessoa na Internet sem autenticação, armazene-os num repositório que torne público.

Para configurar um repositório para acesso público só de leitura, conceda a função de leitor do Artifact Registry ao principal allUsers. Também recomendamos que limite as quotas de pedidos dos utilizadores para que um único utilizador não possa usar a quota geral do seu projeto.

Consola

  1. Abra a página Repositórios na Google Cloud consola.

    Abra a página Repositórios

  2. Selecione o repositório adequado.

  3. Se o painel de informações não for apresentado, clique em Mostrar painel de informações na barra de menu.

  4. No separador Permissões, clique em Adicionar principal.

  5. No campo Novos principais, introduza allUsers.

  6. Selecione a função Leitor do Artifact Registry.

  7. Defina um limite por utilizador para pedidos da API Artifact Registry para evitar a utilização indevida por utilizadores não autenticados. Para obter instruções, consulte a secção Limitar a utilização.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Execute o seguinte comando:

    gcloud artifacts repositories add-iam-policy-binding REPOSITORY \
    --location=LOCATION --member=allUsers --role=ROLE

    onde

    • REPOSITORY é o ID do repositório.

    • ROLE é a função que quer conceder.

    • LOCATION é a localização regional ou multirregional do repositório.

    Por exemplo, para configurar o repositório my-repo na localização --us-west1 como público, execute o seguinte comando:

    gcloud artifacts repositories add-iam-policy-binding my-repo \
     --location=us-west1 --member=allUsers --role=roles/artifactregistry.reader

  3. Defina um limite por utilizador para pedidos da API Artifact Registry para evitar a utilização indevida por utilizadores não autenticados. Para obter instruções, consulte a secção Limitar a utilização.

Revogar funções

Para revogar o acesso a um repositório, remova o principal da lista de principais autorizados.

Para remover o acesso público de um repositório, remova o principal allUsers.

Consola

Para revogar autorizações:

  1. Abra a página Repositórios na Google Cloud consola.

    Abra a página Repositórios

  2. Selecione o repositório adequado.

  3. Se o painel de informações não for apresentado, clique em Mostrar painel de informações na barra de menu.

  4. No separador Autorizações, expanda o principal adequado. Se estiver a tornar um repositório público privado, expanda o principal allUsers.

  5. Clique em Remover principal para revogar o acesso.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Para revogar uma função ao nível do projeto, execute o seguinte comando:

    gcloud projects remove-iam-policy-binding PROJECT \
       --member=PRINCIPAL \
       --role=ROLE
    • PROJECT é o ID do projeto.
    • PRINCIPAL é o principal para o qual a associação vai ser removida. Use o formulário user|group|serviceAccount:email ou domain:domain.

      Exemplos: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com ou domain:example.domain.com.

    • ROLE é a função que quer revogar.

    Para revogar uma função para um repositório, execute o seguinte comando:

    gcloud artifacts repositories remove-iam-policy-binding REPOSITORY
       --location=LOCATION \
       --member=PRINCIPAL \
       --role=ROLE

    onde

    • REPOSITORY é o ID do repositório.
    • PRINCIPAL é o principal para o qual a associação vai ser removida. Use o formulário user|group|serviceAccount:email ou domain:domain.

      Exemplos: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com ou domain:example.domain.com.

      Para revogar o acesso público ao repositório, especifique o principal allUsers.

    • ROLE é a função que quer revogar.

    Por exemplo, para remover uma associação de política para a função roles/artifactregistry.writer para o utilizador write@gmail.com com o repositório my-repo na localização --us-west1, execute:

    gcloud artifacts repositories remove-iam-policy-binding my-repo \
       --location=us-west1 \
       --member=user:write@gmail.com \
       --role=roles/artifactregistry.writer

    Para revogar o acesso público a my-repo na localização --us-west1, execute o seguinte comando:

    gcloud artifacts repositories remove-iam-policy-binding my-repo \
       --location=us-west1 \
       --member=allUsers \
       --role=roles/artifactregistry.reader

Conceder acesso condicional com etiquetas

Os administradores de projetos podem criar etiquetas para recursos em todos os projetos Google Cloud e geri-las no Gestor de recursos. Quando anexa uma etiqueta a um repositório do Artifact Registry, os administradores podem usar a etiqueta com condições do IAM para conceder acesso condicional ao repositório.

Não pode anexar etiquetas a artefactos individuais.

Para mais informações, consulte a seguinte documentação:

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 funções do IAM adequadas.

Contas de serviço predefinidas para os 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 Artifact Registry.
  • As autorizações predefinidas não satisfazem as suas necessidades.
  • Está a usar uma conta de serviço fornecida pelo utilizador para interagir com o Artifact Registry em vez da conta de serviço predefinida.
  • A configuração da política da organização impede a concessão automática de funções a contas de serviço predefinidas.

Normalmente, as seguintes contas de serviço acedem ao Artifact Registry. O endereço de email da conta de serviço inclui o Google Cloud ID do projeto ou número do projeto do projeto onde o serviço está a ser executado.

Serviço Conta de serviço Endereço de email
Ambiente flexível do App Engine Conta de serviço do App Engine PROJECT-ID@appspot.gserviceaccount.com
Compute Engine Conta de serviço predefinida do Compute Engine PROJECT-NUMBER-compute@developer.gserviceaccount.com
Cloud Build Conta de serviço do Compute Engine
ou
conta de serviço do Cloud Build antiga
Consoante as definições da sua organização, o endereço de email da conta de serviço predefinida é um dos seguintes:
  • Compute Engine: PROJECT-NUMBER-compute@developer.gserviceaccount.com
  • Cloud Build: PROJECT-NUMBER@cloudbuild.gserviceaccount.com
Cloud Run Agente do serviço do Cloud Run
O agente do serviço para run.googleapis.com.
service-PROJECT-NUMBER@serverless-robot-prod.iam.gserviceaccount.com
GKE Conta de serviço predefinida do Compute Engine
A conta de serviço predefinida para nós.
PROJECT-NUMBER-compute@developer.gserviceaccount.com

Consoante a configuração da política da organização, a conta de serviço predefinida pode receber automaticamente a função de editor no seu projeto. Recomendamos vivamente que desative a concessão automática de funções aplicando a restrição da política da organização iam.automaticIamGrantsForDefaultServiceAccounts. Se tiver criado a sua organização após 3 de maio de 2024, esta restrição é aplicada por predefinição.

Se desativar a concessão automática de funções, tem de decidir que funções conceder às contas de serviço predefinidas e, em seguida, conceder estas funções.

Se a conta de serviço predefinida já tiver a função de editor, recomendamos que substitua a função de editor por funções menos permissivas.Para modificar as funções da conta de serviço em segurança, use o Simulador de políticas para ver o impacto da alteração e, em seguida, conceda e revogue as funções adequadas.

Conceder acesso a instâncias do Compute Engine

As instâncias de VM que acedem a repositórios têm de ter as autorizações do Artifact Registry e o âmbito de acesso de armazenamento configurados.

Embora o nível de acesso de uma conta de serviço seja determinado pelas funções do IAM concedidas à conta de serviço, os âmbitos de acesso numa instância de VM determinam os âmbitos OAuth predefinidos para pedidos feitos através da CLI gcloud e das bibliotecas cliente na instância. 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.

O Compute Engine usa os seguintes valores predefinidos:

  • A conta de serviço predefinida do Compute Engine é a identidade das instâncias de VM. O endereço de email da conta de serviço tem o sufixo @developer.gserviceaccount.com.
  • A conta de serviço predefinida tem a função de editor básico do IAM, se não tiver desativado este comportamento.
  • As instâncias que criar com a conta de serviço predefinida têm os âmbitos de acesso predefinidos do Compute Engine, incluindo o acesso só de leitura ao armazenamento. Embora a função de editor conceda geralmente acesso de escrita, o âmbito de acesso ao armazenamento read-only limita a conta de serviço da instância à transferência de artefactos apenas de qualquer repositório no mesmo projeto.

Tem de configurar o âmbito de acesso da conta de serviço se:

  • A conta de serviço da VM precisa de aceder a um repositório num projeto diferente.
  • A conta de serviço da VM tem de realizar ações que não sejam a leitura de artefactos dos repositórios. Isto aplica-se normalmente a ferramentas de terceiros numa VM que precisam de enviar imagens ou executar comandos do gcloud Artifact Registry.

Para configurar funções e definir o âmbito de acesso:

  1. No projeto com a sua instância de VM, obtenha o nome da conta de serviço predefinida do Compute Engine. O endereço de email da conta de serviço tem o sufixo @developer.gserviceaccount.com.

  2. No projeto com o repositório, conceda autorizações para que a conta de serviço possa aceder ao repositório.

  3. Defina o âmbito de acesso com a opção --scopes.

    1. Pare a instância de VM. Consulte o artigo Parar uma instância.

    2. Defina o âmbito de acesso com o seguinte comando:

      gcloud compute instances set-service-account INSTANCE --scopes=SCOPE
      

      Substitua SCOPE pelo valor adequado.

      • Para o Docker, são suportadas as seguintes opções:

        • storage-ro: concede autorização de leitura apenas para obter imagens.
        • storage-rw - Concede autorização de leitura e escrita para enviar ou extrair imagens.
        • cloud-platform - Ver e gerir dados, incluindo metadados, no serviçoGoogle Cloud .
      • Para outros formatos, tem de usar o âmbito cloud-platform.

    3. Reinicie a instância de VM. Consulte o artigo Iniciar uma instância parada.

Conceder acesso a clusters do Google Kubernetes Engine

Os clusters e os conjuntos de nós do GKE podem extrair contentores sem qualquer configuração adicional se todos os seguintes requisitos forem cumpridos:

Se o seu ambiente do GKE não cumprir estes requisitos, as instruções para conceder acesso dependem de estar a usar a conta de serviço predefinida do Compute Engine ou uma conta de serviço fornecida pelo utilizador como a identidade dos seus nós.

Conta de serviço predefinida

Os seguintes requisitos de configuração aplicam-se à conta de serviço predefinida do Compute Engine:

  1. Se o GKE estiver num projeto diferente do Artifact Registry, conceda as autorizações necessárias à conta de serviço.

  2. Para enviar imagens, interagir com repositórios para formatos que não sejam contentores ou executar comandos gcloud a partir do cluster, tem de definir âmbitos de acesso para a conta de serviço quando criar o cluster ou o conjunto de nós.

  3. Se não estiver a usar uma versão suportada do GKE, configure imagePullSecrets.

Conta de serviço fornecida pelo utilizador

Se quiser usar uma conta de serviço fornecida pelo utilizador como identidade para um cluster, tem de:

  1. Conceda as autorizações necessárias à conta de serviço a partir do projetoGoogle Cloud onde o Artifact Registry está a ser executado.

  2. Por predefinição, a criação de um cluster ou um conjunto de nós com uma conta de serviço fornecida pelo utilizador concede o âmbito de acesso cloud-platform.

    Se usar a flag --scopes com o comando gcloud container clusters create ou gcloud container node-pools create, tem de incluir os âmbitos de acesso adequados para utilização com o Artifact Registry.

Definir âmbitos de acesso

Os âmbitos de acesso são o método antigo de especificar a autorização para VMs do Compute Engine. Para extrair imagens de repositórios do Artifact Registry, os nós do GKE têm de ter o âmbito de acesso só de leitura do armazenamento ou outro âmbito de acesso ao armazenamento que inclua o acesso de leitura ao armazenamento.

Só pode definir âmbitos de acesso quando cria um cluster ou um conjunto de nós. Não pode alterar os âmbitos de acesso nos nós existentes.

Para especificar âmbitos de acesso ao criar um cluster, execute o seguinte comando:

gcloud container clusters create NAME --scopes=SCOPES

Para especificar âmbitos de acesso ao criar um conjunto de nós, execute o seguinte comando:

gcloud container node-pools create NAME --scopes=SCOPES

Substitua os seguintes valores:

  • NAME é o nome do cluster ou do conjunto de nós.
  • SCOPES é uma lista separada por vírgulas de âmbitos de acesso a conceder.

    • Para aceder aos repositórios do Docker, use um dos seguintes âmbitos:

    • storage-ro - Concede autorização só de leitura para obter imagens.

    • storage-rw - Concede autorização de leitura e escrita para enviar ou extrair imagens.

    • cloud-platform - Ver e gerir dados, incluindo metadados, no serviçoGoogle Cloud .

    • Para aceder a outros repositórios, tem de usar o âmbito cloud-platform.

    Para ver uma lista completa de âmbitos, consulte a documentação de gcloud container clusters create ou gcloud container node-pools create.

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.

Configurar um imagePullSecret

Para configurar uma imagePullSecret:

  1. No projeto com o GKE, encontre a conta de serviço predefinida do Compute Engine. O endereço de email da conta tem o sufixo @developer.gserviceaccount.com.

  2. Transfira a chave da conta de serviço para a conta de serviço.

  3. No projeto com o repositório, verifique se concedeu autorizações ao repositório.

  4. No projeto com o seu cluster, crie um segredo imagePullSecretdenominadoartifact-registry com a chave da conta de serviço.

    kubectl create secret docker-registry artifact-registry \
    --docker-server=https://LOCATION-docker.pkg.dev \
    --docker-email=SERVICE-ACCOUNT-EMAIL \
    --docker-username=_json_key \
    --docker-password="$(cat KEY-FILE)"
    

    Substitua o seguinte:

    • LOCATION é a localização regional ou multirregional do repositório.
    • SERVICE-ACCOUNT-EMAIL é o endereço de email da conta de serviço do Compute Engine.
    • KEY-FILE é o nome do ficheiro de chave da conta de serviço. Por exemplo, `key.json`.
  5. Abra a sua conta de serviço predefinida:

    kubectl edit serviceaccount default --namespace default

    Todos os espaços de nomes no seu cluster do Kubernetes têm uma conta de serviço predefinida denominada default. Esta conta de serviço predefinida é usada para extrair a imagem do contentor.

  6. Adicione o segredo imagePullSecret recém-criado à sua conta de serviço predefinida:

    imagePullSecrets:
    - name: artifact-registry
    

    A sua conta de serviço deve ter agora o seguinte aspeto:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: default
      namespace: default
      ...
    secrets:
    - name: default-token-zd84v
    # The secret you created:
    imagePullSecrets:
    - name: artifact-registry
    

Agora, todos os novos pods criados no espaço de nomes default atual têm o segredo imagePullSecret definido.

Conta de serviço do Artifact Registry

O agente de serviço do Artifact Registry é uma conta de serviço gerida pela Google que atua em nome do Artifact Registry quando interage com os Google Cloud serviços. Para mais informações sobre a conta e as respetivas autorizações, consulte o artigo Conta de serviço do Artifact Registry.

O que se segue?

Depois de configurar as autorizações, saiba como trabalhar com os seus artefactos.

Também pode restringir as transferências de artefactos com regras de transferência.