【发布时间】:2023-04-06 07:15:02
【问题描述】:
我需要从我的 Java 程序中创建一个私有 S3 存储桶和一个仅允许访问该存储桶的 IAM 用户。
所以我需要一些管理员帐户凭据来创建 S3Client
AmazonS3 s3client = AmazonS3ClientBuilder
.standard()
.withCredentials(new AWSStaticCredentialsProvider(credentials))
.withRegion(Regions.US_EAST_2)
.build();
然后通过一些空检查等创建我的存储桶
s3client.createBucket(bucketName);
现在我需要阻止对此存储桶的所有公共访问(我可以吗?)
并创建一个 AWS 凭证类型等于“访问密钥 - 编程访问”的 IAM 用户,并将其策略设置为类似这样,以便它只能访问我刚刚创建的存储桶 (Just a snippet from the official documentation)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListObjectsInBucket",
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::bucket-name"]
},
{
"Sid": "AllObjectActions",
"Effect": "Allow",
"Action": "s3:*Object",
"Resource": ["arn:aws:s3:::bucket-name/*"]
}
]
}
这有可能吗?
【问题讨论】:
-
是的,这一切皆有可能,只是需要大量的 API 调用。您需要通过 S3 和 IAM api 并寻找正确的调用,例如对于 CreateUser、CreateAccessKey、CreatePolicy、AttachUserPolicy、....
-
您无需阻止对新创建的 S3 存储桶的公共访问。在没有明确允许公共访问的策略的情况下,存储桶是私有的。另请注意,您应该注意一个名为 Block Public Access 的总体存储桶和/或帐户级别设置,并在它适合您的目的时在存储桶级别或帐户级别使用(以防止用户错误地进行存储桶或对象公开)。
标签: java amazon-web-services amazon-s3 amazon-iam