首页 > 解决方案 > 如何向队列添加权限以允许不同帐户中的用户对队列的权限

问题描述

sqs.addPermission("https://sqs.eu-west-1.amazonaws.com/111111111111/queueName", "remoteAccess",
        Arrays.asList("arn:aws:iam::222222222222:user/user.x@mycompany.com"), Arrays.asList(SQSActions.SendMessage.name()));

应该(IMO)将队列的权限添加到不同帐户中的用户。

我得到一个错误。

参数 PrincipalId 的值 [arn:aws:iam::222222222222:user/user.x@mycompany.com] 无效。原因:无法验证。(服务:AmazonSQS;状态代码:400;错误代码:InvalidParameterValue;

任何人都知道如何以编程方式让不同帐户中的特定用户访问队列?

这与我通过 sqs Web 控制台添加权限时看到的用户 arn 相同。

标签: amazon-web-servicesamazon-sqsamazon-iam

解决方案


文档的这一部分包含跨账户 SQS 访问策略的示例:https ://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-customer-managed-policy-examples.html

您需要在队列级别和其他账户中的委托人上应用策略。

例如,在队列级别

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Principal": {"AWS": "111122223333"},
    "Action": [
      "sqs:SendMessage",
      "sqs:ReceiveMessage"
    ],
    "Resource": ["arn:aws:sqs:*:123456789012:queue1"],
  }
}

如果您确实想授予对特定用户、组或角色的访问权限,您可以使用如下Principal字段:

"Principal": {
         "AWS": [
            "arn:aws:iam::111122223333:role/role1",
            "arn:aws:iam::111122223333:user/username1"
         ]
      },

而在另一个帐户中,给需要访问队列的角色或用户(您显然可以限制 SQS API 列表,这只是一个示例)

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "sqs:*",
    "Resource": "arn:aws:sqs:*:123456789012:queue1"
  }
}

推荐阅读