Доступ к SQS между аккаунтами с ролями IAM

Я использую экземпляр EC2 в учетной записи A и имею очереди SQS в учетной записи A и B. Мое приложение работает на экземпляре EC2 учетной записи A. Слушатель сообщений получает queueUrl и опрашивает сообщения из очередей, которые могут находиться в учетной записи A или B. Вот пример кода для получения queueUrl, который отлично работает, если мы получаем queueUrl учетной записи A, но не работает, если мы предоставляем очередь sqs учетной записи B в качестве входного параметра:

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 для очереди обеих учетных записей. Пожалуйста, дайте мне знать, если мне не хватает каких-либо настроек. Спасибо.


person RCS    schedule 20.03.2020    source источник
comment
Вы добавили политику Amazon SQS в очередь SQS в учетной записи B? См .: Основные примеры Amazon Политики SQS - Amazon Simple Queue Service По умолчанию учетная запись A не может предоставлять разрешения учетной записи B (в противном случае вы можете получить доступ к учетным записям других людей!). Однако Amazon SQS может добавить политику в конкретную очередь, которая разрешает доступ из другой учетной записи (во многом аналогично политике корзины Amazon S3).   -  person John Rotenstein    schedule 20.03.2020


Ответы (1)


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

person RCS    schedule 20.03.2020