配置Cognito凭证访问S3桶遇公开警告,求排查指导
解决S3桶“您的桶是公开的”警告问题(Cognito凭证访问场景)
嘿,作为AWS新手遇到这个警告确实容易困惑,我来帮你一步步排查问题:
可能的原因及排查步骤
1. 检查桶的ACL是否设置了公开权限
AWS的公开警告会同时检查桶策略和访问控制列表(ACL),哪怕你的桶策略是安全的,如果ACL不小心给了公共权限,也会触发警告:
- 登录S3控制台,找到
bucketName12345桶,进入「权限」标签 - 查看「访问控制列表(ACL)」部分,确保没有给「Everyone」(任何人)或「Authenticated Users」(所有AWS认证用户,不是你的Cognito用户)添加读/写权限。如果有,立即移除这些条目。
2. 检查桶的「阻止公共访问」设置
有时候这个设置的开关会影响AWS对桶安全性的判断:
- 在桶的「权限」标签下,找到「阻止公共访问(桶级别)」
- 建议开启「阻止所有公共访问」,但注意:这个设置不会阻止通过Cognito凭证的合法访问(因为Cognito用户属于AWS认证身份),只会拦截真正的公开匿名访问。开启后再刷新警告,看是否消失。
3. 优化桶策略的权限范围(降低误报风险)
你的当前策略允许所有Cognito身份池的用户访问这个桶,这可能被AWS的安全检测判定为“潜在公开风险”。你可以通过添加身份池ID的限制来缩小权限范围,让策略更安全:
修改后的策略如下(替换为你的目标Cognito身份池ID):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::bucketName12345", "Condition": { "StringLike": { "s3:prefix": "cognito/angularApplicationName/" }, "StringEquals": { "cognito-identity.amazonaws.com:aud": "us-east-1:xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" } } }, { "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::bucketName12345/cognito/angularApplicationName/${cognito-identity.amazonaws.com:sub}", "arn:aws:s3:::bucketName12345/cognito/angularApplicationName/${cognito-identity.amazonaws.com:sub}/*" ], "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "us-east-1:xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" } } } ] }
这里添加了cognito-identity.amazonaws.com:aud条件,指定只有你的目标Cognito身份池的用户才能访问,大幅降低权限范围。
4. AWS安全检测的误报
如果以上步骤都检查过,确认没有公开权限,那可能是AWS的自动检测误判了Cognito联邦身份的策略。你的策略实际上是安全的:
- 只有持有合法Cognito凭证的用户才能访问
- 每个用户只能操作自己
sub路径下的资源,完全隔离
这种情况下,你可以忽略这个警告,或者通过提交支持工单让AWS确认。
内容的提问来源于stack exchange,提问作者Aiguo
相关产品推荐
相关产品推荐

