如何在S3存储桶策略中正确添加SSO用户(非IAM用户)?
在S3存储桶策略中授权SSO用户的正确配置方法
问题根源
你之前尝试的两种方法无效的原因如下:
- 临时会话ARN无法用于NotPrincipal:
arn:aws:sts::...:assumed-role/...是SSO用户登录后生成的临时会话ARN,属于动态身份,每次登录都会变化,无法通过静态策略匹配;且NotPrincipal仅支持IAM用户/角色这类持久身份实体的ARN,不支持临时会话ARN。 - aws:userId格式错误:SSO用户的
aws:userId格式为[角色唯一ID]:[会话名称],而非你使用的角色名称:用户名,所以条件匹配失败。
正确配置方案
方案1:授权整个SSO角色(适用于允许该角色下所有SSO用户访问)
找到SSO对应的IAM角色ARN(格式通常为arn:aws:iam::账号ID:role/aws-reserved/sso.amazonaws.com/SSO角色名称),将其加入NotPrincipal的AWS列表:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "NotPrincipal": { "AWS": [ "arn:aws:iam::035452602320:user/abc.dev", "arn:aws:iam::035452602320:user/lmn.dev", "arn:aws:iam::035452602320:user/pqr.dev", "arn:aws:iam::035452602320:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_Devops_New_610980ed099cb31f" ] }, "Action": "s3:*", "Resource": [ "arn:aws:s3:::abc", "arn:aws:s3:::abc/*" ] } ] }
方案2:授权单个SSO用户(精准匹配特定用户)
利用SSO自动为角色会话添加的标签(如userName、email),通过Condition限定仅该用户可绕过Deny策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "NotPrincipal": { "AWS": [ "arn:aws:iam::035452602320:user/abc.dev", "arn:aws:iam::035452602320:user/lmn.dev", "arn:aws:iam::035452602320:user/pqr.dev" ] }, "Action": "s3:*", "Resource": [ "arn:aws:s3:::abc", "arn:aws:s3:::abc/*" ], "Condition": { "StringNotEquals": { "aws:PrincipalTag:userName": "upasana.ghase" } } } ] }
验证方法
配置完成后,让目标SSO用户登录并尝试访问S3桶,同时可以通过AWS CloudTrail查看请求的principalArn和principalTags,确认策略匹配逻辑是否生效。
内容的提问来源于stack exchange,提问作者upasana
相关产品推荐
相关产品推荐

