通过 Java 进行 S3 编程访问

S3 programmatic access via Java

我需要在我的 Java 程序中创建一个私有 S3 存储桶和一个仅允许访问该存储桶的 IAM 用户。

所以我需要一些管理员帐户凭据来创建 S3Client

AmazonS3 s3client = AmazonS3ClientBuilder
  .standard()
  .withCredentials(new AWSStaticCredentialsProvider(credentials))
  .withRegion(Regions.US_EAST_2)
  .build();

然后进行一些空值检查等创建我的存储桶

s3client.createBucket(bucketName);

现在我需要阻止所有 public 访问此存储桶(我可以吗?)

并创建一个 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/*"]
        }
    ]
}

这可能吗?

事实上,这是在存储桶级别或 IAM 级别具有安全性的主要问题。

“此用户可以在 AWS 中做什么?” 中,您可以探索使用 IAM 策略(托管策略、内联策略...)

谁可以访问此 S3 存储桶? 然后您可以探索使用 S3 存储桶策略将存储桶中的安全性集中到帐户...

默认情况下,任何新存储桶都处于无法 public 访问的模式,并且任何用户 IAM 都有权访问 S3 可以 访问它。

最后我确实找到了一个很好的解决方案。 Sampler