Esta página descreve como configurar um cliente de terceiros para autenticar com o Container Registry.
OsGoogle Cloud serviços que se integram com o Container Registry estão pré-configurados com autorizações para aceder a repositórios no mesmo projeto. Não precisa de configurar a autenticação para estes serviços, mas deve verificar se as autorizações estão configuradas corretamente.
Antes de começar
- Verifique se ativou a API Container Registry e instalou a CLI gcloud. Consulte o artigo Ativar e desativar o serviço para ver instruções.
Verifique se a conta que está a usar para a autenticação tem autorizações para aceder ao Container Registry. Recomendamos que use uma conta de serviço em vez de uma conta de utilizador.
Instale o Docker se ainda não estiver instalado. O Docker está incluído no Cloud Shell.
O Docker requer acesso privilegiado para interagir com registos. No Linux ou Windows, adicione o utilizador que usa para executar comandos do Docker ao grupo de segurança do Docker. Este passo não é necessário no MacOS, uma vez que o Docker Desktop é executado numa máquina virtual como utilizador root.
Linux
O grupo de segurança do Docker chama-se
docker
. Para adicionar o seu nome de utilizador, execute o seguinte comando:sudo usermod -a -G docker ${USER}
Windows
O grupo de segurança do Docker chama-se
docker-users
. Para adicionar um utilizador a partir da linha de comandos do administrador, execute o seguinte comando:net localgroup docker-users DOMAIN\USERNAME /add
Onde
- DOMAIN é o seu domínio do Windows.
- USERNAME é o seu nome de utilizador.
Termine sessão e inicie-a novamente para que as alterações de subscrição do grupo entrem em vigor. Se estiver a usar uma máquina virtual, pode ter de a reiniciar para que as alterações à subscrição sejam aplicadas.
Métodos de autenticação
Tem de configurar todos os clientes de terceiros que precisem de aceder ao Container Registry.
Estão disponíveis os seguintes métodos de autenticação:
gcloud
assistente de credenciais (recomendado)- Configure as suas credenciais do Container Registry para utilização com o Docker diretamente no gcloud. Use este método sempre que possível para ter acesso seguro e de curta duração aos recursos do seu projeto. Esta opção só suporta as versões 18.03 ou superiores do Docker.
- Assistente de credenciais autónomo
- Esta opção destina-se principalmente à configuração das suas credenciais para utilização com o Docker na ausência da CLI do Google Cloud. Esta opção só suporta versões do Docker 18.03 ou superiores.
- Chave de acesso As
- credenciais predefinidas da aplicação fornecem tokens de acesso de curta duração que uma conta de serviço usa para aceder aos seus Google Cloud recursos. É a alternativa mais segura à utilização de
gcloud
como auxiliar de credenciais. - Ficheiro de chave JSON
Um par de chaves gerido pelo utilizador que pode usar como credencial para uma conta de serviço. Uma vez que a credencial é de longa duração, é a opção menos segura de todos os métodos de autenticação disponíveis.
Sempre que possível, use um token de acesso ou outro método de autenticação disponível para reduzir o risco de acesso não autorizado aos seus artefactos. As chaves de contas de serviço representam um risco de segurança se não forem geridas corretamente. Deve escolher uma alternativa mais segura às chaves de contas de serviço sempre que possível. Se tiver de fazer a autenticação com uma chave de conta de serviço, é responsável pela segurança da chave privada e por outras operações descritas nas Práticas recomendadas de gestão de chaves de contas de serviço. Se não conseguir criar uma chave de conta de serviço, a criação de chaves de contas de serviço pode estar desativada para a sua organização. Para mais informações, consulte o artigo Gerir recursos da organização seguros por predefinição.
Se adquiriu a chave da conta de serviço a partir de uma fonte externa, tem de a validar antes de a usar. Para mais informações, consulte os Requisitos de segurança para credenciais de origem externa.
Algumas ferramentas ou fluxos de trabalho não oferecem um bom suporte para a utilização de gcloud
como um auxiliar de credenciais. Se usar uma das opções alternativas, certifique-se de que compreende as implicações de segurança.
Definições de autenticação no ficheiro de configuração do Docker
O Docker guarda as definições de autenticação no ficheiro de configuração config.json.
- Linux:
~/.docker/config.json
- Windows:
%USERPROFILE%\.docker\config.json
Existem secções separadas no ficheiro para diferentes métodos de autenticação:
credHelpers
- Se usar o auxiliar de credenciais do Docker para autenticação, o Container Registry armazena as definições do auxiliar de credenciais na secção
credHelpers
do ficheiro. auths
- Se usar o Docker para iniciar sessão com um token ou uma chave de conta de serviço como palavra-passe, o Docker armazena as suas credenciais na secção
auths
do ficheiro. credStore
- Se configurou um armazenamento de credenciais para gerir as suas credenciais, as definições do armazenamento de credenciais encontram-se na secção
credStore
do ficheiro.
Quando o Docker se liga a um registo, verifica primeiro se existe um auxiliar de credenciais associado ao anfitrião. Assim, se o seu config.json
incluir definições do Container Registry nas secções credHelpers
e auths
, as definições na secção auths
são ignoradas.
gcloud credential helper
Recomendamos vivamente que use este método sempre que possível. Oferece acesso seguro e de curta duração aos recursos do seu projeto.
Use a CLI gcloud para configurar a autenticação na Cloud Shell ou em qualquer ambiente onde a CLI do Google Cloud esteja instalada. O Cloud Shell inclui uma versão atual do Docker.
Para configurar a autenticação:
Inicie sessão no gcloud como o utilizador que vai executar os comandos do Docker.
Para configurar a autenticação com credenciais do utilizador, execute o seguinte comando:
gcloud auth login
Para configurar a autenticação com credenciais da conta de serviço, execute o seguinte comando:
gcloud auth activate-service-account ACCOUNT --key-file=KEY-FILE
Onde
- ACCOUNT é o nome da conta de serviço no formato
[USERNAME]@[PROJECT-ID].iam.gserviceaccount.com
. Pode ver as contas de serviço existentes na página Contas de serviço da consola Google Cloud ou com o comandogcloud iam service-accounts list
- KEY-FILE é o ficheiro de chave da conta de serviço. Consulte a documentação sobre a gestão de identidade e acesso (IAM) para obter informações sobre como criar uma chave.
- ACCOUNT é o nome da conta de serviço no formato
Configure o Docker com o seguinte comando:
gcloud auth configure-docker
As suas credenciais são guardadas no diretório inicial do utilizador.
- Linux:
$HOME/.docker/config.json
- Windows:
%USERPROFILE%/.docker/config.json
- Linux:
Assistente de credenciais autónomo
O auxiliar de credenciais do Docker autónomo configura o Docker para autenticar no Container Registry num sistema onde a CLI gcloud não está disponível.
O auxiliar de credenciais obtém as credenciais do Container Registry, quer de forma automática, quer a partir de uma localização especificada através da respetiva flag --token-source
, e, em seguida, escreve-as no ficheiro de configuração do Docker. Deste modo, pode usar a ferramenta de linha de comandos do Docker, docker
, para interagir diretamente com o Container Registry.
Para configurar a autenticação:
Inicie sessão no computador como o utilizador que vai executar os comandos do Docker.
Transfira
docker-credential-gcr
a partir das versões do GitHub:Opcionalmente, pode usar o utilitário de linha de comandos
curl
. Por exemplo:VERSION=2.1.23 OS=linux # or "darwin" for OSX, "windows" for Windows. ARCH=amd64 # or "386" for 32-bit OSs, "arm64" for ARM 64. curl -fsSL "https://github.com/GoogleCloudPlatform/docker-credential-gcr/releases/download/v${VERSION}/docker-credential-gcr_${OS}_${ARCH}-${VERSION}.tar.gz" \ | tar xz docker-credential-gcr \ && chmod +x docker-credential-gcr && sudo mv docker-credential-gcr /usr/bin/
Configure o Docker com o seguinte comando:
docker-credential-gcr configure-docker
As suas credenciais são guardadas no diretório inicial do utilizador.
- Linux:
$HOME/.docker/config.json
- Windows:
%USERPROFILE%/.docker/config.json
- Linux:
Consulte a documentação de ajuda de credenciais do Docker autónomo no GitHub para mais informações.
O Docker está agora configurado para autenticar com o Container Registry. Para enviar e extrair imagens, certifique-se de que as autorizações estão configuradas corretamente.
Chave de acesso
Pode gerar um token de acesso OAuth de curta duração para autenticar com o Container Registry. Uma vez que o token é válido durante 60 minutos, deve solicitá-lo menos de uma hora antes de o usar para se ligar ao Container Registry.
Crie uma nova conta de serviço que irá interagir com o Container Registry.
Consola
Na Google Cloud consola, aceda à página Criar conta de serviço.
Selecione o projeto que quer usar.
No campo Nome da conta de serviço, introduza um nome.
Opcional: no campo Descrição da conta de serviço, introduza uma descrição.
Clique em Criar.
Clique no campo Selecionar uma função. Em Todas as funções, selecione uma função do Cloud Storage adequada com base nas autorizações que quer conceder à conta de serviço.
Clique em Concluído.
gcloud
Pode executar os seguintes comandos através da CLI Google Cloud na sua máquina local ou no Cloud Shell.
Crie a conta de serviço. Substitua NAME por um nome para a conta de serviço.
gcloud iam service-accounts create NAME
Conceda uma função à conta de serviço. Substitua PROJECT_ID pelo ID do projeto e ROLE pela função do Cloud Storage adequada para a conta de serviço. Esta função aplica-se a todos os repositórios no projeto. Pode alterar a função mais tarde e também pode conceder funções diferentes à conta de serviço em repositórios específicos.
gcloud projects add-iam-policy-binding PROJECT_ID --member "serviceAccount:NAME@PROJECT_ID.iam.gserviceaccount.com" --role "roles/ROLE"
Obtenha uma chave para a conta de serviço que vai interagir com o Container Registry.
Consola
Na Google Cloud consola, aceda à página Contas de serviço.
Clique no endereço de email da conta de serviço que quer usar.
Clique em Chaves.
Clique em Adicionar chave e, de seguida, em Criar nova chave.
Clique em Criar. É transferido um ficheiro JSON que contém a chave para o seu computador.
As instruções nesta página usam o nome do ficheiro
keyfile.json
para este ficheiro de chave.Clique em Fechar.
gcloud
Pode executar o seguinte comando através da CLI Google Cloud na sua máquina local ou no Cloud Shell.
As instruções nesta página usam o nome do ficheiro
keyfile.json
para o ficheiro de chave.gcloud iam service-accounts keys create keyfile.json --iam-account [NAME]@[PROJECT_ID].iam.gserviceaccount.com
Execute o seguinte comando para iniciar sessão na CLI do Google Cloud como uma conta de serviço.
gcloud auth activate-service-account ACCOUNT --key-file=KEY-FILE
Onde
- ACCOUNT é o nome da conta de serviço no formato
[USERNAME]@[PROJECT-ID].iam.gserviceaccount.com
. - KEY-FILE é o ficheiro de chave da conta de serviço. Consulte a documentação do IAM para obter informações sobre como criar uma chave.
- ACCOUNT é o nome da conta de serviço no formato
Verifique se as autorizações estão configuradas corretamente para a conta de serviço. Se estiver a usar a conta de serviço do Compute Engine, tem de configurar corretamente as autorizações e os âmbitos de acesso.
Obtenha um token de acesso para a conta de serviço. Uma vez que o token tem uma duração limitada, peça-o menos de uma hora antes de o usar para estabelecer ligação ao Container Registry.
Execute o seguinte comando:
Linux
gcloud auth print-access-token | docker login -u oauth2accesstoken \ --password-stdin https://HOSTNAME
Windows
gcloud auth print-access-token | docker login -u oauth2accesstoken --password-stdin https://HOSTNAME
em que HOSTNAME é
gcr.io
,us.gcr.io
,eu.gcr.io
ouasia.gcr.io
.
O Docker está agora autenticado com o Container Registry.
Ficheiro de chave JSON
Uma chave de conta de serviço é um par de chaves de longa duração que pode usar como credencial para uma conta de serviço. Ao contrário da chave de acesso OAuth, uma chave de conta de serviço não expira.
Qualquer pessoa que tenha acesso a uma chave privada válida para uma conta de serviço pode aceder a recursos através da conta de serviço. Por exemplo, algumas contas de serviço criadas automaticamente pelo Google Cloud, como a conta de serviço do Container Registry, recebem a função de leitura/escrita Editor
para o projeto principal. A conta de serviço predefinida do Compute Engine está configurada com acesso só de leitura ao armazenamento no mesmo projeto.
Além disso, o ciclo de vida do acesso da chave à conta de serviço (e, por conseguinte, aos dados aos quais a conta de serviço tem acesso) é independente do ciclo de vida do utilizador que transferiu a chave.
Use as seguintes diretrizes para limitar o acesso às suas imagens de contentores:
- Crie contas de serviço dedicadas que só são usadas para interagir com o Container Registry.
- Conceda a função específica para o menor acesso possível que a conta de serviço requer.
- Siga as práticas recomendadas para gerir credenciais.
Para criar uma nova conta de serviço e uma chave de conta de serviço para utilização apenas com repositórios do Container Registry:
Crie uma nova conta de serviço que irá interagir com o Container Registry.
Consola
Na Google Cloud consola, aceda à página Criar conta de serviço.
Selecione o projeto que quer usar.
No campo Nome da conta de serviço, introduza um nome.
Opcional: no campo Descrição da conta de serviço, introduza uma descrição.
Clique em Criar.
Clique no campo Selecionar uma função. Em Todas as funções, selecione uma função do Cloud Storage adequada para a conta de serviço.
Clique em Concluído.
gcloud
Pode executar os seguintes comandos através da CLI Google Cloud na sua máquina local ou no Cloud Shell.
Crie a conta de serviço. Substitua NAME por um nome para a conta de serviço.
gcloud iam service-accounts create NAME
Conceda uma função à conta de serviço. Substitua PROJECT_ID pelo ID do projeto e ROLE pela função do Cloud Storage adequada para a conta de serviço.
gcloud projects add-iam-policy-binding PROJECT_ID --member "serviceAccount:NAME@PROJECT_ID.iam.gserviceaccount.com" --role "roles/ROLE"
Obtenha uma chave para a conta de serviço que vai interagir com o Container Registry.
Consola
Na Google Cloud consola, aceda à página Contas de serviço.
Clique no endereço de email da conta de serviço que quer usar.
Clique em Chaves.
Clique em Adicionar chave e, de seguida, em Criar nova chave.
Clique em Criar. É transferido um ficheiro JSON que contém a chave para o seu computador.
As instruções nesta página usam o nome do ficheiro
keyfile.json
para este ficheiro de chave.Clique em Fechar.
gcloud
Pode executar o seguinte comando através da CLI Google Cloud na sua máquina local ou no Cloud Shell.
As instruções nesta página usam o nome do ficheiro
keyfile.json
para o ficheiro de chave.gcloud iam service-accounts keys create keyfile.json --iam-account [NAME]@[PROJECT_ID].iam.gserviceaccount.com
Verifique se as autorizações estão configuradas corretamente para a conta de serviço. Se estiver a usar a conta de serviço do Compute Engine, tem de configurar corretamente as autorizações e os âmbitos de acesso.
Use a chave da conta de serviço como palavra-passe para fazer a autenticação com o Docker.
Linux / macOS
cat KEY-FILE | docker login -u _json_key --password-stdin \ https://HOSTNAME
Windows
Get-Content KEY-FILE | docker login -u _json_key --password-stdin https://HOSTNAME
Substitua o seguinte:
- KEY-FILE é o nome do ficheiro de chave da conta de serviço no formato JSON.
- HOSTNAME é
gcr.io
,us.gcr.io
,eu.gcr.io
ouasia.gcr.io
.
O Docker está agora autenticado com o Container Registry.