AWS S3 Java SDK:创建具有content-length-range的策略

时间:2015-05-09 00:17:22

标签: amazon-web-services amazon-s3

我一直在使用AWS Java SDK来创建策略文档(而不是直接创建策略JSON)。我已经能够创建一个具有密钥前缀要求的基本策略,但我无法弄清楚如何构建文件大小要求。我在样本中看到这是一个JSON数组:

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

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

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

2 个答案:

答案 0 :(得分:2)

您可以使用NumericCondition课程为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"
          ]
        }
      }
    }
  ]
}

答案 1 :(得分:0)

看起来我想做的事情无法完成(条件密钥不存在)。有一种称为浏览器上载策略的不同类型的策略可以具有此类条件。链接如下:

Amazon S3. Maximum object size