É necessário se autenticar no Artifact Registry ao usar um aplicativo de terceiros para se conectar a um repositório do Artifact Registry. Isso se concentra na configuração do Maven e do Gradle.
Você não precisa configurar a autenticação para o Cloud Build ou o Google Cloud ambientes de execução, como o Google Kubernetes Engine e o Cloud Run, mas recomendamos Verifique se as permissões necessárias estão configurados. Para saber mais, consulte as informações sobre o Cloud Build e o implantar em ambientes de execução do Google Cloud.
Antes de começar
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- (Opcional) Configure padrões para comandos gcloud.
Se você estiver configurando a autenticação com um repositório padrão, verifique o política de versão para configurar a projeto Maven corretamente para os tipos de pacotes Java que podem ser enviados por upload.
Console
Abra a página Repositórios no console do Google Cloud.
Clique no repositório que você quer autenticar.
A seção Detalhes mostra a política de versão. Se o repositório tiver uma política de versão de snapshot, o campo Permitir substituição de snapshots indica se os snapshots podem substituir versões de snapshot correspondentes no repositório.
gcloud
Execute o comando abaixo para conferir a descrição de um repositório.
gcloud artifacts repositories describe REPOSITORY \ --project=PROJECT \ --location=LOCATION
Onde
- REPOSITORY é o ID do repositório. Se você tiver configurado um repositório do Artifact Registry padrão, ele será usado quando essa sinalização for omitida no comando.
- PROJECT é o ID do projeto. Se essa sinalização for omitida, o projeto padrão ou atual é usado.
- LOCATION é o local regional ou multirregional do repositório.
A saída do comando inclui informações sobre a política de versão abaixo de
mavenConfig
. Neste exemplo, o repositório tem um snapshot os snapshots e a política de versão não podem substituir versões idênticas na repositório de dados.Encryption: Google-managed 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ão, o valor de
mavenConfig
será{}
.
Visão geral
O Artifact Registry é compatível com os seguintes métodos de autenticação.
- Como usar um auxiliar de autenticação
- Essa opção oferece a maior flexibilidade. Quando você inclui o auxiliar na configuração do Maven ou Gradle, o Artifact Registry busca credenciais da conta de serviço no ambiente.
- Como especificar uma chave de conta de serviço como uma credencial
- Use esta opção quando um aplicativo não for compatível com credenciais de aplicativo padrão, mas for compatível com autenticação com nome de usuário e senha.
As chaves da conta 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 o papel mínimo do Artifact Registry exigido pela conta de serviço. Por exemplo, atribua o leitor do Artifact Registry a uma conta de serviço que faz o download apenas de artefatos.
- Se os grupos na sua organização exigirem níveis diferentes de acesso a repositórios específicos, conceda acesso no nível do repositório em vez de no nível do projeto.
- Siga as práticas recomendadas para gerenciar as credenciais.
Como autenticar com um auxiliar de credenciais
O Artifact Registry oferece um Maven wagon e um plug-in do Gradle como auxiliares de credenciais. Quando usar o auxiliar de credenciais, suas credenciais não serão armazenadas no projeto. Em vez disso, o Artifact Registry procura credenciais seguinte ordem:
Application Default Credentials (ADC), uma estratégia que procura credenciais na seguinte ordem:
Credenciais definidas na variável de ambiente
GOOGLE_APPLICATION_CREDENTIALS
.credenciais que a conta de serviço padrão do Compute Engine Funções do Google Kubernetes Engine, Cloud Run, App Engine ou Cloud Run oferece.
Credenciais fornecidas pela Google Cloud CLI, incluindo credenciais de usuário de o comando
gcloud auth application-default login
.
A variável GOOGLE_APPLICATION_CREDENTIALS
torna a conta para
autenticação explícita, o que facilita a solução de problemas. Se
você não usar a variável, verifique se todas as contas que o ADC pode usar têm
as permissões necessárias. Por exemplo, o
conta de serviço padrão para VMs do Compute Engine, nós do Google Kubernetes Engine
e as revisões do Cloud Run têm acesso somente leitura aos repositórios. Se você
pretendem fazer upload desses ambientes usando a conta de serviço padrão,
é necessário modificar as permissões.
Configurar uma conta de serviço para um assistente de credenciais
Para criar uma conta de serviço e configurar a autenticação usando a variável de ambiente:
Crie uma conta de serviço para agir em nome do seu aplicativo ou escolha uma conta de serviço atual que você usa para automação.
Você precisará do local do arquivo de chave da conta de serviço para configurar a autenticação com o Artifact Registry. Para contas existentes, é possível ver as chaves e criar novas chaves na página "Contas de serviço".
Conceda o papel específico do Artifact Registry à conta de serviço para dar acesso ao repositório.
Atribua o local do arquivo de chave da conta de serviço à variável
GOOGLE_APPLICATION_CREDENTIALS
para que o auxiliar de credenciais do Artifact Registry possa conseguir sua chave ao se conectar com os repositórios.export GOOGLE_APPLICATION_CREDENTIALS=KEY-FILE
Em que KEY-FILE é o caminho para o arquivo de chave da conta de serviço.
Configure o Maven
Configure o Maven para o tipo de repositório que você está usando.
Padrão
Execute o comando a seguir para imprimir a configuração do repositório para adicioná-la ao seu projeto Java.
gcloud artifacts print-settings mvn \ --project=PROJECT \ --repository=REPOSITORY \ --location=LOCATION
Onde
- PROJECT é o ID do projeto. Se essa sinalização for omitida, o projeto padrão ou atual é usado.
- REPOSITORY é o ID do repositório. Se você tiver configurado um repositório do Artifact Registry padrão, ele será usado quando essa flag for omitida do comando.
- LOCATION é o local regional ou multirregional do repositório.
Adicione as configurações retornadas às seções apropriadas no arquivo
pom.xml
do projeto do Maven. Consulte a referência do POM do Maven para conferir detalhes sobre a estrutura do arquivo.O exemplo a seguir mostra as configurações de um repositório que armazena versões de snapshot 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.3</version> </extension> </extensions> </build>
Os elementos
<release>
e<snapshot>
indicam se o o repositório armazena pacotes de lançamento, de snapshots ou ambos. Essas configurações devem corresponder ao repositório política de versão.O elemento
<build>
define o vagão do Artifact Registry como uma extensão. Para mais informações sobre o vagão, consulte a documentação para o Ferramentas Maven do Artifact Registry.
Remoto ou virtual
Edite o arquivo
pom.xml
no seu projeto. Consulte a referência do POM do Maven para conferir detalhes sobre a estrutura do arquivo.O exemplo a seguir mostra as configurações de um repositório remoto que armazena versões de snapshot e de lançamento. Neste exemplo, o projeto tem 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.3</version> </extension> </extensions> </build> </project>
A seção
<repositories>
define o Artifact Registry repositório de dados. Para um repositório remoto, o elemento<id>
precisa ser definido comocentral
. Essa configuração substitui o valor padrão do ID do repositóriocentral
herdado do Super POM.A seção
<build>
define o vagão do Artifact Registry como uma extensão. Para saber mais sobre o compilador, consulte a documentação das ferramentas Maven do Artifact Registry.Neste exemplo, a seção
<dependencies>
define uma dependência na versão28.0-jre
do pacote Guava.
O Maven resolve algumas dependências antes de aplicar um vagão definido em
pom.xml
, incluindo:- Referências a um projeto pai em um projeto Maven filho usando o
<parent>
. - Dependências de plug-ins armazenadas no Artifact Registry.
Se o projeto precisar resolver essas dependências, use o mecanismo de extensões principais para garantir que o Maven possa localizar arquivos POM e plug-ins principais.
No seu projeto, crie o arquivo
${maven.projectBasedir}/.mvn/extensions.xml
com o seguinte conteúdo. O elemento<extension>
define o compilador.<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.3</version> </extension> </extensions>
O Maven agora pode resolver dependências pai ou plug-in de o Artifact Registry.
- Referências a um projeto pai em um projeto Maven filho usando o
A configuração de autenticação foi concluída.
Configurar o Gradle
Configure o Gradle para o tipo de repositório que você está usando.
Padrão
Execute o comando a seguir para imprimir a configuração do repositório para adicioná-la ao seu projeto Java.
gcloud artifacts print-settings gradle \ --project=PROJECT \ --repository=REPOSITORY \ --location=LOCATION
Onde
- PROJECT é o ID do projeto. Se essa sinalização for omitida, o projeto padrão ou atual é usado.
- REPOSITORY é o ID do repositório. Se você configurou um Artifact Registry padrão repositório, ele é usado quando essa flag é omitida do comando.
- LOCATION é o local regional ou multirregional do repositório.
Adicione as configurações do repositório ao arquivo
build.gradle
. Veja a seguir o local relativo das seções impressas.plugins { id "maven-publish" id "com.google.cloud.artifactregistry.gradle-plugin" version "2.2.3" } 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 seção
plugins
declara o plug-in do Artifact Registry. Para saber mais sobre o plug-in, consulte a documentação das ferramentas do Maven do Artifact Registry.A seção
publishing
define os arquivos a serem enviados e o repositório do Artifact Registry de destino. É possível atualizar a lista de arquivos na seçãopublications
quando estiver pronto para fazer upload. Para ver informações sobre configurações de publicação, consulte a documentação do plug-in do Maven Publish.
Remoto ou virtual
Adicione as configurações do repositório ao arquivo
build.gradle
.O exemplo a seguir mostra as configurações de um repositório remoto. Neste exemplo, o projeto tem uma dependência de uma versão do pacote Guava.
plugins { id 'java' id "maven-publish" id "com.google.cloud.artifactregistry.gradle-plugin" version "2.2.3" 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 seção
plugins
declara o plug-in do Artifact Registry. Para saber mais sobre o plug-in, consulte a documentação das ferramentas do Maven do Artifact Registry.A seção
repositories
define o repositório do Artifact Registry.Neste exemplo, a seção
dependencies
define uma dependência no Versão31.1-jre
do pacote Guava.
Defina as dependências do pacote em a seção
dependencies
.Se você precisar usar repositórios no arquivo
init.gradle
ousettings.gradle
, poderá adicionar a configuração do plug-in a esses arquivos.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.3" } } apply plugin: com.google.cloud.artifactregistry.gradle.plugin.ArtifactRegistryGradlePlugin
Para o 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.3" } } apply plugin: "com.google.cloud.artifactregistry.gradle-plugin"
A configuração de autenticação foi concluída.
Como configurar a autenticação por senha
Use essa abordagem quando o aplicativo Java exigir autenticação com um nome de usuário e uma senha especificados.
Configurar uma conta de serviço para autenticação de senha
Para criar uma conta de serviço:
Crie uma conta de serviço para agir em nome do seu aplicativo ou escolha uma conta de serviço atual que você usa para automação.
Você precisará do local do arquivo de chave da conta de serviço para configurar a autenticação com o Artifact Registry. Para contas existentes, é possível ver as chaves e criar novas chaves na página "Contas de serviço".
Se você quiser ativar a conta de serviço na CLI gcloud atual execute o comando:
gcloud auth activate-service-account ACCOUNT --key-file=KEY-FILE
Onde
- ACCOUNT é a conta de usuário ou de serviço.
- KEY-FILE é o caminho para o arquivo de chaves JSON da conta de serviço.
Configure o Maven
Configure o Maven para o tipo de repositório que você está usando.
Padrão
Execute o comando a seguir para imprimir a configuração do repositório para adicioná-la 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 essa sinalização for omitida, o projeto padrão ou atual é usado.
- REPOSITORY é o ID do repositório. Se você tiver configurado um repositório do Artifact Registry padrão, ele será usado quando essa sinalização for omitida no comando.
- LOCATION é o local regional ou multirregional do repositório.
- KEY-FILE é o caminho para o arquivo de chaves JSON da conta de serviço.
O comando retorna as configurações a serem incluídas no projeto Java, incluindo uma versão codificada em base64 da chave privada.
- Adicione as configurações retornadas do repositório no elemento
<project>
às seções apropriadas do arquivopom.xml
para seu projeto do Maven. Consulte o Maven Referência do POM para obter detalhes sobre a estrutura do arquivo.
<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 snapshots ou ambos. Essas configurações precisam corresponder à política de versão do repositório.- Adicione as configurações de autenticação retornadas no elemento
<settings>
à seção<servers>
do arquivo~/.m2/settings.xml
. No exemplo abaixo,KEY
é a chave codificada em base64 do arquivo de chave.
Consulte a documentação do Referência de configurações 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 configurações do repositório às seções apropriadas do arquivo
pom.xml
do projeto do Maven. Consulte a documentação do Referência do POM para obter detalhes sobre a estrutura do arquivo.<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 seção
<repositories>
define o repositório do Artifact Registry. Para um repositório remoto, o elemento<id>
precisa ser definido comocentral
. Essa configuração modifica o valor padrão decentral
ID do repositório que é herdado da Super POM:Codifique seu arquivo de chave em Base64 com o comando a seguir. Substitua KEY-FILE pelo nome do arquivo de chave.
base64 -w 0 KEY-FILE
Adicione configurações de autenticação no elemento
<settings>
para a seção<servers>
do arquivo~/.m2/settings.xml
.
Consulte a documentação do Referência de configurações 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>
A configuração de autenticação foi concluída.
Configurar o Gradle
Configure o Gradle para o tipo de repositório que você está usando.
Padrão
Execute o comando a seguir para imprimir a configuração do repositório para adicioná-la 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 para o repositório. Se você tiver configurado um repositório padrão do Artifact Registry, ele será usado quando essa sinalização for omitida no comando.
- KEY-FILE é o caminho para o arquivo de chaves JSON da conta de serviço. Se você executou o comando para ativar a conta de serviço, omita essa sinalização.
O comando retorna configurações para incluir no projeto Java, incluindo: uma versão codificada em Base64 da chave privada.
A linha a seguir da configuração retornada define uma variável chamada
artifactRegistryMavenSecret
para a chave da conta de serviço. Adicione esta linha ao arquivo~/.gradle/gradle.properties
para que a chave não fique visível nas versões ou no repositório de controle de origem.artifactRegistryMavenSecret = KEY
Nesta linha, KEY é a chave privada em seu serviço do arquivo de chave da conta de serviço. Para
_json_key_base64
,artifactRegistryMavenSecret
é definido como a chave codificada em base64 como sua senha.Em
build.gradle
, especifique as configuraçõ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 seção
repositories
define o URL e as credenciais do repositório para autenticação. - A seção
publishing
define os arquivos para upload e o destino repositório do Artifact Registry. É possível atualizar a lista de arquivos na seçãopublications
quando estiver pronto para fazer upload. Para ver informações sobre configurações de publicação, consulte a documentação do plug-in do Maven Publish.
- A seção
Remoto ou virtual
Codifique seu arquivo de chave em Base64 com o comando a seguir. Substituir KEY-FILE pelo nome do arquivo de chave.
base64 -w 0 KEY-FILE
No arquivo
~/.gradle/gradle.properties
, adicione a linha a seguir para que a chave não fique visível nos builds ou no repositório de controle de origem.artifactRegistryMavenSecret = KEY
Nesta linha, KEY é o conteúdo do arquivo de chave codificado em base64.
Adicione as configurações do repositório ao arquivo
build.gradle
.
O exemplo a seguir 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 seção
repositories
define o Artifact Registry repositório de dados.Neste exemplo, a seção
dependencies
define uma dependência no Versão31.1-jre
do pacote Guava.
Defina as dependências do pacote em a seção
dependencies
.
A configuração de autenticação foi concluída.