Кросс-аккаунт SQS-доступ с ролями IAM - PullRequest
0 голосов
/ 20 марта 2020

Я использую экземпляр EC2 в учетной записи A и имею очереди SQS в учетной записи A & B. Мое приложение работает на экземпляре EC2 учетной записи A. Слушатель сообщений получает queueUrl и опрашивает сообщения из очередей, которые могут находиться в учетной записи A или B. Вот пример кода для получения queueUrl, который отлично работает, если мы получаем queueUrl учетной записи A, но не работает, если мы предоставляем очередь учетной записи 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 для очередей обеих учетных записей) к ролям IAM в учетной записи A для очереди обеих учетных записей. Пожалуйста, дайте мне знать, если я пропускаю какие-либо настройки. Спасибо.

1 Ответ

0 голосов
/ 20 марта 2020

Я создал политику в учетной записи A для SQS и добавил ресурс ARN (Для очереди в Учетная запись B ) arn: aws: sqs: Region: AccountID_B: QueueName Затем присоединен эта политика для роли и той же роли, которая прикреплена к экземпляру учетной записи EC2 A. Щелкните правой кнопкой мыши Очередь в учетной записи B, затем нажмите добавить разрешение . Появится всплывающее окно, обеспечивающее принцип & действие . Принцип - это aws accountId, который может получить доступ к этой очереди (Здесь мы можем указать AccountId AccountId ), а действие - это набор прав доступа (доступ к метке API) что требуется) для этой очереди.

...