AWS Cross Account SNS Публикация

У нас есть два счета 111111111111 и 222222222222.

Требование - учетная запись 111111111111 будет ежедневно создавать моментальный снимок RDS. После создания снимка мы хотим, чтобы учетная запись 111111111111 была опубликована в теме SNS, созданной в учетной записи 222222222222. Как только учетная запись 222222222222 получает уведомление, она запускает функцию Lambda.

Я прикрепил следующую политику к теме, созданной в учетной записи 222222222222

     "Sid":"RestoreRDSEng_topic_publish",
     "Effect":"Allow",
     "Principal":{
        "AWS":"111111111111"
     },
     "Action":"sns:Publish",
     "Resource":"arn:aws:sns:us-east-1:222222222222:RestoreRDSEng",
     "Condition":{
        "StringEquals":{
           "AWS:SourceAccount":"222222222222"
        },

     }
  } 

Я получаю следующую ошибку, когда учетная запись 111111111111 пытается опубликовать на 222222222222

* "message": "AuthorizationError: Пользователь: arn: aws: sts:: ************ Предполагаемая роль /tf-rds_eventhandler/tf-rds_eventhandler не авторизован для выполнения: SNS: Опубликовать в ресурс: arn:aws:sns:us-east-1:xxxxxxxxxxxx:RestoreRDSEng\n\tstatus код: 403, идентификатор запроса: 098f4647-c9ad-51fe-9bc3-17b45deef60e"*

Вопросы:

  1. Что-то не так в этом подходе?

  2. Должен ли я создать роль в учетной записи 222222222222 с доверенным доступом к 111111111111?

  3. Любые другие предложения будут оценены.

3 ответа

Это очень выполнимо и требует всего 2 части.

Во-первых, тема SNS, получающая сообщения (учетная запись 2222-2222-2222), должна иметь политику, разрешающую «sns:Publish» из другой учетной записи (1111-1111-1111).

      {
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111111111111:root"
      },
      "Action": "sns:Publish",
      "Resource": "arn:aws:sns:us-east-1:222222222222:RestoreRDSEng"
    }
  ]
}

Во-вторых, какую бы роль вы ни использовали в 1111-1111-1111 для публикации, у нее должна быть политика, разрешающая «sns:Publish» по желаемой теме. Это тот случай, когда я обычно нормально использую*ресурс, но вы также можете ограничить его ARN темы в другой учетной записи.

      {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "sns:Publish",
            "Effect": "Allow",
            "Resource": "*",
            "Sid": ""
        }
    ]
}

Должен быть:

    {
      "Sid": "lambda-access",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111111111111:root"
      },
      "Action": [
        "SNS:Publish"
      ],
      "Resource": "arn:aws:sns:us-east-1:222222222222:RestoreRDSEng"
    }

В Principalдолжна быть службой или ролью в учетной записи 11111... которую вы хотите выполнить по публикации в теме SNS. Например:

 "Principal": {
     "Service": "cloudtrail.amazonaws.com"
   }
Другие вопросы по тегам