Amazon web services 第二个相同存储桶的AWS s3访问被拒绝
在AWS S3面板中,我创建了与我的帐户名相同的bucket(eu-central-1)。使用rest服务、我的用户密钥和密钥,我可以访问我的第一个存储桶,我通过rest服务发送图像,删除它们,获取它们等等 我创建了第二个bucket(eu-central1),并选择从第一个bucket获取设置。第二个桶当然不是我的账户 当我调用列表bucket时,我得到两个bucket,其中一个与我的帐户名同名。这就是工作的水桶 这两个桶都阻止了公众访问。所以,唯一的方法是使用签名头通过rest服务发送图像 无论我想用第二个桶做什么,我都会被拒绝访问 但是,如果我删除第二个bucket并在eu-easet-1中创建一个新bucket,那么对于第二个bucket,所有这些都可以完美地工作。Amazon web services 第二个相同存储桶的AWS s3访问被拒绝,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,在AWS S3面板中,我创建了与我的帐户名相同的bucket(eu-central-1)。使用rest服务、我的用户密钥和密钥,我可以访问我的第一个存储桶,我通过rest服务发送图像,删除它们,获取它们等等 我创建了第二个bucket(eu-central1),并选择从第一个bucket获取设置。第二个桶当然不是我的账户 当我调用列表bucket时,我得到两个bucket,其中一个与我的帐户名同名。这就是工作的水桶 这两个桶都阻止了公众访问。所以,唯一的方法是使用签名头通过rest服务发送图像
为什么我不能在评论中提到的@Nico的同一地区拥有两个桶, 你需要有这样的东西:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListObjectsInBucket",
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": [
"arn:aws:s3:::bucket-one/*",
"arn:aws:s3:::bucket-two/*"
]
},
{
"Sid": "AllObjectActions",
"Effect": "Allow",
"Action": "s3:*Object",
"Resource": [
"arn:aws:s3:::bucket-one/*",
"arn:aws:s3:::bucket-two/*"
]
}
]
}
正如评论中提到的@Nico, 你需要有这样的东西:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListObjectsInBucket",
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": [
"arn:aws:s3:::bucket-one/*",
"arn:aws:s3:::bucket-two/*"
]
},
{
"Sid": "AllObjectActions",
"Effect": "Allow",
"Action": "s3:*Object",
"Resource": [
"arn:aws:s3:::bucket-one/*",
"arn:aws:s3:::bucket-two/*"
]
}
]
}
您在评论中说,如果您的桶位于不同的地区,您会遇到问题。当您与S3集成时,您必须确保您的“客户机”配置了S3存储桶的区域 例如,在Java SDK中,我得到一个
S3Client
,如下所示:
private static S3Client getClient(AwsCredentialsProvider awsAuth, Region awsRegion) {
return S3Client.builder().credentialsProvider(awsAuth).region(awsRegion).build();
}
Region
method参数指存储桶所在的区域。然后,我使用这个区域感知的S3Client
-对象与S3集成。(它将打开到该AWS区域的连接)
在评论中,我还提到了IAM策略,您的访问密钥需要相关的访问权限。看来你已经解决了这个问题——我只是想澄清一下我后来想的一件事,它可能会对你未来的AWS之旅有所帮助
您需要s3:putObject
权限
s3:putObjectAcl
可能用于更高级的用例,例如(可能还有其他示例)将s3对象复制到另一个帐户。例如,将文件从主AWS帐户上的应用程序复制到另一个用于管理数据以进行分析的应用程序。一些参考资料,其中包含一些标题的详细信息,这些标题将需要随您的PutObject
-请求一起提供。您在评论中说,如果您的存储桶位于不同的区域,您会遇到问题。当您与S3集成时,您必须确保您的“客户机”配置了S3存储桶的区域
例如,在Java SDK中,我得到一个S3Client
,如下所示:
private static S3Client getClient(AwsCredentialsProvider awsAuth, Region awsRegion) {
return S3Client.builder().credentialsProvider(awsAuth).region(awsRegion).build();
}
Region
method参数指存储桶所在的区域。然后,我使用这个区域感知的S3Client
-对象与S3集成。(它将打开到该AWS区域的连接)
在评论中,我还提到了IAM策略,您的访问密钥需要相关的访问权限。看来你已经解决了这个问题——我只是想澄清一下我后来想的一件事,它可能会对你未来的AWS之旅有所帮助
您需要s3:putObject
权限
s3:putObjectAcl
可能用于更高级的用例,例如(可能还有其他示例)将s3对象复制到另一个帐户。例如,将文件从主AWS帐户上的应用程序复制到另一个用于管理数据以进行分析的应用程序。一些参考资料,其中包含一些标题的详细信息,这些标题将需要随您的PutObject
-请求一起提供。感谢大家帮助我深入了解S3服务
注意:我正在使用root用户。以下示例中使用的ID和密钥都是root用户和以后创建的具有完全s3权限的用户。问题总是一样的
为了进一步研究这个问题,我在发表评论前24小时创建了6个桶
今天所有的水桶都在工作。感谢大家帮助我深入了解S3服务 注意:我正在使用root用户。以下示例中使用的ID和密钥都是root用户和以后创建的具有完全s3权限的用户。问题总是一样的 为了进一步研究这个问题,我在发表评论前24小时创建了6个桶