Федерация удостоверений рабочей нагрузки с @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();
Другие вопросы по тегам