Как использовать ImpersonatedCredentials в задании потока данных Google? - PullRequest
0 голосов
/ 24 февраля 2020

Поток данных позволяет указывать учетную запись службы, управляемую пользователем, , с помощью опции --serviceAccount. Кроме того, я бы хотел выдать себя за службу с учетной записью для взаимодействия с ресурсами GCP перед отправкой задания. Одним из примеров использования может быть использование API-интерфейса FileSystems Beam SDK для проверки некоторых метаданных объекта GCS.

Как мне указать beam.sdk.io.FileSystems и storage.StorageOptions для использования ImpersonatedCredentials?

Пример кода, который будет работать вне рабочих потоков GCP:

import com.google.cloud.storage.StorageOptions;
import org.apache.beam.sdk.io.FileSystems;

    // list blobs in a GCS path
    Storage storage = StorageOptions.getDefaultInstance().getService();
    Page<Blob> blobs = storage.list(
      bucketName,
      BlobListOption.currentDirectory(),
      BlobListOption.prefix(directory));

Resource resource = FileSystems.matchNewResource(path, false)

Олицетворяя учетную запись службы, я имею в виду с использованием недолговечных учетных данных SA , как, например, :

creds = ImpersonatedCredentials.create(ServiceAccountCredentials.getApplicationCredentials(), 
          "example-service-account@example-project.iam.gserviceaccount.com",
          Collections.emptyList(), // list of delegates
          Arrays.asList("https://www.googleapis.com/auth/devstorage.read_only"),
          3600);
...