Amazon ec2 具有IAM角色的跨帐户SQS访问

Amazon ec2 具有IAM角色的跨帐户SQS访问,amazon-ec2,amazon-sqs,aws-java-sdk,Amazon Ec2,Amazon Sqs,Aws Java Sdk,我正在帐户A中运行EC2实例,并在帐户A和B中运行SQS队列。我的应用程序正在帐户A的EC2实例上运行。消息侦听器正在获取队列URL并轮询来自队列的消息,队列可以位于帐户A或帐户B中。下面是获取队列URL的代码示例,如果我们获取帐户A的队列URL但失败,它可以正常工作如果我们提供帐户B sqs队列作为输入参数: public String getQueueUrl(String queueOwnerAccountId, String region, String queueName) throws

我正在帐户A中运行EC2实例,并在帐户A和B中运行SQS队列。我的应用程序正在帐户A的EC2实例上运行。消息侦听器正在获取队列URL并轮询来自队列的消息,队列可以位于帐户A或帐户B中。下面是获取队列URL的代码示例,如果我们获取帐户A的队列URL但失败,它可以正常工作如果我们提供帐户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\u B:QueueName然后将该策略附加到角色&与附加到帐户a的EC2实例的角色相同。右键单击帐户B中的队列,然后单击添加权限。弹出窗口将显示为提供原则操作Principle是可以访问此队列的aws accountId(这里我们可以指定帐户A accountId)&action是该队列的权限集(需要API标签访问)。

您是否在帐户B的SQS队列上添加了Amazon SQS策略?请参阅:默认情况下,帐户A无法向帐户B授予权限(否则您可能会接管其他人的帐户!)。但是,AmazonSQS能够将一个策略添加到允许从另一个帐户访问的特定队列中(非常类似于AmazonS3 bucket策略)。