AWS S3 Java SDK:创建内容长度范围的策略

AWS S3 Java SDK: Creating a policy with content-length-range

我一直在使用 AWS Java SDK 创建策略文档(而不是直接创建策略 JSON)。我已经能够创建具有键前缀要求的基本策略,但我不知道如何构建文件大小要求。我在示例中看到它作为 JSON 数组出现:

['content-length-range', 0, 1024]

但我似乎无法使用 Java SDK 以编程方式执行此操作。浏览 类 和文档似乎也没有给出很好的提示。

目前有人这样做吗?代码是什么样的?

您可以使用 NumericCondition class for adding the desired conditions to your s3 policy

例如,您可以使用如下策略:

    Policy policy = new Policy().withStatements(
        new Statement(Effect.Allow)
        .withActions(S3Actions.PutObject)
        .withResources(new Resource("arn:aws:s3:::foo_bucket"))
        .withConditions(
            new NumericCondition(NumericComparisonType.NumericLessThanEquals, "s3:content-length-range", "1024"),
            new NumericCondition(NumericComparisonType.NumericGreaterThan, "s3:content-length-range", "0")
        )
    );

请注意,您需要在键 (content-length-range) 前加上 s3: 以构建有效的策略。

从上面的代码生成的策略如下所示,在 Json:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "1",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::foo_bucket"
      ],
      "Condition": {
        "NumericGreaterThan": {
          "s3:content-length-range": [
            "0"
          ]
        },
        "NumericLessThanEquals": {
          "s3:content-length-range": [
            "1024"
          ]
        }
      }
    }
  ]
}

看来我想做的事情无法完成(条件键不存在)。不过,有一种不同类型的策略称为浏览器上传策略,它可以具有这种类型的条件。 Link 下面:

Amazon S3. Maximum object size