Кросс-проект ListBuckets при аутентификации с использованием служебной учетной записи HMA C ключей - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь получить доступ к Google Cloud Storage с помощью AWS Java SDK. Мой конкретный сценарий заключается в том, что я хотел бы использовать служебную учетную запись в проекте «A» для отображения списков в проекте «B». Руководство от Google не охватывает этот тип межпроектного доступа с учетной записью службы.

Я попытался установить заголовок x-goog-project-id явно:

        // The access id and secret key below are for a service account in project "A".
        BasicAWSCredentials googleCreds = new BasicAWSCredentials(
                "my access id",
                "my secret key");

        AmazonS3 interopClient = AmazonS3ClientBuilder.standard()
                .withEndpointConfiguration(
                        new AwsClientBuilder.EndpointConfiguration(
                                "https://storage.googleapis.com", "auto"))
                .withCredentials(new AWSStaticCredentialsProvider(googleCreds))
                .build();

        ListBucketsRequest listBucketsReq = new ListBucketsRequest();
        // The project id below is for project "B"
        listBucketsReq.putCustomRequestHeader("x-goog-project-id", "my project id");
        List<Bucket> buckets = interopClient.listBuckets(listBucketsReq);

        System.out.println("Buckets:");
        for (Bucket bucket : buckets) {
            System.out.println(bucket.getName());
        }

Но я получаю следующую ошибку о повторяющихся значениях заголовка:

Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: Multiple HTTP header values where one was expected. (Service: Amazon S3; Status Code: 400; Error Code: ExcessHeaderValues; Request ID: null; S3 Extended Request ID: null), S3 Extended Request ID: null

Есть ли способ заставить этот сценарий работать?

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Это недавно изменилось. Теперь вы можете передать заголовок x-amz-project-id, чтобы указать проект для этих операций , чтобы ваша учетная запись службы могла «жить» в одном проекте, но запрашивать операции группы в любом другом.

0 голосов
/ 19 марта 2020

На основе информации в этой теме необходимо добавить учетную запись службы, созданную в проекте A, на страницу IAM в проекте B. Затем добавьте соответствующие роли.

...