通过SDK

时间:2017-01-27 18:42:04

标签: java amazon-web-services amazon-sqs

我尝试通过Java SDK创建AWS SQS队列,然后为所有用户添加所有权限。我可以很好地创建队列,但我很难知道我可以为校长传递什么价值。这就是我的代码:

CreateQueueRequest createQueueRequest = new CreateQueueRequest(queueName).withAttributes(attributes);
CreateQueueResult createQueueResult = amazonSqs.createQueue(createQueueRequest);
String queueUrl = createQueueResult.getQueueUrl();

amazonSqs.addPermission(queueUrl, "*", ????, Arrays.asList("*"));

???是我不确定的。我已经尝试了Arrays.asList("*"),但它抱怨它无效。在Web控制台中,Everyone有一个复选框,我只是想在SDK中执行相同的操作。我能为此传递一些价值吗?

---更新---

我已经能够通过Policy

完成另一种方式
String queueUrl = createQueueResult.getQueueUrl();
GetQueueAttributesResult getQueueAttributesResult = amazonSqs.getQueueAttributes(queueUrl, Arrays.asList(QUEUE_ARN_ATTRIBUTE_NAME));
String queueArn = getQueueAttributesResult.getAttributes().get(QUEUE_ARN_ATTRIBUTE_NAME);

if (needToSetPolicy)
{

  Policy allAccessPolicy = new Policy("SQSAllAccess", Arrays.asList(
    new Statement(Effect.Allow)
        .withActions(() -> "SQS:*")
        .withPrincipals(Principal.All)
        .withId("SQSAllAccessStatement")
        .withResources(new Resource(queueArn))
  ));
  Map<String, String> policyMap = new HashMap<>(1);
  policyMap.put(POLICY_ATTRIBUTE_NAME, allAccessPolicy.toJson());

  amazonSqs.setQueueAttributes(queueUrl, policyMap);
}

似乎应该有更好/更简单的方法来做到这一点。有没有更好/更清洁/更简单的方法呢?

1 个答案:

答案 0 :(得分:0)

在kotlin中使用SDK中的常量

val policy: Policy = Policy("AllowAllSendMessage", listOf(Statement(Effect.Allow)
    .withActions(SQSActions.SendMessage)
    .withPrincipals(Principal.All)
    .withId("AllowAllSendMessage")
    .withResources(Resource(queueArn))))
_sqs.setQueueAttributes(SetQueueAttributesRequest()
    .withQueueUrl(queueUrl)
    .withAttributes(mapOf(QueueAttributeName.Policy.toString() to policy.toJson())))