如何跨AWS账户利用Cognito属性实现IAM角色细粒度资源访问?
跨账户Cognito用户细粒度资源访问实现方案
核心逻辑
要实现账户A的Cognito用户访问账户B的同名资源,必须完成双向权限配置:账户A的Cognito认证角色授予用户跨账户访问权限,账户B的目标资源通过策略允许账户A的特定用户(基于Cognito的sub标识)访问对应资源。
具体操作步骤
1. 配置账户A的Cognito认证角色权限
在账户A的Cognito已认证角色的IAM策略中,添加允许访问账户B日志组的规则,用${cognito-identity.amazonaws.com:sub}绑定用户唯一标识:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "logs:GetLogEvents", "logs:FilterLogEvents" ], "Resource": "arn:aws:logs:你的区域:账户BID:log-group:${cognito-identity.amazonaws.com:sub}:*" } ] }
替换你的区域和账户BID为实际值,Action可根据业务需求调整日志操作权限
2. 配置账户B的日志组资源策略
在账户B中,给目标日志组添加资源策略,同时通过标签匹配用户的sub标识:
- 先给账户B中名为
userX的日志组添加标签,键为sub,值为userX对应的Cognitosub字符串 - 然后添加如下资源策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::账户AID:role/账户A的Cognito认证角色名" }, "Action": [ "logs:DescribeLogGroups", "logs:GetLogEvents", "logs:FilterLogEvents" ], "Resource": "arn:aws:logs:你的区域:账户BID:log-group:*", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:sub": "${aws:ResourceTag/sub}" } } } ] }
替换账户AID、账户A的Cognito认证角色名、你的区域、账户BID为实际信息
3. 权限验证
让账户A的userX通过Cognito身份认证后,尝试访问账户B的对应日志组,确认权限正常生效。
无标签替代方案(适合少量用户)
如果不想用标签,也可以直接在账户B的资源策略中指定单个用户的sub值,灵活性稍差:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::账户AID:role/账户A的Cognito认证角色名" }, "Action": [ "logs:GetLogEvents" ], "Resource": "arn:aws:logs:你的区域:账户BID:log-group:userX:*", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:sub": "userX的实际sub值" } } } ] }
内容的提问来源于stack exchange,提问作者Julian Dm
相关产品推荐
相关产品推荐

