публикация SNS между учетными записями с использованием HTTPS Endpoint: как определить исходную учетную запись? - PullRequest
0 голосов
/ 14 октября 2019

Как работать с сообщениями, когда они пересылаются через другую учетную запись?

Я хочу, чтобы несколько учетных записей публиковали свои SNS-сообщения через одну тему SNS в центральной учетной записи в том же регионе. Подписка будет конечной точкой HTTPS. В исходной учетной записи у меня есть несколько служб (таких как: Cloudwatch Event, Systems Manager, ...) для публикации сообщений. Для дальнейшей обработки я хочу идентифицировать (предпочтительно по AccountId) исходную учетную запись AWS, которая создала сообщение.
Обычно сообщение SNS json выглядит следующим образом . На основании документации я не вижу, как выяснить, какая в конечном итоге другая учетная запись создала сообщение. У вас есть идея, как это будет работать, или у вас есть примеры?

Так как мне этого добиться?

Message from Account1 to \
                          SNS-Topic Account-Central -> HTTPS-Endpoint -> Parsing JSON Message (Message comes from Account1 ???)
Message from Account2 to /

1 Ответ

0 голосов
/ 05 ноября 2019

Мне удалось решить проблему, оценив сам атрибут sns Message. В моем конкретном случае я получил перенаправленные события Cloudwatch, которые я хотел привязать к исходной учетной записи. Я json-декодировал атрибут сообщения и разрешил учетную запись из атрибута account.

пример sns_data:

{
  "Type" : "Notification",
  "MessageId" : "b51e31b6-257b-5e63-bf40-678c64816bb6",
  "TopicArn" : "arn:aws:sns:us-east-1:12345678:mytopic",
  "Message" : "{\"version\":\"0\",\"id\":\"06498297-40cc-8bad-6b7d-20a1142a3162\",\"detail-type\":\"EC2 Instance State-change Notification\",\"source\":\"aws.ec2\",\"account\":\"987654321\",\"time\":\"2019-11-04T15:11:53Z\",\"region\":\"us-east-1\",\"resources\":[\"arn:aws:ec2:us-east-1:987654321:instance/i-XXXXXXXXXXXXXXXX\"],\"detail\":{\"instance-id\":\"i-XXXXXXXXXXXXXXXX\",\"state\":\"running\"}}",
  "Timestamp" : "2019-11-04T15:11:54.002Z",
  "SignatureVersion" : "1",
  "Signature" : "f9dLWFByoErZvtKOWi9f8qk+c2sHH1faltwEi8AeeC76j2kHGJiGbaPh5+XfnECtmRjICHv3shIho02f7lDEvuxrq2tVmL8Je9+eCZhbN1uv3TIxZFfMYIzMTvGEqVaVr2XclFJbqlbb1OpYkvCf64HI6+YHlzT2HFg7O7n3qii4iRQ1Lx8yR6ipneDoM4S5H91J1vZT9jczjXjOStDnApJiAsrULCSrTIUWSrGdd45wwn+Vf4waNhKPKHskodVYXVmKvpdRB1ZZn/dne0Q4y/fWhtyPCPhw0oGiGQax4BxoDgwf60zy8FAIAdWF0LNRM6ZvVaHZOdTsvoJEVQ5Ttg==",
  "SigningCertURL" : "https://sns.us-east-1.amazonaws.com/SimpleNotificationService-6aad65c2f9911b05cd53efda11f913f9.pem",
  "UnsubscribeURL" : "https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:12345678:mytopic:308e8a6f-0935-4f8b-b1fd-31484d7b0e8e"
}

Python3 Код для синтаксического анализа и разрешения учетной записи json:

print(json.loads(json.loads(sns_data)['Message'])['account'])
...