【问题标题】:Cross account SQS access with IAM roles使用 IAM 角色的跨账户 SQS 访问
【发布时间】:2020-07-01 07:28:26
【问题描述】:

我在账户 A 中运行 EC2 实例,并且在账户 A 和 B 中有 SQS 队列。我的应用程序在账户 A 的 EC2 实例上运行。消息侦听器正在获取 queueUrl 并轮询来自可能在账户 A 中的队列的消息或 B。这里是获取 queueUrl 的代码示例,如果我们获取账户 A 的 queueUrl,它可以正常工作,但如果我们提供账户 B sqs queue 作为输入参数,则会失败:

public String getQueueUrl(String queueOwnerAccountId, String region, String queueName) throws AwsException {
      try {
        AmazonSQS sqs = AmazonSQSClientBuilder.standard().withRegion(Regions.fromName(region)).build();
        GetQueueUrlRequest getQueueUrlRequest = new GetQueueUrlRequest(queueName).withQueueOwnerAWSAccountId(queueOwnerAccountId);
        GetQueueUrlResult result = sqs.getQueueUrl(getQueueUrlRequest);
        return result.getQueueUrl();
      } catch (QueueDoesNotExistException e) {
        throwAwsException("With accountId:"+queueOwnerAccountId+" ,Queue: "+queueName+" does not exists in region: "+region);
      } catch (AmazonClientException e) {
         throwAwsException("Invalid destination address:"+e.getMessage());
      }
      return null;

}

我已为账户 A 中的两个账户队列的 IAM 角色添加了策略(策略具有两个账户的队列的 ARN)。如果我缺少任何设置,请告诉我。谢谢。

【问题讨论】:

  • 您是否在账户 B 的 SQS 队列上添加了 Amazon SQS 策略?请参阅:Basic Examples of Amazon SQS Policies - Amazon Simple Queue Service 默认情况下,A 账户无法授予 B 账户权限(否则您可以接管其他人的账户!)。但是,Amazon SQS 能够将策略添加到允许从另一个账户访问的特定队列(很像 Amazon S3 存储桶策略)。

标签: amazon-ec2 amazon-sqs aws-java-sdk


【解决方案1】:

我在账户 A 中为 SQS 创建了策略并添加了 ARN 资源(对于 账户 B 中的队列) arn:aws:sqs:Region:AccountID_B:QueueName 然后将该策略附加到一个角色以及附加到帐户 A 的 EC2 实例的相同角色。右键单击帐户 B 中的队列,然后单击 添加权限。弹出窗口似乎提供了原理和动作。 Principle是可以访问这个队列的aws accountId(这里我们可以指定Account A accountId)&action是permission的集合(API标签该队列所需的访问权限)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 2020-06-24
    • 2017-03-16
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多