Клиентская библиотека аутентификации с открытым исходным кодом для Java.
Этот проект состоит из 3-х артефактов:
Оглавление:
Быстрый старт
Google-аутентификация-библиотека-oauth2-http
учетные данные библиотеки Google-Auth
Google-аутентификация-библиотека-приложение
Статус ЭК
Содействие
Лицензия
Если вы используете 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. Учетные данные приложения по умолчанию предоставляют простой способ получить учетные данные авторизации для использования при вызове API Google.
Они лучше всего подходят для случаев, когда вызов должен иметь одинаковую идентификацию и уровень авторизации для приложения, независимого от пользователя. Это рекомендуемый подход для авторизации вызовов Cloud API, особенно если вы создаете приложение, использующее Google Cloud Platform.
Учетные данные приложения по умолчанию также поддерживают федерацию удостоверений рабочей нагрузки для доступа к ресурсам Google Cloud с платформ, отличных от Google Cloud, включая Amazon Web Services (AWS), Microsoft Azure или любого поставщика удостоверений, поддерживающего OpenID Connect (OIDC). Федерация идентификации рабочей нагрузки рекомендуется для сред, отличных от Google Cloud, поскольку она позволяет избежать необходимости загружать, управлять и хранить закрытые ключи учетной записи службы локально, см.: Федерация идентификации рабочей нагрузки.
Чтобы получить учетные данные приложения по умолчанию, используйте GoogleCredentials.getApplicationDefault()
или GoogleCredentials.getApplicationDefault(HttpTransportFactory)
. Эти методы возвращают учетные данные приложения по умолчанию, которые используются для идентификации и авторизации всего приложения. Для поиска учетных данных приложения по умолчанию выполняются следующие действия (по порядку):
GOOGLE_APPLICATION_CREDENTIALS
gcloud auth application-default login
NO_GCE_CHECK=true
GCE_METADATA_HOST=
Чтобы получить учетные данные из ключа 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, должен включить API «IAMCredentials». Кроме того, целевая учетная запись службы должна предоставить исходному участнику роль 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 );
Используя федерацию удостоверений рабочей нагрузки, ваше приложение может получить доступ к ресурсам Google Cloud из Amazon Web Services (AWS), Microsoft Azure или любого поставщика удостоверений, поддерживающего OpenID Connect (OIDC).
Традиционно приложения, работающие за пределами Google Cloud, использовали ключи служебной учетной записи для доступа к ресурсам Google Cloud. Используя федерацию удостоверений, ваша рабочая нагрузка может олицетворять учетную запись службы. Это позволяет внешней рабочей нагрузке напрямую обращаться к ресурсам Google Cloud, устраняя нагрузку на обслуживание и безопасность, связанную с ключами сервисных учетных записей.
Для доступа к ресурсам Google Cloud из Amazon Web Services (AWS) необходимы следующие требования:
Следуйте подробным инструкциям по настройке федерации удостоверений рабочей нагрузки из AWS.
После настройки поставщика AWS для олицетворения учетной записи службы необходимо создать файл конфигурации учетных данных. В отличие от файлов учетных данных учетной записи службы, сгенерированный файл конфигурации учетных данных содержит неконфиденциальные метаданные, которые указывают библиотеке, как получить токены внешних субъектов и обменять их на токены доступа к учетной записи службы. Файл конфигурации можно создать с помощью интерфейса командной строки gcloud.
Чтобы создать конфигурацию идентификации рабочей нагрузки 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
: идентификатор пула удостоверений рабочей нагрузки.$AWS_PROVIDER_ID
: идентификатор поставщика AWS.$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 для вызова ресурсов Google Cloud из AWS.
Для доступа к ресурсам Google Cloud из Microsoft Azure необходимы следующие требования:
Следуйте подробным инструкциям по настройке федерации удостоверений рабочей нагрузки из Microsoft Azure.
После настройки поставщика Azure для олицетворения учетной записи службы необходимо создать файл конфигурации учетных данных. В отличие от файлов учетных данных учетной записи службы, сгенерированный файл конфигурации учетных данных содержит неконфиденциальные метаданные, которые указывают библиотеке, как получить токены внешних субъектов и обменять их на токены доступа к учетной записи службы. Файл конфигурации можно создать с помощью интерфейса командной строки gcloud.
Чтобы создать конфигурацию удостоверения рабочей нагрузки 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
: идентификатор пула удостоверений рабочей нагрузки.$AZURE_PROVIDER_ID
: идентификатор поставщика Azure.$SERVICE_ACCOUNT_EMAIL
: адрес электронной почты учетной записи службы, которую нужно олицетворять.При этом создается файл конфигурации в указанном выходном файле.
Теперь вы можете использовать библиотеку Auth для вызова ресурсов Google Cloud из Azure.
Для доступа к ресурсам Google Cloud от поставщика удостоверений, поддерживающего OpenID Connect (OIDC), необходимы следующие требования:
Следуйте подробным инструкциям по настройке федерации удостоверений рабочей нагрузки от поставщика удостоверений OIDC.
После настройки поставщика OIDC для олицетворения учетной записи службы необходимо создать файл конфигурации учетных данных. В отличие от файлов учетных данных учетной записи службы, сгенерированный файл конфигурации учетных данных содержит неконфиденциальные метаданные, которые указывают библиотеке, как получить токены внешних субъектов и обменять их на токены доступа к учетной записи службы. Файл конфигурации можно создать с помощью интерфейса командной строки gcloud.
Для поставщиков OIDC библиотека Auth может получать токены OIDC либо из локального местоположения файла (учетные данные, полученные из файла), либо с локального сервера (учетные данные, полученные из URL-адреса).
Учетные данные, полученные из файла. Для учетных данных, полученных из файла, фоновый процесс должен постоянно обновлять местоположение файла новым токеном OIDC до истечения срока его действия. Для токенов со сроком действия один час токен необходимо обновлять в файле каждый час. Токен можно хранить непосредственно в виде обычного текста или в формате 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
: идентификатор пула удостоверений рабочей нагрузки.$OIDC_PROVIDER_ID
: идентификатор поставщика OIDC.$SERVICE_ACCOUNT_EMAIL
: адрес электронной почты учетной записи службы, которую нужно олицетворять.$PATH_TO_OIDC_ID_TOKEN
: путь к файлу, используемый для получения токена OIDC.При этом создается файл конфигурации в указанном выходном файле.
Учетные данные, полученные из URL-адреса. Для учетных данных, полученных из URL-адреса, на локальном сервере должна быть размещена конечная точка GET для возврата токена OIDC. Ответ может быть в виде обычного текста или JSON. Также можно указать дополнительные необходимые заголовки запроса.
Чтобы создать конфигурацию удостоверения рабочей нагрузки OIDC на основе URL-адреса, выполните следующую команду:
# 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
: идентификатор пула удостоверений рабочей нагрузки.$OIDC_PROVIDER_ID
: идентификатор поставщика OIDC.$SERVICE_ACCOUNT_EMAIL
: адрес электронной почты учетной записи службы, которую нужно олицетворять.$URL_TO_GET_OIDC_TOKEN
: URL-адрес конечной точки локального сервера, к которой нужно обратиться для получения токена OIDC.$HEADER_KEY
и $HEADER_VALUE
: дополнительные пары ключ/значение заголовка для передачи запроса GET в $URL_TO_GET_OIDC_TOKEN
, например Metadata-Flavor=Google
.Теперь вы можете использовать библиотеку аутентификации для вызова ресурсов Google Cloud от поставщика OIDC.
Учетные данные, полученные из исполняемого файла. Для учетных данных, полученных из исполняемого файла, для получения стороннего токена используется локальный исполняемый файл. Исполняемый файл должен обрабатывать предоставление действительного токена идентификатора OIDC с неистекшим сроком действия или утверждения SAML в формате JSON на стандартный вывод.
Чтобы использовать учетные данные, полученные из исполняемого файла, для переменной среды 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
: идентификатор пула удостоверений рабочей нагрузки.$PROVIDER_ID
: идентификатор поставщика OIDC или SAML.$SERVICE_ACCOUNT_EMAIL
: адрес электронной почты учетной записи службы, которую нужно олицетворять.$SUBJECT_TOKEN_TYPE
: Тип токена субъекта.$EXECUTABLE_COMMAND
: Полная команда для запуска, включая аргументы. Должен быть абсолютный путь к программе. Флаг --executable-timeout-millis
не является обязательным. Это продолжительность, в течение которой библиотека аутентификации будет ожидать завершения исполняемого файла (в миллисекундах). По умолчанию 30 секунд, если не указано иное. Максимально допустимое значение — 2 минуты. Минимум — 5 секунд.
Флаг --executable-output-file
не является обязательным. Если он указан, путь к файлу должен указывать на ответ учетных данных 3PI, сгенерированный исполняемым файлом. Это полезно для кэширования учетных данных. Указав этот путь, библиотеки Auth сначала проверят его существование перед запуском исполняемого файла. Кэширование исполняемого ответа 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-адресов) для предоставления сторонних учетных данных, если они не соответствуют вашим конкретным требованиям.
Теперь вы можете использовать библиотеку аутентификации для вызова ресурсов Google Cloud от поставщика OIDC или SAML.
Пользовательскую реализацию IdentityPoolSubjectTokenSupplier можно использовать при создании IdentityPoolCredentials для предоставления токена субъекта, который можно обменять на токен доступа 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
: идентификатор пула удостоверений рабочей нагрузки.$PROVIDER_ID
: идентификатор поставщика.Значения для аудитории, URL-адреса олицетворения учетной записи службы и любого другого поля компоновщика также можно найти, создав файл конфигурации учетных данных с помощью интерфейса командной строки gcloud.
Пользовательскую реализацию AwsSecurityCredentialsSupplier можно предоставить при инициализации AwsCredentials. Если этот параметр предоставлен, экземпляр AwsCredentials передаст поставщику запрос на получение учетных данных безопасности AWS для обмена на токен доступа GCP. Поставщик должен вернуть действительные учетные данные безопасности AWS с неистёкшим сроком действия при вызове с помощью учетных данных GCP.
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
: идентификатор пула удостоверений рабочей нагрузки.$PROVIDER_ID
: идентификатор поставщика.Значения для аудитории, URL-адреса олицетворения учетной записи службы и любого другого поля компоновщика также можно найти, создав файл конфигурации учетных данных с помощью интерфейса командной строки gcloud.
При создании конфигурации учетных данных с федерацией удостоверений рабочей нагрузки с использованием олицетворения учетной записи службы вы можете указать необязательный аргумент для настройки срока действия токена доступа к учетной записи службы.
Чтобы создать конфигурацию с настраиваемым временем жизни токена, выполните следующую команду (в этом примере используется конфигурация 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
: идентификатор пула удостоверений рабочей нагрузки.$AWS_PROVIDER_ID
: идентификатор поставщика AWS.$SERVICE_ACCOUNT_EMAIL
: адрес электронной почты учетной записи службы, которую нужно олицетворять.$TOKEN_LIFETIME
: Желаемый срок действия токена доступа к учетной записи службы в секундах. Флаг service-account-token-lifetime-seconds
является необязательным. Если не указано, по умолчанию это один час. Минимально допустимое значение — 600 (10 минут), максимально допустимое значение — 43200 (12 часов). Если требуется время существования более одного часа, учетную запись службы необходимо добавить в качестве разрешенного значения в политике организации, которая применяет ограничение constraints/iam.allowServiceAccountCredentialLifetimeExtension
.
Обратите внимание, что настройка короткого времени жизни (например, 10 минут) приведет к тому, что библиотека будет инициировать весь поток обмена токенов каждые 10 минут, который будет вызывать стороннего поставщика токенов, даже если срок действия стороннего токена не истек.
Федерация идентификации рабочей силы позволяет использовать внешнего поставщика удостоверений (IdP) для аутентификации и авторизации рабочей силы — группы пользователей, таких как сотрудники, партнеры и подрядчики, — с помощью IAM, чтобы пользователи могли получить доступ к сервисам Google Cloud. Федерация удостоверений рабочей силы расширяет возможности идентификации Google Cloud для поддержки бессинхронного единого входа на основе атрибутов.
Благодаря федерации удостоверений рабочей силы ваши сотрудники могут получить доступ к ресурсам Google Cloud с помощью внешнего поставщика удостоверений (IdP), который поддерживает OpenID Connect (OIDC) или SAML 2.0, например Azure Active Directory (Azure AD), службы федерации Active Directory (AD FS), Okta. и другие.
Для доступа к ресурсам Google Cloud от поставщика удостоверений, поддерживающего OpenID Connect (OIDC), необходимы следующие требования:
Следуйте подробным инструкциям по настройке федерации удостоверений рабочей силы.
После настройки поставщика OIDC или SAML 2.0 необходимо создать файл конфигурации учетных данных. Сгенерированный файл конфигурации учетных данных содержит неконфиденциальные метаданные, которые указывают библиотеке, как получать токены внешних субъектов и обменивать их на токены доступа GCP. Файл конфигурации можно создать с помощью интерфейса командной строки gcloud.
Библиотека аутентификации может получать токены внешних субъектов из локального местоположения файла (учетные данные, полученные из файла), с локального сервера (учетные данные, полученные из URL-адреса) или путем вызова исполняемого файла (учетные данные, полученные из исполняемого файла).
Учетные данные, полученные из файла. Для учетных данных, полученных из файла, фоновый процесс должен постоянно обновлять местоположение файла новым токеном субъекта до истечения срока его действия. Для токенов со сроком действия один час токен необходимо обновлять в файле каждый час. Токен можно хранить непосредственно в виде обычного текста или в формате 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
: идентификатор пула рабочей силы.$PROVIDER_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
: идентификатор пула рабочей силы.$PROVIDER_ID
: идентификатор поставщика.$PATH_TO_SAML_ASSERTION
: путь к файлу, используемый для получения утверждения SAML в кодировке Base64.$WORKFORCE_POOL_USER_PROJECT
: Номер проекта, связанный с пользовательским проектом пулов рабочей силы.Эти команды генерируют файл конфигурации в указанном выходном файле.
Учетные данные, полученные из URL-адреса. Для учетных данных, полученных из URL-адреса, на локальном сервере должна быть размещена конечная точка GET для возврата токена OIDC. Ответ может быть в виде обычного текста или JSON. Также можно указать дополнительные необходимые заголовки запроса.
Чтобы создать конфигурацию удостоверения рабочей силы OIDC на основе URL-адреса, выполните следующую команду:
# 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
: идентификатор пула рабочей силы.$PROVIDER_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
: Номер проекта, связанный с пользовательским проектом пулов рабочей силы.Чтобы создать конфигурацию SAML на основе URL-адреса, выполните следующую команду:
# 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