我有一个带有AmazonS3FullAccess
的s3帐户,当我尝试使用它运行s3.listObjects("name")
时出现403错误...
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>59C510407179770D</RequestId><HostId>aLPzqYkTKx6nkUWVtZWYS+2fYexzniKWkn2D9+aG6pdxBAjtxAcC85uvGC4HqDnQIifLaf+oy1E=</HostId></Error>
s3.doesBucketExistV2("name")
返回true。
我的政策是这样的...
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}
我需要将用户添加到某个地方吗?
更新
好像没有获得AWS证书可能是一个问题(这是奇怪的原因,因为这行)...
已弃用。通过didBucketExistV2(String),当凭据无效而不是返回true时,它将正确引发异常。请参阅问题#1256。
如果我运行((AmazonS3Client) s3).awsCredentialsProvider.getCredentials()
,它将返回null。我的信誉在这样的amazon.properties文件中……
@PropertySources({
@PropertySource("classpath:amazon.properties")
})
// amazon.properties
amazon.accessKey=${AMZN_ACCESS_KEY}
amazon.secretKey=${AMZN_SECRET_KEY}
aws.accessKeyId=${AMZN_ACCESS_KEY}
aws.secretKey=${AMZN_SECRET_KEY}
和echo $AMZN_ACCESS_KEY
返回我期望的值。
更新2
如果我像这样显式地显示属性似乎无法正确读取...
BasicAWSCredentials awsCreds = new BasicAWSCredentials(key, secret);
final AmazonS3 s3 = AmazonS3ClientBuilder.standard()
.withCredentials(new AWSStaticCredentialsProvider(awsCreds))
.withRegion(service.getRegion())
.build();
它起作用了,所以有两个问题1.)即使我没有正确登录,doesBucketExistV2
为何也返回true 2.)为什么系统属性不起作用?
答案 0 :(得分:-1)
您需要按以下方式传递存储桶名称。示例代码应如下所示
请参阅here。
/* The following example list two objects in a bucket. */
var params = {
Bucket: "name",
MaxKeys: 2
};
s3.listObjects(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response