发布到另一个 AWS 账户拥有的 SNS 主题时获取 AuthorizationErrorException

Getting AuthorizationErrorException while publish to a SNS topic that is owned by another AWS account

我想从我的 Aws 账户 (111222333) ec2 实例向另一个 AWS 账户 (444555666) 拥有的 SNS 主题发布消息,主题所有者授予我的 ec2 角色完全权限。在将消息发布到主题时,我收到 AuthorizationErrorException。

import boto3
import json

aws_region = 'us-east-1'
client = boto3.client('sns', region=aws_region)


message = {"foo": "bar"}

topic_arn = "arn:aws:sns:us-east-1:444555666:my_topic"

response = client.publish(
    TopicArn=topic_arn,
    Message=json.dumps({'default': json.dumps(message)}),
    MessageStructure='json'
)

botocore.errorfactory.AuthorizationErrorException:调用发布操作时发生错误(AuthorizationError):用户:arn:aws:sts::111222333:assumed-role/ecsec2role/i-0121fggsfdf56未被授权在资源上执行:SNS:Publish:arn:aws:sns:us-east-1:444555666:my_topic.

我是否需要提及将我的 ec2 实例用于 运行 我的脚本的任何角色?*

ec2 实例承担您通过实例配置文件附加的角色。 Boto3 默认使用这个角色。您可以在 ec2 控制台中查看附加的角色,或者从他们那里更改角色。

该角色必须是其他帐户内 sns 主题策略中允许语句的一部分!

而且在您这边,角色需要有明确的权限才能在 sns 上发布 (sns:publish)!