使用 IAM 角色进行跨账户 SQS 访问

Cross account SQS access with IAM roles

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

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;

}

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

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