为何指定单一State Machine ARN的IAM信任策略无法生效?
问题分析与解决:State Machine信任策略ArnEquals失效的原因
核心原因:Step Functions执行状态机时,发起
sts:AssumeRole请求的sts:SourceArn是状态机执行实例的ARN,格式为arn:aws:states:eu-west-1:123456789123:execution:resource-1:<随机执行ID>,而非你指定的状态机本身ARNarn:aws:states:eu-west-1:123456789123:stateMachine:resource-1。因此用ArnEquals直接匹配状态机ARN会完全不匹配,导致权限被拒绝。精准限制特定状态机的解决方案:
不用ArnEquals,改用ArnLike并指定更精确的通配符,只匹配该状态机下的所有执行实例:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "states.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "sts:SourceArn": "arn:aws:states:eu-west-1:123456789123:execution:resource-1:*" } } } ] }这样既能确保只有目标状态机的执行实例能扮演该角色,又能匹配到实际传递的
SourceArn。补充说明:官方文档里的类似示例,往往是基于状态机执行ARN的匹配逻辑,只是可能没明确说明
SourceArn是执行实例ARN而非状态机ARN,容易造成误解。
内容的提问来源于stack exchange,提问作者szymon
相关产品推荐
相关产品推荐

