Cross-project 使用服务帐户 HMAC 密钥进行身份验证时的 ListBuckets
Cross-project ListBuckets when authenticating using service account HMAC keys
我正在尝试使用 AWS Java SDK 访问 Google 云存储。我的特定情况是我想在项目 "A" 中使用服务帐户来列出项目 "B" 中的存储桶。 The guide from Google 不涵盖此类 cross-project 使用服务帐户的访问。
我尝试明确设置 x-goog-project-id
header:
// 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());
}
但我收到以下关于重复 header 值的错误:
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
有什么方法可以让这个场景发挥作用吗?
根据中的信息,您必须将在项目A中创建的服务帐户添加到项目B中的IAM页面。然后添加相应的角色。
这最近发生了变化。 You can now pass in a header x-amz-project-id
to specify a project for these operations,因此您的服务帐户可以在一个项目中 "live" 但在任何其他项目中请求存储桶操作。
我正在尝试使用 AWS Java SDK 访问 Google 云存储。我的特定情况是我想在项目 "A" 中使用服务帐户来列出项目 "B" 中的存储桶。 The guide from Google 不涵盖此类 cross-project 使用服务帐户的访问。
我尝试明确设置 x-goog-project-id
header:
// 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());
}
但我收到以下关于重复 header 值的错误:
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
有什么方法可以让这个场景发挥作用吗?
根据
这最近发生了变化。 You can now pass in a header x-amz-project-id
to specify a project for these operations,因此您的服务帐户可以在一个项目中 "live" 但在任何其他项目中请求存储桶操作。