Федерация удостоверений рабочей нагрузки с @google-cloud
Кто-нибудь знает, есть ли какие-либо другие способы аутентификации / авторизации для доступа к облачному хранилищу Google, кроме ключа учетной записи службы, когда я использую модуль @ google-cloud / storage Node.js отсюда ? Я читал о «Федерации идентификации рабочих нагрузок», но мне кажется, что я не могу использовать этот подход, когда использую библиотеку @ google-cloud / storage . Мне не удалось найти подходящего конструктора, только эти два:
const {Storage} = require('@google-cloud/storage');
var storage = new Storage({
projectId : `my_google_project_id`,
keyFilename : `my_google_key_file.json` // service account key is inside of this file
});
// or this one:
var storage = new Storage(); // service account key is inside of file specified by environment variable GOOGLE_APPLICATION_CREDENTIALS
Какие-нибудь рекомендации? Спасибо
1 ответ
Большинство клиентов Google поддерживают новый файл ключей секретов с типом external_account. Ниже показано, как создать этот файл и настроить учетные данные приложения по умолчанию (ADC) для загрузки этого файла.
Чтобы использовать Workload Identity Federation с клиентскими библиотеками Google, сохраните объединенные учетные данные в файл, а затем укажите этот файл с помощью переменной среды GOOGLE_APPLICATION_CREDENTIALS. Клиент хранилища будет использовать ADC и находить учетные данные из среды.
Пример для 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
Пример для 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
Примечание. Я создал свои учетные данные на виртуальной машине Azure. Я добавил в приведенную выше команду следующий параметр командной строки:
--app-id-uri=https://iam.googleapis.com/projects/REDACTED/locations/global/workloadIdentityPools/pool-azure/providers/provider-id
Значение выходного файла используется для установки среды:
set GOOGLE_APPLICATION_CREDENTIALS=/path/to/generated/config.json
Файл имеет следующую структуру. Этот пример для Azure:
{
"type": "external_account",
"audience": "//iam.googleapis.com/projects/REDACTED/locations/global/workloadIdentityPools/pool-azure/providers/provider-id",
"subject_token_type": "urn:ietf:params:oauth:token-type:jwt",
"token_url": "https://sts.googleapis.com/v1/token",
"credential_source": {
"url": "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://iam.googleapis.com/projects/REDACTED/locations/global/workloadIdentityPools/pool-azure/providers/provider-id",
"headers": {
"Metadata": "True"
},
"format": {
"type": "json",
"subject_token_field_name": "access_token"
}
},
"service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/REDACTED@REDACTED.iam.gserviceaccount.com:generateAccessToken"
}
Используйте этот стиль для создания клиента:
var storage = new Storage();