Java 用のオープンソース認証クライアント ライブラリ。
このプロジェクトは 3 つの成果物で構成されています。
目次:
クイックスタート
google-auth-library-oauth2-http
google-auth-library-credentials
google-auth-library-appengine
CI ステータス
貢献する
ライセンス
Maven を使用している場合は、これを pom.xml ファイルに追加します (必要に応じて、 google-auth-library-oauth2-http
google-auth-library-credentials
およびgoogle-auth-library-appengine
のいずれかに置き換えることができることに注意してください)アプリケーションが必要とするもの):
< 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 リソースにアクセスするための Workload Identity フェデレーションもサポートしています。 Workload Identity フェデレーションは、サービス アカウントの秘密鍵をローカルにダウンロード、管理、保存する必要がなくなるため、Google Cloud 以外の環境に推奨されます。「Workload Identity Federation」を参照してください。
アプリケーションのデフォルト認証情報を取得するには、 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 );
Workload Identity フェデレーションを使用すると、アプリケーションはアマゾン ウェブ サービス (AWS)、Microsoft Azure、または OpenID Connect (OIDC) をサポートする ID プロバイダーから Google Cloud リソースにアクセスできます。
従来、Google Cloud の外部で実行されるアプリケーションは、サービス アカウント キーを使用して Google Cloud リソースにアクセスしてきました。 ID フェデレーションを使用すると、ワークロードがサービス アカウントになりすますことができます。これにより、外部ワークロードが Google Cloud リソースに直接アクセスできるようになり、サービス アカウント キーに関連するメンテナンスとセキュリティの負担が軽減されます。
アマゾン ウェブ サービス (AWS) から Google Cloud リソースにアクセスするには、次の要件が必要です。
AWS から Workload Identity フェデレーションを構成する方法の詳細な手順に従ってください。
サービス アカウントを偽装するように AWS プロバイダーを構成した後、認証情報構成ファイルを生成する必要があります。サービス アカウント資格情報ファイルとは異なり、生成された資格情報構成ファイルには、外部サブジェクト トークンを取得してサービス アカウント アクセス トークンと交換する方法をライブラリに指示する非機密メタデータが含まれています。構成ファイルは、gcloud CLI を使用して生成できます。
AWS Workload Identity 構成を生成するには、次のコマンドを実行します。
# 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
: Workload Identity プール 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
Auth ライブラリを使用して、AWS から Google Cloud リソースを呼び出すことができるようになりました。
Microsoft Azure から Google Cloud リソースにアクセスするには、次の要件が必要です。
Microsoft Azure から Workload Identity フェデレーションを構成する方法の詳細な手順に従ってください。
サービス アカウントを偽装するように Azure プロバイダーを構成した後、資格情報構成ファイルを生成する必要があります。サービス アカウント資格情報ファイルとは異なり、生成された資格情報構成ファイルには、外部サブジェクト トークンを取得してサービス アカウント アクセス トークンと交換する方法をライブラリに指示する非機密メタデータが含まれています。構成ファイルは、gcloud CLI を使用して生成できます。
Azure Workload Identity 構成を生成するには、次のコマンドを実行します。
# 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
: Workload Identity プール ID。$AZURE_PROVIDER_ID
: Azure プロバイダー ID。$SERVICE_ACCOUNT_EMAIL
: 偽装するサービス アカウントの電子メール。これにより、指定された出力ファイルに構成ファイルが生成されます。
Auth ライブラリを使用して、Azure から Google Cloud リソースを呼び出すことができるようになりました。
OpenID Connect (OIDC) をサポートする ID プロバイダから Google Cloud リソースにアクセスするには、次の要件が必要です。
OIDC ID プロバイダーから Workload Identity フェデレーションを構成する方法の詳細な手順に従ってください。
サービス アカウントを偽装するように OIDC プロバイダーを構成した後、資格情報構成ファイルを生成する必要があります。サービス アカウント資格情報ファイルとは異なり、生成された資格情報構成ファイルには、外部サブジェクト トークンを取得してサービス アカウント アクセス トークンと交換する方法をライブラリに指示する非機密メタデータが含まれています。構成ファイルは、gcloud CLI を使用して生成できます。
OIDC プロバイダーの場合、認証ライブラリは、ローカル ファイルの場所 (ファイル ソースの資格情報) またはローカル サーバー (URL ソースの資格情報) から OIDC トークンを取得できます。
ファイルソースの資格情報ファイルソースの資格情報の場合、有効期限が切れる前に、バックグラウンド プロセスで新しい OIDC トークンを使用してファイルの場所を継続的に更新する必要があります。有効期間が 1 時間のトークンの場合、ファイル内のトークンを 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
: Workload Identity プール ID。$OIDC_PROVIDER_ID
: OIDC プロバイダー ID。$SERVICE_ACCOUNT_EMAIL
: 偽装するサービス アカウントの電子メール。$PATH_TO_OIDC_ID_TOKEN
: OIDC トークンの取得に使用されるファイル パス。これにより、指定された出力ファイルに構成ファイルが生成されます。
URL ソースの資格情報URL ソースの資格情報の場合、ローカル サーバーは、OIDC トークンを返すために GET エンドポイントをホストする必要があります。応答はプレーン テキストまたは JSON で返されます。追加の必須リクエスト ヘッダーも指定できます。
URL ソースの OIDC ワークロード ID 構成を生成するには、次のコマンドを実行します。
# 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
: Workload Identity プール 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
。Auth ライブラリを使用して、OIDC プロバイダから Google Cloud リソースを呼び出すことができるようになりました。
実行可能ファイルをソースとする認証情報 実行可能ファイルをソースとする認証情報の場合、ローカルの実行可能ファイルを使用してサードパーティ トークンを取得します。実行可能ファイルは、有効で期限切れでない OIDC ID トークンまたは SAML アサーションを JSON 形式で stdout に提供する処理を行う必要があります。
実行可能ファイルから取得された認証情報を使用するには、 GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES
環境変数を1
に設定する必要があります。
実行可能ソースの Workload Identity 構成を生成するには、次のコマンドを実行します。
# 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
: Workload Identity プール 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 形式と一致する必要があります。
サードパーティのトークンを取得するために、ライブラリは指定されたコマンドを使用して実行可能ファイルを呼び出します。実行可能ファイルの出力は、以下に指定されている応答形式に準拠している必要があります。応答を標準出力に出力する必要があります。
成功した実行可能 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 の場合、応答にはエラー コードとメッセージ フィールドが含まれ、ゼロ以外の値で終了する必要があります。token_type
: サードパーティのサブジェクト トークン タイプ。 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
: サードパーティのサブジェクト トークンの有効期限 (秒単位) (UNIX エポック タイム)。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
: 資格情報構成からの出力ファイルの場所。資格情報構成で指定された場合にのみ存在します。これらの環境変数を実行可能ファイルで使用すると、これらの値のハードコーディングを回避できます。
次のセキュリティ対策が強く推奨されます。
実行可能ファイルをソースとする認証情報の使用は複雑であるため、特定の要件を満たさない限り、サードパーティの認証情報を提供するために既存のサポートされているメカニズム (ファイル ソース/URL ソース) を使用することをお勧めします。
Auth ライブラリを使用して、OIDC または SAML プロバイダから Google Cloud リソースを呼び出すことができるようになりました。
IdentityPoolCredentials の構築中に IdentityPoolSubjectTokenSupplier のカスタム実装を使用して、GCP アクセス トークンと交換できるサブジェクト トークンを提供できます。サプライヤーは、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
: Workload Identity プール ID。$PROVIDER_ID
: プロバイダー ID。対象ユーザー、サービス アカウントの偽装 URL、その他のビルダー フィールドの値は、gcloud CLI で認証情報構成ファイルを生成することによっても見つけることができます。
AwsCredentials の初期化時に、AwsSecurityCredentialsSupplier のカスタム実装を提供できます。指定された場合、AwsCredentials インスタンスは、GCP アクセス トークンと交換するための AWS セキュリティ認証情報の取得をサプライヤーに委ねます。サプライヤーは、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
: Workload Identity プール ID。$PROVIDER_ID
: プロバイダー ID。対象ユーザー、サービス アカウントの偽装 URL、その他のビルダー フィールドの値は、gcloud CLI で認証情報構成ファイルを生成することによっても見つけることができます。
サービス アカウントの偽装を使用して Workload Identity フェデレーションで資格情報構成を作成する場合、オプションの引数を指定してサービス アカウントのアクセス トークンの有効期間を構成できます。
構成可能なトークンの有効期間を使用して構成を生成するには、次のコマンドを実行します (この例では AWS 構成を使用しますが、トークンの有効期間はすべての Workload Identity フェデレーション プロバイダーに対して構成できます)。
# 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
: Workload Identity プール 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 分ごとにトークン交換フロー全体を開始し、サードパーティのトークンの有効期限が切れていない場合でも、サードパーティのトークン プロバイダーを呼び出すことに注意してください。
Workforce Identity フェデレーションを使用すると、外部 ID プロバイダ(IdP)を使用して、IAM を使用して従業員(従業員、パートナー、請負業者などのユーザーのグループ)を認証および認可できるため、ユーザーは Google Cloud サービスにアクセスできます。 Workforce Identity フェデレーションは、Google Cloud の ID 機能を拡張して、同期なしの属性ベースのシングル サインオンをサポートします。
Workforce Identity フェデレーションを使用すると、従業員は、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 リソースにアクセスするには、次の要件が必要です。
Workforce Identity フェデレーションを構成する方法の詳細な手順に従ってください。
OIDC または SAML 2.0 プロバイダーを構成した後、資格情報構成ファイルを生成する必要があります。生成された認証情報構成ファイルには、外部サブジェクト トークンを取得して GCP アクセス トークンと交換する方法をライブラリに指示するための非機密メタデータが含まれています。構成ファイルは、gcloud CLI を使用して生成できます。
Auth ライブラリは、ローカル ファイルの場所 (ファイル ソースの資格情報)、ローカル サーバー (URL ソースの資格情報)、または実行可能ファイルの呼び出し (実行可能ファイル ソースの資格情報) から外部サブジェクト トークンを取得できます。
ファイル ソースの資格情報ファイル ソースの資格情報の場合、バックグラウンド プロセスは、有効期限が切れる前に、新しいサブジェクト トークンを使用してファイルの場所を継続的に更新する必要があります。有効期間が 1 時間のトークンの場合、ファイル内のトークンを 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 Workforce Identity 構成を生成するには、次のコマンドを実行します。
# 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