Tem de se autenticar no Artifact Registry quando usa uma aplicação de terceiros para se ligar a um repositório do Artifact Registry. Esta documentação foca-se na configuração do Maven e do Gradle.
Não precisa de configurar a autenticação para o Cloud Build ou os ambientes de execução, como o Google Kubernetes Engine e o Cloud Run, mas deve verificar se as autorizações necessárias estão configuradas. Google CloudPara saber mais, consulte as informações sobre o Cloud Build e a implementação em ambientes de Google Cloud runtime.
Antes de começar
-
Instale a CLI Google Cloud. Após a instalação, inicialize a CLI gcloud executando o seguinte comando:
gcloud init
Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.
- (Opcional) Configure as predefinições para os comandos gcloud.
Se estiver a configurar a autenticação com um repositório padrão, verifique a política de versões para poder configurar corretamente o seu projeto Maven para os tipos de pacotes Java que pode carregar.
Consola
Abra a página Repositórios na Google Cloud consola.
Clique no repositório no qual quer autenticar.
A secção Detalhes apresenta a política de versões. Se o repositório tiver uma política de versão de instantâneo, o campo Permitir substituições de instantâneos indica se os instantâneos podem substituir versões de instantâneos correspondentes no repositório.
gcloud
Execute o seguinte comando para ver uma descrição de um repositório.
gcloud artifacts repositories describe REPOSITORY \ --project=PROJECT \ --location=LOCATION
Onde
- REPOSITORY é o ID do repositório. Se configurou um repositório do Artifact Registry predefinido, este é usado quando esta flag é omitida do comando.
- PROJECT é o ID do projeto. Se esta flag for omitida, é usado o projeto predefinido atual.
- LOCATION é a localização regional ou multirregional do repositório.
O resultado do comando inclui informações sobre a política de versões em
mavenConfig
. Neste exemplo, o repositório tem uma política de versões de instantâneos e os instantâneos não podem substituir versões idênticas no repositório.Encryption: Google-owned and Google-managed encryption key createTime: '2021-10-04T19:39:10.897404Z' format: MAVEN mavenConfig: allowSnapshotOverwrites: false versionPolicy: SNAPSHOT
Se um repositório não tiver uma política de versões, o valor de
mavenConfig
é{}
.
Vista geral
O Artifact Registry suporta os seguintes métodos de autenticação.
- Usar um auxiliar de autenticação
- Esta opção oferece a maior flexibilidade. Quando inclui o auxiliar na configuração do Maven ou Gradle, o Artifact Registry procura credenciais da conta de serviço no ambiente.
- Especificar uma chave de conta de serviço como credencial
- Use esta opção quando uma aplicação não suporta as credenciais predefinidas da aplicação, mas suporta a autenticação com um nome de utilizador e uma palavra-passe.
As chaves de contas de serviço são credenciais de longa duração. Use as seguintes diretrizes para limitar o acesso aos seus repositórios:
- Considere usar uma conta de serviço dedicada para interagir com repositórios.
- Conceda a função do Artifact Registry mínima exigida pela conta de serviço. Por exemplo, atribua a função Leitor do Artifact Registry a uma conta de serviço que apenas transfere artefactos.
- Se os grupos na sua organização precisarem de diferentes níveis de acesso a repositórios específicos, conceda acesso ao nível do repositório e não ao nível do projeto.
- Siga as práticas recomendadas para gerir credenciais.
Autenticação com um auxiliar de credenciais
O Artifact Registry fornece um vagão Maven e um plug-in do Gradle como auxiliares de credenciais. Quando usa o auxiliar de credenciais, as suas credenciais não são armazenadas no seu projeto Java. Em alternativa, o Artifact Registry procura credenciais pela seguinte ordem:
Credenciais padrão da aplicação (ADC), uma estratégia que procura credenciais pela seguinte ordem:
Credenciais definidas na variável de ambiente
GOOGLE_APPLICATION_CREDENTIALS
.Credenciais fornecidas pela conta de serviço predefinida do Compute Engine, do Google Kubernetes Engine, do Cloud Run, do App Engine ou das funções do Cloud Run.
Credenciais fornecidas pela CLI do Google Cloud, incluindo credenciais de utilizador do comando
gcloud auth application-default login
.
A variável GOOGLE_APPLICATION_CREDENTIALS
torna a conta para autenticação explícita, o que facilita a resolução de problemas. Se não usar a variável, verifique se todas as contas que o ADC possa usar têm as autorizações necessárias. Por exemplo, a conta de serviço predefinida para VMs do Compute Engine, nós do Google Kubernetes Engine e revisões do Cloud Run tem acesso apenas de leitura aos repositórios. Se
pretende fazer o carregamento a partir destes ambientes através da conta de serviço predefinida,
tem de modificar as autorizações.
Configure uma conta de serviço para um auxiliar de credenciais
Para criar uma conta de serviço e configurar a autenticação através da variável de ambiente:
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 automatização.
Precisa da localização do ficheiro de chave da conta de serviço para configurar a autenticação com o Artifact Registry. Para contas existentes, pode ver as chaves e criar novas chaves na página Contas de serviço.
Conceda a função do Artifact Registry específica à conta de serviço para fornecer acesso ao repositório.
Atribua a localização do ficheiro de chave da conta de serviço à variável
GOOGLE_APPLICATION_CREDENTIALS
para que o auxiliar de credenciais do Artifact Registry possa obter a sua chave quando se ligar a repositórios.export GOOGLE_APPLICATION_CREDENTIALS=KEY-FILE
Onde KEY-FILE é o caminho para o ficheiro de chave da conta de serviço.
Configure o Maven
Configure o Maven para o tipo de repositório que está a usar.
Standard
Execute o seguinte comando para imprimir a configuração do repositório a adicionar ao seu projeto Java.
gcloud artifacts print-settings mvn \ --project=PROJECT \ --repository=REPOSITORY \ --location=LOCATION
Onde
- PROJECT é o ID do projeto. Se esta flag for omitida, é usado o projeto predefinido atual.
- REPOSITORY é o ID do repositório. Se configurou um repositório do Artifact Registry predefinido, este é usado quando esta flag é omitida do comando.
- LOCATION é a localização regional ou multirregional do repositório.
Adicione as definições devolvidas às secções adequadas no ficheiro
pom.xml
para o seu projeto Maven. Consulte a referência POM do Maven para ver detalhes sobre a estrutura do ficheiro.O exemplo seguinte mostra as definições de um repositório que armazena versões de instantâneo e de lançamento.
<distributionManagement> <snapshotRepository> <id>artifact-registry</id> <url>artifactregistry://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY</url> </snapshotRepository> <repository> <id>artifact-registry</id> <url>artifactregistry://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY</url> </repository> </distributionManagement> <repositories> <repository> <id>artifact-registry</id> <url>artifactregistry://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <build> <extensions> <extension> <groupId>com.google.cloud.artifactregistry</groupId> <artifactId>artifactregistry-maven-wagon</artifactId> <version>2.2.5</version> </extension> </extensions> </build>
Os elementos
<release>
e<snapshot>
indicam se o repositório armazena pacotes de lançamento, pacotes de instantâneos ou ambos. Estas definições devem corresponder à Política de Versões do repositório.O elemento
<build>
define o vagão do Artifact Registry como uma extensão. Para obter informações sobre o wagon, consulte a documentação das ferramentas Maven do Artifact Registry.
Remoto ou virtual
Edite o ficheiro
pom.xml
no seu projeto. Consulte a referência POM do Maven para ver detalhes sobre a estrutura do ficheiro.O exemplo seguinte mostra as definições de um repositório remoto que armazena versões de instantâneo e de lançamento. Neste exemplo, o projeto tem uma dependência de uma versão do pacote Guava.
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.google.hello</groupId> <artifactId>repo-config</artifactId> <version>4.1-SNAPSHOT</version> <description>version 1 release</description> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>28.0-jre</version> </dependency> </dependencies> <repositories> <repository> <id>central</id> <name>Maven Central remote repository</name> <url>artifactregistry://LOCATION-maven.pkg.dev/PROJECT_ID/REMOTE-REPOSITORY-NAME</url> <layout>default</layout> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <build> <extensions> <extension> <groupId>com.google.cloud.artifactregistry</groupId> <artifactId>artifactregistry-maven-wagon</artifactId> <version>2.2.5</version> </extension> </extensions> </build> </project>
A secção
<repositories>
define o repositório do Artifact Registry. Para um repositório remoto, o elemento<id>
tem de estar definido comocentral
. Esta definição substitui o valor predefinido docentral
ID do repositório que é herdado do Super POM.A secção
<build>
define o vagão do Artifact Registry como uma extensão. Para obter informações sobre o wagon, consulte a documentação das ferramentas Maven do Artifact Registry.Neste exemplo, a secção
<dependencies>
define uma dependência na versão28.0-jre
do pacote Guava.
O Maven resolve algumas dependências antes de aplicar um wagon definido em
pom.xml
, incluindo:- Referências num projeto Maven secundário a um projeto principal através do elemento
<parent>
. - Dependências de plug-ins armazenadas no Artifact Registry.
Se o seu projeto precisar de resolver estas dependências, tem de usar o mecanismo de extensões principais para garantir que o Maven consegue localizar ficheiros POM principais e plug-ins.
No seu projeto, crie o ficheiro
${maven.projectBasedir}/.mvn/extensions.xml
com o seguinte conteúdo. O elemento<extension>
define o vagão.<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd"> <extension> <groupId>com.google.cloud.artifactregistry</groupId> <artifactId>artifactregistry-maven-wagon</artifactId> <version>2.2.5</version> </extension> </extensions>
Agora, o Maven pode resolver dependências de plug-ins ou principais do Artifact Registry.
- Referências num projeto Maven secundário a um projeto principal através do elemento
A configuração da autenticação está concluída.
Configure o Gradle
Configure o Gradle para o tipo de repositório que está a usar.
Standard
Execute o seguinte comando para imprimir a configuração do repositório a adicionar ao seu projeto Java.
gcloud artifacts print-settings gradle \ --project=PROJECT \ --repository=REPOSITORY \ --location=LOCATION
Onde
- PROJECT é o ID do projeto. Se esta flag for omitida, é usado o projeto predefinido atual.
- REPOSITORY é o ID do repositório. Se configurou um repositório do Artifact Registry predefinido, este é usado quando esta flag é omitida do comando.
- LOCATION é a localização regional ou multirregional do repositório.
Adicione as definições do repositório ao ficheiro
build.gradle
. O exemplo seguinte mostra a localização relativa das secções impressas.plugins { id "maven-publish" id "com.google.cloud.artifactregistry.gradle-plugin" version "2.2.5" } publishing { publications { mavenJava(MavenPublication) { groupId 'maven.example.id' from components.java } } repositories { maven { url "artifactregistry://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY" } } } repositories { maven { url "artifactregistry://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY" } }
A secção
plugins
declara o plugin do Artifact Registry. Para obter informações sobre o plug-in, consulte a documentação das ferramentas Maven do Artifact Registry.A secção
publishing
define os ficheiros a carregar e o repositório do Artifact Registry de destino. Pode atualizar a lista de ficheiros na secçãopublications
quando tiver tudo pronto para o carregamento. Para obter informações sobre as definições de publicação, consulte a documentação do plug-in Maven Publish.
Remoto ou virtual
Adicione as definições do repositório ao ficheiro
build.gradle
.O exemplo seguinte mostra as definições de um repositório remoto. Neste exemplo, o projeto tem uma dependência numa versão do pacote Guava.
plugins { id 'java' id "maven-publish" id "com.google.cloud.artifactregistry.gradle-plugin" version "2.2.5" id 'maven' } repositories { maven { url "artifactregistry://LOCATION-maven.pkg.dev /PROJECT_ID/REMOTE-REPOSITORY-NAME" } } dependencies { compile "com.google.guava:guava:31.1-jre" }
A secção
plugins
declara o plugin do Artifact Registry. Para obter informações sobre o plug-in, consulte a documentação das ferramentas Maven do Artifact Registry.A secção
repositories
define o repositório do Artifact Registry.Neste exemplo, a secção
dependencies
define uma dependência na versão31.1-jre
do pacote Guava.
Defina as dependências do seu pacote na secção
dependencies
.Se precisar de usar repositórios no seu ficheiro
init.gradle
ousettings.gradle
, pode adicionar a configuração do plug-in a esses ficheiros.Para
init.gradle
, adicione a seguinte configuração:initscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "gradle.plugin.com.google.cloud.artifactregistry:artifactregistry-gradle-plugin:2.2.5" } } apply plugin: com.google.cloud.artifactregistry.gradle.plugin.ArtifactRegistryGradlePlugin
Para settings.gradle, adicione a seguinte configuração:
buildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "gradle.plugin.com.google.cloud.artifactregistry:artifactregistry-gradle-plugin:2.2.5" } } apply plugin: "com.google.cloud.artifactregistry.gradle-plugin"
A configuração da autenticação está concluída.
Configurar a autenticação por palavra-passe
Use esta abordagem quando a sua aplicação Java requer autenticação com um nome de utilizador e uma palavra-passe especificados.
Configure uma conta de serviço para a autenticação por palavra-passe
Para criar uma conta de serviço:
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 automatização.
Precisa da localização do ficheiro de chave da conta de serviço para configurar a autenticação com o Artifact Registry. Para contas existentes, pode ver as chaves e criar novas chaves na página Contas de serviço.
Se quiser ativar a conta de serviço na sessão atual da CLI gcloud, execute o comando:
gcloud auth activate-service-account ACCOUNT --key-file=KEY-FILE
Onde
- ACCOUNT é o utilizador ou a conta de serviço.
- KEY-FILE é o caminho para o ficheiro de chave JSON da conta de serviço.
Configure o Maven
Configure o Maven para o tipo de repositório que está a usar.
Standard
Execute o seguinte comando para imprimir a configuração do repositório a adicionar ao seu projeto Java.
gcloud artifacts print-settings mvn \ --project=PROJECT \ --repository=REPOSITORY \ --location=LOCATION \ --json-key=KEY-FILE
Onde
- PROJECT é o ID do projeto. Se esta flag for omitida, é usado o projeto predefinido atual.
- REPOSITORY é o ID do repositório. Se configurou um repositório do Artifact Registry predefinido, este é usado quando esta flag é omitida do comando.
- LOCATION é a localização regional ou multirregional do repositório.
- KEY-FILE é o caminho para o ficheiro de chave JSON da conta de serviço.
O comando devolve definições a incluir no seu projeto Java, incluindo uma versão codificada em base64 da sua chave privada.
- Adicione as definições do repositório devolvidas no elemento
<project>
às secções adequadas do ficheiropom.xml
para o seu projeto Maven. Consulte a referência POM do Maven para ver detalhes sobre a estrutura do ficheiro.
<project> <distributionManagement> <snapshotRepository> <id>artifact-registry</id> <url>https://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY</url> </snapshotRepository> <repository> <id>artifact-registry</id> <url>https://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY</url> </repository> </distributionManagement> <repositories> <repository> <id>artifact-registry</id> <url>https://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> </project>
Os elementos
<release>
e<snapshot>
indicam se o repositório armazena pacotes de lançamento, pacotes de instantâneos ou ambos. Estas definições devem corresponder à Política de Versões do repositório.- Adicione as definições de autenticação devolvidas no elemento
<settings>
à secção<servers>
do ficheiro~/.m2/settings.xml
. No exemplo seguinte,KEY
é a chave codificada em base64 do ficheiro de chaves.
Consulte a Referência de definições do Maven para mais informações.
<settings> <servers> <server> <id>artifact-registry</id> <configuration> <httpConfiguration> <get> <usePreemptive>true</usePreemptive> </get> <head> <usePreemptive>true</usePreemptive> </head> <put> <params> <property> <name>http.protocol.expect-continue</name> <value>false</value> </property> </params> </put> </httpConfiguration> </configuration> <username>_json_key_base64</username> <password>KEY</password> </server> </servers> </settings>
Remoto ou virtual
Adicione as definições do repositório às secções adequadas do ficheiro
pom.xml
para o seu projeto Maven. Consulte a referência POM do Maven para ver detalhes sobre a estrutura do ficheiro.<repositories> <repository> <id>central</id> <name>Maven Central remote repository</name> <url>artifactregistry://LOCATION-maven.pkg.dev/PROJECT_ID/REMOTE-REPOSITORY-NAME</url> <layout>default</layout> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories>
A secção
<repositories>
define o repositório do Artifact Registry. Para um repositório remoto, o elemento<id>
tem de estar definido comocentral
. Esta definição substitui o valor predefinido docentral
ID do repositório que é herdado do Super POM.Codifique o ficheiro de chave em Base64 com o seguinte comando. Substitua KEY-FILE pelo nome do ficheiro de chave.
base64 -w 0 KEY-FILE
Adicione definições de autenticação no elemento
<settings>
à secção<servers>
do ficheiro~/.m2/settings.xml
.
Consulte a Referência de definições do Maven para mais informações.
<settings> <servers> <server> <id>artifact-registry</id> <configuration> <httpConfiguration> <get> <usePreemptive>true</usePreemptive> </get> <head> <usePreemptive>true</usePreemptive> </head> <put> <params> <property> <name>http.protocol.expect-continue</name> <value>false</value> </property> </params> </put> </httpConfiguration> </configuration> <username>_json_key_base64</username> <password>KEY</password> </server> </servers> </settings>
- Se estiver a usar pontos finais HTTP e quiser usar a conetividade nativa do Maven para autenticar, pode transmitir um cabeçalho de autenticação através de um cabeçalho HTTP personalizado no
settings.xml
.
Exemplo:
<settings> <servers> <server> <id>artifact-registry</id> <configuration> <httpHeaders> <property> <name>Authorization </name> <value>Bearer ${artifact.registry.token}</value> </property> </httpHeaders> <httpConfiguration> <get> <usePreemptive>true</usePreemptive> </get> <head> <usePreemptive>true</usePreemptive> </head> <put> <params> <property> <name>http.protocol.expect-continue</name> <value>false</value> </property> </params> </put> </httpConfiguration> </configuration> </server> </servers> </settings>
A configuração da autenticação está concluída.
Configure o Gradle
Configure o Gradle para o tipo de repositório que está a usar.
Standard
Execute o seguinte comando para imprimir a configuração do repositório a adicionar ao seu projeto Java.
gcloud artifacts print-settings gradle \ --project=PROJECT \ --repository=REPOSITORY \ --location=LOCATION \ --json-key=KEY-FILE
Onde
- PROJECT é o ID do projeto.
- REPOSITORY é o ID ou o identificador totalmente qualificado do repositório. Se configurou um repositório do Artifact Registry predefinido, este é usado quando esta flag é omitida do comando.
- KEY-FILE é o caminho para o ficheiro de chave JSON da conta de serviço. Se tiver executado o comando para ativar a sua conta de serviço, pode omitir esta flag.
O comando devolve definições a incluir no seu projeto Java, incluindo uma versão codificada em base64 da sua chave privada.
A seguinte linha da configuração devolvida define uma variável denominada
artifactRegistryMavenSecret
para a chave da conta de serviço. Adicione esta linha ao seu ficheiro~/.gradle/gradle.properties
para que a chave não fique visível nas suas compilações nem no repositório de controlo de origem.artifactRegistryMavenSecret = KEY
Nesta linha, KEY é a chave privada no ficheiro de chave da conta de serviço. Para
_json_key_base64
,artifactRegistryMavenSecret
está definido como a chave com codificação base64 como palavra-passe.No
build.gradle
especifique as definições do repositório:plugins { id "maven-publish" } publishing { publications { mavenJava(MavenPublication) { groupId 'maven.example.id' from components.java } } repositories { maven { url "https://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY" credentials { username = "_json_key_base64" password = "$artifactRegistryMavenSecret" } authentication { basic(BasicAuthentication) } } } } repositories { maven { url "https://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY" credentials { username = "_json_key_base64" password = "$artifactRegistryMavenSecret" } authentication { basic(BasicAuthentication) } } }
- A secção
repositories
define o URL e as credenciais do repositório para autenticação. - A secção
publishing
define os ficheiros a carregar e o repositório do Artifact Registry de destino. Pode atualizar a lista de ficheiros na secçãopublications
quando tiver tudo pronto para o carregamento. Para obter informações sobre as definições de publicação, consulte a documentação do plug-in Maven Publish.
- A secção
Remoto ou virtual
Codifique o ficheiro de chave em Base64 com o seguinte comando. Substitua KEY-FILE pelo nome do ficheiro de chave.
base64 -w 0 KEY-FILE
No ficheiro
~/.gradle/gradle.properties
, adicione a seguinte linha para que a sua chave não fique visível nas compilações nem no repositório de controlo de origem.artifactRegistryMavenSecret = KEY
Nesta linha, KEY é o conteúdo do ficheiro de chave codificado em base64.
Adicione as definições do repositório ao ficheiro
build.gradle
.
O exemplo seguinte mostra a configuração de um repositório remoto.
plugins { id 'java' id "maven-publish" id 'maven' } repositories { maven { url "artifactregistry://LOCATION-maven.pkg.dev /PROJECT_ID/REMOTE-REPOSITORY-NAME" credentials { username = "_json_key_base64" password = "$artifactRegistryMavenSecret" } authentication { basic(BasicAuthentication) } dependencies { compile "com.google.guava:guava:31.1-jre" }
A secção
repositories
define o repositório do Artifact Registry.Neste exemplo, a secção
dependencies
define uma dependência na versão31.1-jre
do pacote Guava.
Defina as dependências do seu pacote na secção
dependencies
.
A configuração da autenticação está concluída.