Я пытаюсь получить доступ к 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
Есть ли способ заставить этот сценарий работать?