서드 파티 애플리케이션을 사용하여 Artifact Registry 저장소에 연결할 때는 Artifact Registry에 인증해야 합니다. 이 문서에서는 Maven 및 Gradle의 구성을 중점적으로 설명합니다.
Cloud Build 또는 Google Kubernetes Engine 및 Cloud Run과 같은 Google Cloud 런타임 환경에 대한 인증을 구성할 필요는 없지만 필요한 권한이 구성되어 있는지 확인해야 합니다. 자세한 내용은 Cloud Build 및 Google Cloud 런타임 환경에 배포 정보를 참조하세요.
시작하기 전에
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- (선택사항) gcloud 명령어의 기본값을 구성합니다.
표준 저장소로 인증을 구성하는 경우 업로드할 수 있는 Java 패키지 유형에 맞게 Maven 프로젝트를 구성할 수 있도록 버전 정책을 확인합니다.
콘솔
Google Cloud 콘솔에서 저장소 페이지를 엽니다.
인증하려는 저장소를 클릭합니다.
세부정보 섹션에 버전 정책이 표시됩니다. 저장소에 스냅샷 버전 정책이 있는 경우 스냅샷 덮어쓰기 허용 필드는 스냅샷이 저장소에서 일치하는 스냅샷 버전을 덮어쓸 수 있는지를 나타냅니다.
gcloud
다음 명령어를 실행하여 저장소 설명을 확인합니다.
gcloud artifacts repositories describe REPOSITORY \ --project=PROJECT \ --location=LOCATION
위치
- REPOSITORY는 저장소 ID입니다. 기본 Artifact Registry 저장소를 구성한 경우 이 플래그가 명령어에서 생략되었을 때 사용됩니다.
- PROJECT는 프로젝트 ID입니다. 이 플래그를 생략하면 현재 프로젝트 또는 기본 프로젝트가 사용됩니다.
- LOCATION은 저장소의 리전 또는 멀티 리전 위치입니다.
이 명령어의 결과에는
mavenConfig
아래에 버전 정책 정보가 포함됩니다. 이 예시에서는 저장소에 스냅샷 버전 정책이 있고 스냅샷이 저장소의 동일한 버전을 덮어쓸 수 없습니다.Encryption: Google-managed key createTime: '2021-10-04T19:39:10.897404Z' format: MAVEN mavenConfig: allowSnapshotOverwrites: false versionPolicy: SNAPSHOT
저장소에 버전 정책이 없는 경우
mavenConfig
의 값은{}
입니다.
개요
Artifact Registry는 다음과 같은 인증 방법을 지원합니다.
- 인증 도우미 사용
- 이 옵션은 가장 유연성이 뛰어납니다. Maven 또는 Gradle 구성에 도우미를 포함하면 Artifact Registry는 환경에서 서비스 계정 사용자 인증 정보를 검색합니다.
- 사용자 인증 정보로 서비스 계정 키 지정
- 애플리케이션이 기본 애플리케이션 사용자 인증 정보를 지원하지 않지만 사용자 이름과 비밀번호로 인증을 지원하는 경우 이 옵션을 사용합니다.
서비스 계정 키는 장기 사용자 인증 정보입니다. 다음 가이드라인을 사용하여 저장소에 대한 액세스를 제한합니다.
- 저장소와 상호작용할 수 있도록 전용 서비스 계정을 사용하는 것이 좋습니다.
- 서비스 계정에 필요한 최소한의 Artifact Registry 역할을 부여합니다. 예를 들어 아티팩트만 다운로드하는 서비스 계정에 Artifact Registry 리더를 할당합니다.
- 조직의 그룹에 특정 저장소에 대한 여러 액세스 수준이 필요한 경우 프로젝트 수준이 아닌 저장소 수준에서 액세스 권한을 부여합니다.
- 사용자 인증 정보 관리 권장사항을 따릅니다.
사용자 인증 정보 도우미로 인증
Artifact Registry는 Maven wagon 및 Gradle 플러그인을 사용자 인증 정보 도우미로 제공합니다. 사용자 인증 정보 도우미를 사용할 때 사용자 인증 정보는 자바 프로젝트에 저장되지 않습니다. 대신 Artifact Registry가 다음 순서로 사용자 인증 정보를 검색합니다.
애플리케이션 기본 사용자 인증 정보(ADC) - 다음 순서로 사용자 인증 정보를 찾는 전략
GOOGLE_APPLICATION_CREDENTIALS
환경 변수에 정의된 사용자 인증 정보Compute Engine, Google Kubernetes Engine, Cloud Run, App Engine 또는 Cloud Run 함수의 기본 서비스 계정에서 제공하는 사용자 인증 정보
gcloud auth application-default login
명령어의 사용자 인증 정보를 포함한 Google Cloud CLI에서 제공하는 사용자 인증 정보
GOOGLE_APPLICATION_CREDENTIALS
변수를 사용하면 인증용 계정이 명시적으로 표시되어 문제 해결이 간편해집니다. 이 변수를 사용하지 않는 경우 ADC에서 사용할 수 있는 모든 계정에 필요한 권한이 있는지 확인합니다. 예를 들어 Compute Engine VM, Google Kubernetes Engine 노드, Cloud Run 버전의 기본 서비스 계정은 저장소에 대한 읽기 전용 액세스 권한이 있습니다. 기본 서비스 계정을 사용하여 이러한 환경에서 업로드하려면 권한을 수정해야 합니다.
사용자 인증 정보 도우미의 서비스 계정 설정
환경 변수를 사용하여 서비스 계정을 만들고 인증을 설정하려면 다음 안내를 따르세요.
애플리케이션 대신 작동하도록 서비스 계정을 만들거나 자동화에 사용할 기존 서비스 계정을 선택합니다.
Artifact Registry로 인증을 설정하려면 서비스 계정 키 파일의 위치가 필요합니다. 기존 계정의 경우 서비스 계정 페이지에서 키를 보고 새 키를 만들 수 있습니다.
저장소 액세스 권한을 부여하기 위해 서비스 계정에 적절한 Artifact Registry 역할을 부여합니다.
저장소와 연결할 때 Artifact Registry 사용자 인증 정보 도우미가 키를 가져올 수 있도록 서비스 계정 키 파일 위치를 변수
GOOGLE_APPLICATION_CREDENTIALS
에 할당합니다.export GOOGLE_APPLICATION_CREDENTIALS=KEY-FILE
여기서 KEY-FILE은 서비스 계정 키 파일의 경로입니다.
Maven 구성
사용 중인 저장소 유형에 맞게 Maven을 구성합니다.
표준
다음 명령어를 실행하여 자바 프로젝트에 추가할 저장소 구성을 출력합니다.
gcloud artifacts print-settings mvn \ --project=PROJECT \ --repository=REPOSITORY \ --location=LOCATION
위치
Maven 프로젝트의
pom.xml
파일에서 적합한 섹션에 반환된 설정을 추가합니다. 파일 구조에 대한 자세한 내용은 Maven POM 참조를 확인하세요.다음 예시에서는 스냅샷과 출시 버전을 모두 저장하는 저장소의 설정을 보여줍니다.
<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.1</version> </extension> </extensions> </build>
<release>
및<snapshot>
요소는 저장소에서 출시 패키지, 스냅샷 패키지 또는 둘 다를 저장하는지 여부를 나타냅니다. 이러한 설정은 저장소 버전 정책과 일치해야 합니다.<build>
요소는 Artifact Registry wagon을 확장 프로그램으로 정의합니다. wagon에 대한 자세한 내용은 Artifact Registry Maven 도구 문서를 참조하세요.
원격 또는 가상
프로젝트에서
pom.xml
파일을 수정합니다. 파일 구조에 대한 자세한 내용은 Maven POM 참조를 확인하세요.다음 예시에서는 스냅샷과 출시 버전을 모두 저장하는 원격 저장소의 설정을 보여줍니다. 이 예시의 프로젝트에는 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.1</version> </extension> </extensions> </build> </project>
<repositories>
섹션에서 Artifact Registry 저장소를 정의합니다. 원격 저장소의 경우<id>
요소를central
로 설정해야 합니다. 이 설정은 최고 POM에서 상속된central
저장소 ID의 기본값을 재정의합니다.<build>
섹션은 Artifact Registry wagon을 확장 프로그램으로 설정합니다. wagon에 대한 자세한 내용은 Artifact Registry Maven 도구 문서를 참조하세요.이 예시에서
<dependencies>
섹션은 Guava 패키지 버전28.0-jre
에 대한 종속 항목을 설정합니다.
Maven은
pom.xml
에 정의된 wagon을 적용하기 전에 다음을 포함한 일부 종속 항목을 확인합니다.<parent>
요소를 사용한 상위 프로젝트에 대한 하위 Maven 프로젝트의 참조- Artifact Registry에 저장된 플러그인 종속 항목
프로젝트에서 이러한 종속 항목을 확인해야 하는 경우 Maven이 상위 POM 파일 및 플러그인을 찾을 수 있도록 핵심 확장 프로그램 메커니즘을 사용해야 합니다.
프로젝트에서 다음 콘텐츠를 사용하여
${maven.projectBasedir}/.mvn/extensions.xml
파일을 만듭니다.<extension>
요소는 wagon을 정의합니다.<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.1</version> </extension> </extensions>
이제 Maven이 Artifact Registry에서 상위 또는 플러그인 종속 항목을 확인할 수 있습니다.
인증 구성이 완료되었습니다.
Gradle 구성
사용 중인 저장소 유형에 맞게 Gradle을 구성합니다.
표준
다음 명령어를 실행하여 자바 프로젝트에 추가할 저장소 구성을 출력합니다.
gcloud artifacts print-settings gradle \ --project=PROJECT \ --repository=REPOSITORY \ --location=LOCATION
위치
build.gradle
파일에 저장소 설정을 추가합니다. 다음 예시에서는 출력된 섹션의 상대 위치를 보여줍니다.plugins { id "maven-publish" id "com.google.cloud.artifactregistry.gradle-plugin" version "2.2.1" } 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" } }
plugins
섹션은 Artifact Registry 플러그인을 선언합니다. 플러그인에 대한 자세한 내용은 Artifact Registry Maven 도구 문서를 참조하세요.publishing
섹션은 업로드할 파일 및 대상 Artifact Registry 저장소를 정의합니다. 업로드 준비가 되면publications
섹션에서 파일 목록을 업데이트할 수 있습니다. 게시 설정에 대한 자세한 내용은 Maven 게시 플러그인 문서를 참조하세요.
원격 또는 가상
build.gradle
파일에 저장소 설정을 추가합니다.다음 예시에서는 원격 저장소의 설정을 보여줍니다. 이 예시의 프로젝트에는 Guava 패키지 버전에 대한 종속 항목이 있습니다.
plugins { id 'java' id "maven-publish" id "com.google.cloud.artifactregistry.gradle-plugin" version "2.2.1" id 'maven' } repositories { maven { url "artifactregistry://LOCATION-maven.pkg.dev /PROJECT_ID/REMOTE-REPOSITORY-NAME" } } dependencies { compile "com.google.guava:guava:31.1-jre" }
plugins
섹션은 Artifact Registry 플러그인을 선언합니다. 플러그인에 대한 자세한 내용은 Artifact Registry Maven 도구 문서를 참조하세요.repositories
섹션에서 Artifact Registry 저장소를 정의합니다.이 예시에서
dependencies
섹션은 Guava 패키지 버전31.1-jre
에 대한 종속 항목을 설정합니다.
dependencies
섹션에서 패키지의 종속 항목을 정의합니다.init.gradle
또는settings.gradle
파일에 저장소를 사용해야 하는 경우 이러한 파일에 플러그인 구성을 추가할 수 있습니다.init.gradle
의 경우 다음 구성을 추가합니다.initscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "gradle.plugin.com.google.cloud.artifactregistry:artifactregistry-gradle-plugin:2.2.1" } } apply plugin: com.google.cloud.artifactregistry.gradle.plugin.ArtifactRegistryGradlePlugin
settings.gradle에 다음 구성을 추가합니다.
buildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "gradle.plugin.com.google.cloud.artifactregistry:artifactregistry-gradle-plugin:2.2.1" } } apply plugin: "com.google.cloud.artifactregistry.gradle-plugin"
인증 구성이 완료되었습니다.
비밀번호 인증 구성
자바 애플리케이션에서 지정된 사용자 이름과 비밀번호로 인증을 요구할 때 이 방법을 사용합니다.
비밀번호 인증을 위한 서비스 계정 설정
서비스 계정을 만들려면 다음 안내를 따르세요.
애플리케이션 대신 작동하도록 서비스 계정을 만들거나 자동화에 사용할 기존 서비스 계정을 선택합니다.
Artifact Registry로 인증을 설정하려면 서비스 계정 키 파일의 위치가 필요합니다. 기존 계정의 경우 서비스 계정 페이지에서 키를 보고 새 키를 만들 수 있습니다.
현재 gcloud CLI 세션에서 서비스 계정을 활성화하려면 다음 명령어를 실행합니다.
gcloud auth activate-service-account ACCOUNT --key-file=KEY-FILE
위치
- ACCOUNT는 사용자 또는 서비스 계정입니다.
- KEY-FILE은 서비스 계정 JSON 키 파일의 경로입니다.
Maven 구성
사용 중인 저장소 유형에 맞게 Maven을 구성합니다.
표준
다음 명령어를 실행하여 자바 프로젝트에 추가할 저장소 구성을 출력합니다.
gcloud artifacts print-settings mvn \ --project=PROJECT \ --repository=REPOSITORY \ --location=LOCATION \ --json-key=KEY-FILE
위치
명령어가 비공개 키의 base64로 인코딩된 버전을 포함하여 자바 프로젝트에 포함할 설정을 반환합니다.
<project>
요소에서 반환된 저장소 설정을 Maven 프로젝트에 대한pom.xml
파일의 적합한 섹션에 추가합니다. 파일 구조에 대한 자세한 내용은 Maven POM 참조를 확인하세요.
<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>
<release>
및<snapshot>
요소는 저장소에서 출시 패키지, 스냅샷 패키지 또는 둘 다를 저장하는지 여부를 나타냅니다. 이러한 설정은 저장소 버전 정책과 일치해야 합니다.<settings>
요소에서 반환된 인증 설정을~/.m2/settings.xml
파일의<servers>
섹션에 추가합니다. 다음 예시에서KEY
는 키 파일에서 base64로 인코딩된 키입니다.
자세한 내용은 Maven 설정 참조를 확인하세요.
<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>
원격 또는 가상
저장소 설정을 Maven 프로젝트에 대한
pom.xml
파일의 적합한 섹션에 추가합니다. 파일 구조에 대한 자세한 내용은 Maven POM 참조를 확인하세요.<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>
<repositories>
섹션에서 Artifact Registry 저장소를 정의합니다. 원격 저장소의 경우<id>
요소를central
로 설정해야 합니다. 이 설정은 최고 POM에서 상속된central
저장소 ID의 기본값을 재정의합니다.다음 명령어를 사용하여 키 파일을 Base64로 인코딩합니다. KEY-FILE을 키 파일 이름으로 바꿉니다.
base64 -w 0 KEY-FILE
<settings>
요소의 인증 설정을~/.m2/settings.xml
파일의<servers>
섹션에 추가합니다.
자세한 내용은 Maven 설정 참조를 확인하세요.
<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>
인증 구성이 완료되었습니다.
Gradle 구성
사용 중인 저장소 유형에 맞게 Gradle을 구성합니다.
표준
다음 명령어를 실행하여 자바 프로젝트에 추가할 저장소 구성을 출력합니다.
gcloud artifacts print-settings gradle \ --project=PROJECT \ --repository=REPOSITORY \ --location=LOCATION \ --json-key=KEY-FILE
위치
- PROJECT는 프로젝트 ID입니다.
- REPOSITORY는 저장소의 ID 또는 정규화된 식별자입니다. 기본 Artifact Registry 저장소를 구성한 경우 이 플래그가 명령어에서 생략되었을 때 사용됩니다.
- KEY-FILE은 서비스 계정 JSON 키 파일의 경로입니다. 명령어를 실행하여 서비스 계정을 자동화한 경우 이 플래그를 생략할 수 있습니다.
명령어가 비공개 키의 base64로 인코딩된 버전을 포함하여 자바 프로젝트에 포함할 설정을 반환합니다.
반환된 구성의 다음 줄은 서비스 계정 키에 대해
artifactRegistryMavenSecret
라는 변수를 정의합니다. 빌드 또는 소스 제어 저장소에 키가 표시되지 않도록~/.gradle/gradle.properties
파일에 이 줄을 추가합니다.artifactRegistryMavenSecret = KEY
이 줄에서 KEY는 서비스 계정 키 파일의 비공개 키입니다.
_json_key_base64
의 경우artifactRegistryMavenSecret
가 base64로 인코딩된 키에 비밀번호로 설정됩니다.build.gradle
에서 저장소 설정을 지정합니다.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) } } }
repositories
섹션에서는 인증에 사용되는 저장소 URL 및 사용자 인증 정보를 설정합니다.publishing
섹션은 업로드할 파일 및 대상 Artifact Registry 저장소를 정의합니다. 업로드 준비가 되면publications
섹션에서 파일 목록을 업데이트할 수 있습니다. 게시 설정에 대한 자세한 내용은 Maven 게시 플러그인 문서를 참조하세요.
원격 또는 가상
다음 명령어를 사용하여 키 파일을 Base64로 인코딩합니다. KEY-FILE을 키 파일 이름으로 바꿉니다.
base64 -w 0 KEY-FILE
빌드 또는 소스 제어 저장소에 키가 표시되지 않도록
~/.gradle/gradle.properties
파일에 다음 줄을 추가합니다.artifactRegistryMavenSecret = KEY
이 줄에서 KEY는 base64로 인코딩된 키 파일의 콘텐츠입니다.
build.gradle
파일에 저장소 설정을 추가합니다.
다음 예시에서는 원격 저장소 구성을 보여줍니다.
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" }
repositories
섹션에서 Artifact Registry 저장소를 정의합니다.이 예시에서
dependencies
섹션은 Guava 패키지 버전31.1-jre
에 대한 종속 항목을 설정합니다.
dependencies
섹션에서 패키지의 종속 항목을 정의합니다.
인증 구성이 완료되었습니다.