amazon-web-services - 跨账户 SNS 在第二个账户订阅 Lambda
问题描述
我已使用以下 SNS 主题策略在 Lambda 中订阅此 SNS,帐号为 222222222222。我还使用类似的策略授予对我的 lambda 的访问权限,并将其添加到 Lambda 的执行角色中。
得到以下错误:
创建触发器时出错:用户:arn:aws:sts::222222222222:assumed-role/TSI_Base_FullAccess/AXXXXXXXX 无权执行:SNS:Subscribe on resource:arn:aws:sns:eu-west-1: 111111111111:Story-5555(服务:AmazonSNS;状态代码:403;错误代码:AuthorizationError;请求 ID:1321942c-25c4-52a1-bacb-c2e9bd641067)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1582008007178",
"Action": [
"sns:GetSubscriptionAttributes",
"sns:GetTopicAttributes",
"sns:ListSubscriptions",
"sns:ListSubscriptionsByTopic",
"sns:ListTagsForResource",
"sns:ListTopics",
"sns:Publish",
"sns:Subscribe"
],
"Effect": "Allow",
"Resource": "arn:aws:sns:eu-west-1:111111111111:Story-5555",
"Condition": {
"ArnEquals": {
"aws:PrincipalArn": "arn:aws:lambda:eu-west-1:222222222222:function:New_Cross_SNS"
}
}
}
]
}
解决方案
根据AWS 文档,您应该在条件之外指定原则。
所以你的政策应该类似于
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1582008007178",
"Action": [
"sns:GetSubscriptionAttributes",
"sns:GetTopicAttributes",
"sns:ListSubscriptions",
"sns:ListSubscriptionsByTopic",
"sns:ListTagsForResource",
"sns:ListTopics",
"sns:Publish",
"sns:Subscribe"
],
"Effect": "Allow",
"Resource": "arn:aws:sns:eu-west-1:111111111111:Story-5555",
"Principal": {
"AWS": ["222222222222"]
},
"Condition": {
"ArnEquals": {
"aws:PrincipalArn": [
"arn:aws:lambda:eu-west-1:222222222222:function:New_Cross_SNS",
"arn:aws:sts::222222222222:assumed-role:TSI_Base_FullAccess:AXXXXXXXX"
]
}
}
}
]
}
确保在策略的条件部分中指定哪个 ARN 的方法是从您的函数调用(并打印)get-caller-identity API。
推荐阅读
- c# - 在 Linq 中,在 Where 子句之后的 Single() 有用吗?
- python-3.x - 从一个单词中获取所有可能的 pos 标签
- javascript - redux中isPlainObject函数的实现
- datatable - 使用jquery从mysql数据库中获取数据到数据表中
- python - signal.spectrogram 返回太多 hz
- java - 可以将 Lombok @AllArgsConstructor 注释与 Cucumber 一起使用吗?
- go - 是否可以在锁定之前推迟解锁
- matplotlib - 条形图通过方面或轴限制子图内或子图之间的约束删除空间
- file - 在 TypeScript 中创建文件对象类型
- rust - 是否使用 main.rs 作为 lib 入口点unidiomatic?