Java용 오픈 소스 인증 클라이언트 라이브러리입니다.
이 프로젝트는 3개의 아티팩트로 구성됩니다.
목차:
빠른 시작
google-auth-library-oauth2-http
google-auth-library-credentials
google-auth-library-appengine
CI 현황
기여
특허
Maven을 사용하는 google-auth-library-appengine
google-auth-library-oauth2-http
pom.xml 파일에 추가합니다 google-auth-library-credentials
귀하의 응용 프로그램 요구 사항):
< dependency >
< groupId >com.google.auth groupId >
< artifactId >google-auth-library-oauth2-http artifactId >
< version >1.19.0 version >
dependency >
Gradle을 사용하는 경우 이를 종속 항목에 추가하세요.
implementation ' com.google.auth:google-auth-library-oauth2-http:1.19.0 '
SBT를 사용하는 경우 이를 종속 항목에 추가하세요.
libraryDependencies + = " com.google.auth " % " google-auth-library-oauth2-http " % " 1.19.0 "
이 라이브러리는 Java용 애플리케이션 기본 자격 증명의 구현을 제공합니다. 애플리케이션 기본 자격 증명은 Google API 호출에 사용할 인증 자격 증명을 얻는 간단한 방법을 제공합니다.
호출이 사용자와 관계없이 애플리케이션에 대해 동일한 ID 및 인증 수준을 가져야 하는 경우에 가장 적합합니다. 이는 특히 Google Cloud Platform을 사용하는 애플리케이션을 구축할 때 Cloud API 호출을 승인하는 데 권장되는 접근 방식입니다.
애플리케이션 기본 사용자 인증 정보는 Amazon Web Services(AWS), Microsoft Azure 또는 OpenID Connect(OIDC)를 지원하는 모든 ID 공급업체를 비롯한 Google Cloud 이외의 플랫폼에서 Google Cloud 리소스에 액세스할 수 있도록 워크로드 아이덴티티 제휴도 지원합니다. 워크로드 아이덴티티 제휴는 서비스 계정 비공개 키를 로컬에서 다운로드, 관리, 저장할 필요가 없으므로 Google Cloud 이외의 환경에 권장됩니다. 워크로드 아이덴티티 제휴를 참조하세요.
애플리케이션 기본 자격 증명을 얻으려면 GoogleCredentials.getApplicationDefault()
또는 GoogleCredentials.getApplicationDefault(HttpTransportFactory)
사용하세요. 이러한 메소드는 전체 애플리케이션을 식별하고 인증하는 데 사용되는 애플리케이션 기본 자격 증명을 반환합니다. 애플리케이션 기본 자격 증명을 찾기 위해 다음 항목을 순서대로 검색합니다.
GOOGLE_APPLICATION_CREDENTIALS
환경 변수가 가리키는 자격 증명 파일gcloud auth application-default login
명령어에서 제공하는 사용자 인증 정보NO_GCE_CHECK=true
설정하여 이 검사를 건너뜁니다.GCE_METADATA_HOST=
설정하여 GCE 메타데이터 서버 주소를 맞춤설정하세요. 서비스 계정 JSON 키에서 자격 증명을 얻으려면 GoogleCredentials.fromStream(InputStream)
또는 GoogleCredentials.fromStream(InputStream, HttpTransportFactory)
사용하세요. 액세스 토큰을 사용하려면 자격 증명을 새로 고쳐야 합니다.
GoogleCredentials credentials = GoogleCredentials . fromStream ( new FileInputStream ( "/path/to/credentials.json" ));
credentials . refreshIfExpired ();
AccessToken token = credentials . getAccessToken ();
// OR
AccessToken token = credentials . refreshAccessToken ();
사용자 또는 서비스 계정에 발급된 자격 증명이 다른 사용자 또는 서비스 계정을 가장할 수 있도록 허용합니다. ImpersonatedCredentials를 사용하는 소스 프로젝트는 "IAMCredentials" API를 활성화해야 합니다. 또한 대상 서비스 계정은 시작 주 구성원에게 '서비스 계정 토큰 생성자' IAM 역할을 부여해야 합니다.
String credPath = "/path/to/svc_account.json" ;
ServiceAccountCredentials sourceCredentials = ServiceAccountCredentials
. fromStream ( new FileInputStream ( credPath ));
sourceCredentials = ( ServiceAccountCredentials ) sourceCredentials
. createScoped ( Arrays . asList ( "https://www.googleapis.com/auth/iam" ));
ImpersonatedCredentials targetCredentials = ImpersonatedCredentials . create ( sourceCredentials ,
"[email protected]" , null ,
Arrays . asList ( "https://www.googleapis.com/auth/devstorage.read_only" ), 300 );
Storage storage_service = StorageOptions . newBuilder (). setProjectId ( "project-id" )
. setCredentials ( targetCredentials ). build (). getService ();
for ( Bucket b : storage_service . list (). iterateAll ())
System . out . println ( b );
워크로드 아이덴티티 제휴를 사용하면 애플리케이션은 Amazon Web Services(AWS), Microsoft Azure 또는 OpenID Connect(OIDC)를 지원하는 모든 ID 공급업체에서 Google Cloud 리소스에 액세스할 수 있습니다.
일반적으로 Google Cloud 외부에서 실행되는 애플리케이션은 서비스 계정 키를 사용하여 Google Cloud 리소스에 액세스했습니다. ID 페더레이션을 사용하면 워크로드가 서비스 계정을 가장할 수 있습니다. 이를 통해 외부 워크로드가 Google Cloud 리소스에 직접 액세스할 수 있으므로 서비스 계정 키와 관련된 유지관리 및 보안 부담이 사라집니다.
Amazon Web Services(AWS)에서 Google Cloud 리소스에 액세스하려면 다음 요구사항이 필요합니다.
AWS에서 워크로드 아이덴티티 연동을 구성하는 방법에 대한 자세한 지침을 따르세요.
서비스 계정을 가장하도록 AWS 공급자를 구성한 후 자격 증명 구성 파일을 생성해야 합니다. 서비스 계정 사용자 인증 정보 파일과 달리 생성된 사용자 인증 정보 구성 파일에는 외부 주체 토큰을 검색하고 이를 서비스 계정 액세스 토큰으로 교환하는 방법을 라이브러리에 지시하는 중요하지 않은 메타데이터가 포함되어 있습니다. gcloud CLI를 사용하여 구성 파일을 생성할 수 있습니다.
AWS 워크로드 아이덴티티 구성을 생성하려면 다음 명령을 실행합니다.
# Generate an AWS configuration file.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $AWS_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--aws
--output-file /path/to/generated/config.json
다음 변수를 대체해야 하는 경우:
$PROJECT_NUMBER
: Google Cloud 프로젝트 번호입니다.$POOL_ID
: 워크로드 아이덴티티 풀 ID입니다.$AWS_PROVIDER_ID
: AWS 공급자 ID입니다.$SERVICE_ACCOUNT_EMAIL
: 가장할 서비스 계정의 이메일입니다.그러면 지정된 출력 파일에 구성 파일이 생성됩니다.
AWS IMDSv2를 사용하는 경우 --enable-imdsv2
플래그를 gcloud iam workload-identity-pools create-cred-config
명령에 추가해야 합니다.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $AWS_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--aws
--output-file /path/to/generated/config.json
--enable-imdsv2
이제 인증 라이브러리를 사용하여 AWS에서 Google Cloud 리소스를 호출할 수 있습니다.
Microsoft Azure에서 Google Cloud 리소스에 액세스하려면 다음 요구사항이 필요합니다.
Microsoft Azure에서 워크로드 아이덴티티 페더레이션을 구성하는 방법에 대한 자세한 지침을 따르세요.
서비스 계정을 가장하도록 Azure 공급자를 구성한 후 자격 증명 구성 파일을 생성해야 합니다. 서비스 계정 사용자 인증 정보 파일과 달리 생성된 사용자 인증 정보 구성 파일에는 외부 주체 토큰을 검색하고 이를 서비스 계정 액세스 토큰으로 교환하는 방법을 라이브러리에 지시하는 중요하지 않은 메타데이터가 포함되어 있습니다. gcloud CLI를 사용하여 구성 파일을 생성할 수 있습니다.
Azure 워크로드 아이덴티티 구성을 생성하려면 다음 명령을 실행합니다.
# Generate an Azure configuration file.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $AZURE_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--azure
--output-file /path/to/generated/config.json
다음 변수를 대체해야 하는 경우:
$PROJECT_NUMBER
: Google Cloud 프로젝트 번호입니다.$POOL_ID
: 워크로드 아이덴티티 풀 ID입니다.$AZURE_PROVIDER_ID
: Azure 공급자 ID입니다.$SERVICE_ACCOUNT_EMAIL
: 가장할 서비스 계정의 이메일입니다.그러면 지정된 출력 파일에 구성 파일이 생성됩니다.
이제 인증 라이브러리를 사용하여 Azure에서 Google Cloud 리소스를 호출할 수 있습니다.
OpenID Connect(OIDC)를 지원하는 ID 공급업체에서 Google Cloud 리소스에 액세스하려면 다음 요구사항이 필요합니다.
OIDC ID 공급업체에서 워크로드 아이덴티티 연동을 구성하는 방법에 대한 자세한 지침을 따르세요.
서비스 계정을 가장하도록 OIDC 공급자를 구성한 후 자격 증명 구성 파일을 생성해야 합니다. 서비스 계정 사용자 인증 정보 파일과 달리 생성된 사용자 인증 정보 구성 파일에는 외부 주체 토큰을 검색하고 이를 서비스 계정 액세스 토큰으로 교환하는 방법을 라이브러리에 지시하는 중요하지 않은 메타데이터가 포함되어 있습니다. gcloud CLI를 사용하여 구성 파일을 생성할 수 있습니다.
OIDC 공급자의 경우 인증 라이브러리는 로컬 파일 위치(파일 소스 자격 증명) 또는 로컬 서버(URL 소스 자격 증명)에서 OIDC 토큰을 검색할 수 있습니다.
파일 소스 자격 증명 파일 소스 자격 증명의 경우 백그라운드 프로세스는 만료되기 전에 새 OIDC 토큰을 사용하여 파일 위치를 지속적으로 새로 고쳐야 합니다. 수명이 1시간인 토큰의 경우 매시간 파일에서 토큰을 업데이트해야 합니다. 토큰은 일반 텍스트 또는 JSON 형식으로 직접 저장할 수 있습니다.
파일 소스 OIDC 구성을 생성하려면 다음 명령어를 실행하세요.
# Generate an OIDC configuration file for file-sourced credentials.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $OIDC_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--credential-source-file $PATH_TO_OIDC_ID_TOKEN
# Optional arguments for file types. Default is "text":
# --credential-source-type "json"
# Optional argument for the field that contains the OIDC credential.
# This is required for json.
# --credential-source-field-name "id_token"
--output-file /path/to/generated/config.json
다음 변수를 대체해야 하는 경우:
$PROJECT_NUMBER
: Google Cloud 프로젝트 번호입니다.$POOL_ID
: 워크로드 아이덴티티 풀 ID입니다.$OIDC_PROVIDER_ID
: OIDC 제공업체 ID입니다.$SERVICE_ACCOUNT_EMAIL
: 가장할 서비스 계정의 이메일입니다.$PATH_TO_OIDC_ID_TOKEN
: OIDC 토큰을 검색하는 데 사용되는 파일 경로입니다.그러면 지정된 출력 파일에 구성 파일이 생성됩니다.
URL 소스 자격 증명 URL 소스 자격 증명의 경우 로컬 서버는 OIDC 토큰을 반환하기 위해 GET 엔드포인트를 호스팅해야 합니다. 응답은 일반 텍스트 또는 JSON일 수 있습니다. 추가 필수 요청 헤더를 지정할 수도 있습니다.
URL 소스 OIDC 워크로드 아이덴티티 구성을 생성하려면 다음 명령어를 실행하세요.
# Generate an OIDC configuration file for URL-sourced credentials.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $OIDC_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--credential-source-url $URL_TO_GET_OIDC_TOKEN
--credential-source-headers $HEADER_KEY = $HEADER_VALUE
# Optional arguments for file types. Default is "text":
# --credential-source-type "json"
# Optional argument for the field that contains the OIDC credential.
# This is required for json.
# --credential-source-field-name "id_token"
--output-file /path/to/generated/config.json
다음 변수를 대체해야 하는 경우:
$PROJECT_NUMBER
: Google Cloud 프로젝트 번호입니다.$POOL_ID
: 워크로드 아이덴티티 풀 ID입니다.$OIDC_PROVIDER_ID
: OIDC 제공업체 ID입니다.$SERVICE_ACCOUNT_EMAIL
: 가장할 서비스 계정의 이메일입니다.$URL_TO_GET_OIDC_TOKEN
: OIDC 토큰을 검색하기 위해 호출할 로컬 서버 엔드포인트의 URL입니다.$HEADER_KEY
및 $HEADER_VALUE
: GET 요청을 $URL_TO_GET_OIDC_TOKEN
에 전달하기 위한 추가 헤더 키/값 쌍입니다(예: Metadata-Flavor=Google
.이제 인증 라이브러리를 사용하여 OIDC 제공업체에서 Google Cloud 리소스를 호출할 수 있습니다.
실행 가능 소스 자격 증명 실행 가능 소스 자격 증명의 경우 로컬 실행 파일을 사용하여 타사 토큰을 검색합니다. 실행 파일은 만료되지 않은 유효한 OIDC ID 토큰 또는 JSON 형식의 SAML 어설션을 stdout에 제공하는 작업을 처리해야 합니다.
실행 가능한 소스 자격 증명을 사용하려면 GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES
환경 변수를 1
로 설정해야 합니다.
실행 가능한 소스 워크로드 아이덴티티 구성을 생성하려면 다음 명령어를 실행하세요.
# Generate a configuration file for executable-sourced credentials.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $PROVIDER_ID
--service-account= $SERVICE_ACCOUNT_EMAIL
--subject-token-type= $SUBJECT_TOKEN_TYPE
# The absolute path for the program, including arguments.
# e.g. --executable-command="/path/to/command --foo=bar"
--executable-command= $EXECUTABLE_COMMAND
# Optional argument for the executable timeout. Defaults to 30s.
# --executable-timeout-millis=$EXECUTABLE_TIMEOUT
# Optional argument for the absolute path to the executable output file.
# See below on how this argument impacts the library behaviour.
# --executable-output-file=$EXECUTABLE_OUTPUT_FILE
--output-file /path/to/generated/config.json
다음 변수를 대체해야 하는 경우:
$PROJECT_NUMBER
: Google Cloud 프로젝트 번호입니다.$POOL_ID
: 워크로드 아이덴티티 풀 ID입니다.$PROVIDER_ID
: OIDC 또는 SAML 제공업체 ID입니다.$SERVICE_ACCOUNT_EMAIL
: 가장할 서비스 계정의 이메일입니다.$SUBJECT_TOKEN_TYPE
: 제목 토큰 유형입니다.$EXECUTABLE_COMMAND
: 인수를 포함하여 실행할 전체 명령입니다. 프로그램의 절대 경로여야 합니다. --executable-timeout-millis
플래그는 선택 사항입니다. 인증 라이브러리가 실행 파일이 완료될 때까지 기다리는 기간(밀리초)입니다. 제공되지 않은 경우 기본값은 30초입니다. 허용되는 최대 값은 2분입니다. 최소값은 5초입니다.
--executable-output-file
플래그는 선택 사항입니다. 제공된 경우 파일 경로는 실행 파일에서 생성된 3PI 자격 증명 응답을 가리켜야 합니다. 이는 자격 증명을 캐싱하는 데 유용합니다. 이 경로를 지정하면 인증 라이브러리는 실행 파일을 실행하기 전에 먼저 해당 경로가 있는지 확인합니다. 실행 가능한 JSON 응답을 이 파일에 캐시하면 출력 파일에 캐시된 자격 증명이 만료될 때까지 실행 파일을 실행할 필요가 없으므로 성능이 향상됩니다. 실행 파일은 이 파일에 대한 쓰기를 처리해야 합니다. 인증 라이브러리는 이 위치에서만 읽기를 시도합니다. 파일의 콘텐츠 형식은 아래 표시된 실행 파일에서 예상되는 JSON 형식과 일치해야 합니다.
타사 토큰을 검색하기 위해 라이브러리는 지정된 명령을 사용하여 실행 파일을 호출합니다. 실행 파일의 출력은 아래 지정된 응답 형식을 준수해야 합니다. 응답을 stdout으로 출력해야 합니다.
성공적인 실행 가능 OIDC 응답 샘플:
{
"version" : 1 ,
"success" : true ,
"token_type" : " urn:ietf:params:oauth:token-type:id_token " ,
"id_token" : " HEADER.PAYLOAD.SIGNATURE " ,
"expiration_time" : 1620499962
}
성공적인 실행 가능 SAML 응답 샘플:
{
"version" : 1 ,
"success" : true ,
"token_type" : " urn:ietf:params:oauth:token-type:saml2 " ,
"saml_response" : " ... " ,
"expiration_time" : 1620499962
}
샘플 실행 오류 응답:
{
"version" : 1 ,
"success" : false ,
"code" : " 401 " ,
"message" : " Caller not authorized. "
}
이는 모두 오류 응답을 위한 필수 필드입니다. 코드 및 메시지 필드는 발생한 예외의 일부로 라이브러리에서 사용됩니다.
성공적인 응답의 경우 expiration_time
필드는 자격 증명 구성에 출력 파일이 지정된 경우에만 필요합니다.
응답 형식 필드 요약:
version
: JSON 출력의 버전입니다. 현재는 버전 1만 지원됩니다.success
: true인 경우 응답에는 타사 토큰과 토큰 유형이 포함되어야 합니다. 자격 증명 구성에 출력 파일이 지정된 경우 응답에는expiration_time 필드도 포함되어야 합니다. 실행 파일은 종료 코드 0으로 종료되어야 합니다. false인 경우 응답은 오류 코드와 메시지 필드를 포함하고 0이 아닌 값으로 종료되어야 합니다.token_type
: 제3자 제목 토큰 유형입니다. urn:ietf:params:oauth:token-type:jwt , urn:ietf:params:oauth:token-type:id_token 또는 urn:ietf:params:oauth:token-type:saml2 여야 합니다.id_token
: 타사 OIDC 토큰입니다.saml_response
: 타사 SAML 응답입니다.expiration_time
: 제3자 주체 토큰 만료 시간(초)입니다(Unix epoch 시간).code
: 오류 코드 문자열입니다.message
: 오류 메시지입니다. 모든 응답 유형에는 version
및 success
필드가 모두 포함되어야 합니다.
token_type
과 id_token
또는 saml_response
중 하나가 포함되어야 합니다. 자격 증명 구성에 출력 파일이 지정된 경우 expiration_time
필드도 있어야 합니다.code
와 message
필드가 모두 포함되어야 합니다.실행 파일이 실행될 때 라이브러리는 다음 환경 변수를 채웁니다.
GOOGLE_EXTERNAL_ACCOUNT_AUDIENCE
: 자격 증명 구성의 대상 필드입니다. 항상 존재합니다.GOOGLE_EXTERNAL_ACCOUNT_TOKEN_TYPE
: 예상되는 제목 토큰 유형입니다. 항상 존재합니다.GOOGLE_EXTERNAL_ACCOUNT_IMPERSONATED_EMAIL
: 서비스 계정 이메일입니다. 서비스 계정 가장이 사용되는 경우에만 존재합니다.GOOGLE_EXTERNAL_ACCOUNT_OUTPUT_FILE
: 자격 증명 구성의 출력 파일 위치입니다. 자격 증명 구성에 지정된 경우에만 존재합니다.이러한 환경 변수는 이러한 값의 하드 코딩을 방지하기 위해 실행 파일에서 사용할 수 있습니다.
다음과 같은 보안 관행을 적극 권장합니다.
실행 가능한 소스 자격 증명 사용의 복잡성을 고려하면 특정 요구 사항을 충족하지 않는 한 제3자 자격 증명을 제공하기 위해 기존 지원 메커니즘(파일 소스/URL 소스)을 사용하는 것이 좋습니다.
이제 인증 라이브러리를 사용하여 OIDC 또는 SAML 제공업체에서 Google Cloud 리소스를 호출할 수 있습니다.
IdentityPoolSubjectTokenSupplier의 맞춤 구현은 GCP 액세스 토큰으로 교환할 수 있는 주체 토큰을 제공하기 위해 IdentityPoolCredentials를 구축하는 동안 사용할 수 있습니다. 공급업체는 GCP 자격 증명에 의해 호출될 때 만료되지 않은 유효한 대상 토큰을 반환해야 합니다.
IdentityPoolCredentials는 반환된 토큰을 캐시하지 않으므로 동일한 주체 토큰에 대한 여러 요청을 방지하려면 토큰 공급자에서 캐싱 논리를 구현해야 합니다.
import java . io . IOException ;
public class CustomTokenSupplier implements IdentityPoolSubjectTokenSupplier {
@ Override
public String getSubjectToken ( ExternalAccountSupplierContext context ) throws IOException {
// Any call to the supplier will pass a context object with the requested
// audience and subject token type.
string audience = context . getAudience ();
string tokenType = context . getSubjectTokenType ();
try {
// Return a valid, unexpired token for the requested audience and token type.
// Note that IdentityPoolCredentials do not cache the subject token so
// any caching logic needs to be implemented in the token supplier.
return retrieveToken ( audience , tokenType );
} catch ( Exception e ) {
// If token is unavailable, throw IOException.
throw new IOException ( e );
}
}
private String retrieveToken ( string tokenType , string audience ) {
// Retrieve a subject token of the requested type for the requested audience.
}
}
CustomTokenSupplier tokenSupplier = new CustomTokenSupplier ();
IdentityPoolCredentials identityPoolCredentials =
IdentityPoolCredentials . newBuilder ()
. setSubjectTokenSupplier ( tokenSupplier ) // Sets the token supplier.
. setAudience (...) // Sets the GCP audience.
. setSubjectTokenType ( SubjectTokenTypes . JWT ) // Sets the subject token type.
. build ();
대상 위치: //iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$WORKLOAD_POOL_ID/providers/$PROVIDER_ID
다음 변수를 대체해야 하는 경우:
$PROJECT_NUMBER
: Google Cloud 프로젝트 번호입니다.$WORKLOAD_POOL_ID
: 워크로드 아이덴티티 풀 ID입니다.$PROVIDER_ID
: 공급자 ID입니다.대상, 서비스 계정 가장 URL, 기타 빌더 필드 값은 gcloud CLI로 사용자 인증 정보 구성 파일을 생성하여 찾을 수도 있습니다.
AwsCredentials를 초기화할 때 AwsSecurityCredentialsSupplier의 사용자 지정 구현을 제공할 수 있습니다. 제공된 경우 AwsCredentials 인스턴스는 공급자에게 AWS 보안 자격 증명을 검색하여 GCP 액세스 토큰으로 교환하도록 맡깁니다. 공급업체는 GCP 자격 증명에 의해 호출될 때 유효하고 만료되지 않은 AWS 보안 자격 증명을 반환해야 합니다.
AwsCredentials는 반환된 AWS 보안 자격 증명이나 지역을 캐시하지 않으므로 동일한 리소스에 대한 여러 요청을 방지하려면 공급업체에서 캐싱 논리를 구현해야 합니다.
class CustomAwsSupplier implements AwsSecurityCredentialsSupplier {
@ Override
AwsSecurityCredentials getAwsSecurityCredentials ( ExternalAccountSupplierContext context ) throws IOException {
// Any call to the supplier will pass a context object with the requested
// audience.
string audience = context . getAudience ();
try {
// Return valid, unexpired AWS security credentials for the requested audience.
// Note that AwsCredentials do not cache the AWS security credentials so
// any caching logic needs to be implemented in the credentials' supplier.
return retrieveAwsSecurityCredentials ( audience );
} catch ( Exception e ) {
// If credentials are unavailable, throw IOException.
throw new IOException ( e );
}
}
@ Override
String getRegion ( ExternalAccountSupplierContext context ) throws IOException {
try {
// Return a valid AWS region. i.e. "us-east-2".
// Note that AwsCredentials do not cache the region so
// any caching logic needs to be implemented in the credentials' supplier.
return retrieveAwsRegion ();
} catch ( Exception e ) {
// If region is unavailable, throw IOException.
throw new IOException ( e );
}
}
private AwsSecurityCredentials retrieveAwsSecurityCredentials ( string audience ) {
// Retrieve Aws security credentials for the requested audience.
}
private String retrieveAwsRegion () {
// Retrieve current AWS region.
}
}
CustomAwsSupplier awsSupplier = new CustomAwsSupplier ();
AwsCredentials credentials = AwsCredentials . newBuilder ()
. setSubjectTokenType ( SubjectTokenTypes . AWS4 ) // Sets the subject token type.
. setAudience (...) // Sets the GCP audience.
. setAwsSecurityCredentialsSupplier ( supplier ) // Sets the supplier.
. build ();
대상 위치: //iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$WORKLOAD_POOL_ID/providers/$PROVIDER_ID
다음 변수를 대체해야 하는 경우:
$PROJECT_NUMBER
: Google Cloud 프로젝트 번호입니다.$WORKLOAD_POOL_ID
: 워크로드 아이덴티티 풀 ID입니다.$PROVIDER_ID
: 공급자 ID입니다.대상, 서비스 계정 가장 URL, 기타 빌더 필드 값은 gcloud CLI로 사용자 인증 정보 구성 파일을 생성하여 찾을 수도 있습니다.
서비스 계정 가장을 사용하여 워크로드 아이덴티티 제휴로 사용자 인증 정보 구성을 생성할 때 선택적 인수를 제공하여 서비스 계정 액세스 토큰 수명을 구성할 수 있습니다.
구성 가능한 토큰 수명으로 구성을 생성하려면 다음 명령을 실행합니다(이 예에서는 AWS 구성을 사용하지만 모든 워크로드 아이덴티티 연동 공급자에 대해 토큰 수명을 구성할 수 있음).
# Generate an AWS configuration file with configurable token lifetime.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $AWS_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--aws
--output-file /path/to/generated/config.json
--service-account-token-lifetime-seconds $TOKEN_LIFETIME
다음 변수를 대체해야 하는 경우:
$PROJECT_NUMBER
: Google Cloud 프로젝트 번호입니다.$POOL_ID
: 워크로드 아이덴티티 풀 ID입니다.$AWS_PROVIDER_ID
: AWS 공급자 ID입니다.$SERVICE_ACCOUNT_EMAIL
: 가장할 서비스 계정의 이메일입니다.$TOKEN_LIFETIME
: 서비스 계정 액세스 토큰의 원하는 수명 기간(초)입니다. service-account-token-lifetime-seconds
플래그는 선택 사항입니다. 제공되지 않은 경우 기본값은 1시간입니다. 허용되는 최소 값은 600(10분)이고 최대 허용 값은 43200(12시간)입니다. 1시간보다 긴 수명이 필요한 경우 서비스 계정은 constraints/iam.allowServiceAccountCredentialLifetimeExtension
제약 조건을 적용하는 조직 정책에 허용되는 값으로 추가되어야 합니다.
짧은 수명(예: 10분)을 구성하면 라이브러리가 10분마다 전체 토큰 교환 흐름을 시작하게 되어 제3자 토큰이 만료되지 않은 경우에도 제3자 토큰 공급자를 호출하게 됩니다.
직원 ID 제휴를 사용하면 외부 ID 공급업체(IdP)를 통해 IAM을 통해 직원(직원, 파트너, 계약자와 같은 사용자 그룹)을 인증하고 승인할 수 있으므로 사용자가 Google Cloud 서비스에 액세스할 수 있습니다. 직원 ID 제휴는 Google Cloud의 ID 기능을 확장하여 동기화되지 않은 속성 기반 싱글 사인온(SSO)을 지원합니다.
직원 ID 제휴를 사용하면 직원은 Azure Active Directory(Azure AD), Active Directory Federation Services(AD FS), Okta와 같은 OpenID Connect(OIDC) 또는 SAML 2.0을 지원하는 외부 ID 공급업체(IdP)를 사용하여 Google Cloud 리소스에 액세스할 수 있습니다. 및 기타.
OpenID Connect(OIDC)를 지원하는 ID 공급업체에서 Google Cloud 리소스에 액세스하려면 다음 요구사항이 필요합니다.
직원 ID 제휴를 구성하는 방법에 대한 자세한 지침을 따르세요.
OIDC 또는 SAML 2.0 공급자를 구성한 후 자격 증명 구성 파일을 생성해야 합니다. 생성된 사용자 인증 정보 구성 파일에는 외부 주체 토큰을 검색하고 이를 GCP 액세스 토큰으로 교환하는 방법을 라이브러리에 지시하는 중요하지 않은 메타데이터가 포함되어 있습니다. gcloud CLI를 사용하여 구성 파일을 생성할 수 있습니다.
인증 라이브러리는 로컬 파일 위치(파일 소스 자격 증명), 로컬 서버(URL 소스 자격 증명) 또는 실행 파일(실행 가능 소스 자격 증명)을 호출하여 외부 주체 토큰을 검색할 수 있습니다.
파일 소스 자격 증명 파일 소스 자격 증명의 경우 백그라운드 프로세스는 만료되기 전에 새 주체 토큰으로 파일 위치를 지속적으로 새로 고쳐야 합니다. 수명이 1시간인 토큰의 경우 매시간 파일에서 토큰을 업데이트해야 합니다. 토큰은 일반 텍스트 또는 JSON 형식으로 직접 저장할 수 있습니다.
파일 소스 OIDC 구성을 생성하려면 다음 명령어를 실행하세요.
# Generate an OIDC configuration file for file-sourced credentials.
gcloud iam workforce-pools create-cred-config
locations/global/workforcePools/ $WORKFORCE_POOL_ID /providers/ $PROVIDER_ID
--subject-token-type=urn:ietf:params:oauth:token-type:id_token
--credential-source-file= $PATH_TO_OIDC_ID_TOKEN
--workforce-pool-user-project= $WORKFORCE_POOL_USER_PROJECT
# Optional arguments for file types. Default is "text":
# --credential-source-type "json"
# Optional argument for the field that contains the OIDC credential.
# This is required for json.
# --credential-source-field-name "id_token"
--output-file=/path/to/generated/config.json
다음 변수를 대체해야 하는 경우:
$WORKFORCE_POOL_ID
: 인력 풀 ID입니다.$PROVIDER_ID
: 공급자 ID입니다.$PATH_TO_OIDC_ID_TOKEN
: OIDC 토큰을 검색하는 데 사용되는 파일 경로입니다.$WORKFORCE_POOL_USER_PROJECT
: 인력 풀 사용자 프로젝트와 연결된 프로젝트 번호입니다.파일 소스 SAML 구성을 생성하려면 다음 명령을 실행합니다.
# Generate a SAML configuration file for file-sourced credentials.
gcloud iam workforce-pools create-cred-config
locations/global/workforcePools/ $WORKFORCE_POOL_ID /providers/ $PROVIDER_ID
--credential-source-file= $PATH_TO_SAML_ASSERTION
--subject-token-type=urn:ietf:params:oauth:token-type:saml2
--workforce-pool-user-project= $WORKFORCE_POOL_USER_PROJECT
--output-file=/path/to/generated/config.json
다음 변수를 대체해야 하는 경우:
$WORKFORCE_POOL_ID
: 인력 풀 ID입니다.$PROVIDER_ID
: 공급자 ID입니다.$PATH_TO_SAML_ASSERTION
: base64로 인코딩된 SAML 어설션을 검색하는 데 사용되는 파일 경로입니다.$WORKFORCE_POOL_USER_PROJECT
: 인력 풀 사용자 프로젝트와 연결된 프로젝트 번호입니다.이 명령은 지정된 출력 파일에 구성 파일을 생성합니다.
URL 소스 자격 증명 URL 소스 자격 증명의 경우 로컬 서버는 OIDC 토큰을 반환하기 위해 GET 엔드포인트를 호스팅해야 합니다. 응답은 일반 텍스트 또는 JSON일 수 있습니다. 추가 필수 요청 헤더를 지정할 수도 있습니다.
URL 소스 OIDC 직원 ID 구성을 생성하려면 다음 명령어를 실행하세요.
# Generate an OIDC configuration file for URL-sourced credentials.
gcloud iam workforce-pools create-cred-config
locations/global/workforcePools/ $WORKFORCE_POOL_ID /providers/ $PROVIDER_ID
--subject-token-type=urn:ietf:params:oauth:token-type:id_token
--credential-source-url= $URL_TO_RETURN_OIDC_ID_TOKEN
--credential-source-headers $HEADER_KEY = $HEADER_VALUE
--workforce-pool-user-project= $WORKFORCE_POOL_USER_PROJECT
--output-file=/path/to/generated/config.json
다음 변수를 대체해야 하는 경우:
$WORKFORCE_POOL_ID
: 인력 풀 ID입니다.$PROVIDER_ID
: 공급자 ID입니다.$URL_TO_RETURN_OIDC_ID_TOKEN
: 로컬 서버 엔드포인트의 URL입니다.$HEADER_KEY
및 $HEADER_VALUE
: GET 요청을 $URL_TO_GET_OIDC_TOKEN
에 전달하기 위한 추가 헤더 키/값 쌍입니다(예: Metadata-Flavor=Google
.$WORKFORCE_POOL_USER_PROJECT
: 인력 풀 사용자 프로젝트와 연결된 프로젝트 번호입니다.URL 기반 SAML 구성을 생성하려면 다음 명령을 실행합니다.
# Generate a SAML configuration file for file-sourced credentials.
gcloud iam workforce-pools create-cred-config
locations/global/workforcePools/ $WORKFORCE_POOL_ID /providers/ $PROVIDER_ID
--subject-token-type=urn:ietf:params:oauth:token-type:saml2
--credential-source-url= $URL_TO_GET_SAML_ASSERTION
--credential-source-headers