【问题标题】:S3 programmatic access via Java通过 Java 进行 S3 编程访问
【发布时间】: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


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-08
      • 2014-09-02
      • 2018-10-27
      • 2012-09-17
      • 2017-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多