如何创建AWS Policy限制用户仅操作指定Amplify项目相关资源?
解决方案:限制用户仅操作指定Amplify项目资源
报错原因
你写的Policy里,ARN使用了*stringname*这种中间通配符的写法,不符合AWS IAM的资源ARN规则——AWS仅允许在ARN的末尾使用*通配符,或在服务允许的特定位置使用,不能在ARN中间随意插入正则风格的*。
可行方案
方案1:精准匹配Amplify项目ARN格式
Amplify资源有固定的ARN结构,先找到你的Amplify项目的App ID(可在Amplify控制台项目设置中查看),然后编写Policy匹配该App下的所有资源:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "amplify:*", "Resource": [ "arn:aws:amplify:*:*:apps/<你的Amplify App ID>", "arn:aws:amplify:*:*:apps/<你的Amplify App ID>/*" ] }, // 若需操作Amplify关联的其他资源(如S3存储桶、CloudFront分发),添加对应规则 { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "cloudfront:UpdateDistribution" ], "Resource": [ "arn:aws:s3:::<你的Amplify存储桶名>*", "arn:aws:cloudfront::*:distribution/<关联的CloudFront ID>" ] } ] }
方案2:使用IAM条件键限制操作范围
利用Amplify专属的amplify:AppId条件键,限制所有Amplify操作仅针对指定项目,同时可扩展其他服务的条件匹配:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "amplify:*", "Resource": "*", "Condition": { "StringEquals": { "amplify:AppId": "<你的Amplify App ID>" } } }, // 匹配包含特定字符串的S3存储桶 { "Effect": "Allow", "Action": "s3:*", "Resource": "*", "Condition": { "StringLike": { "s3:bucket": "*<项目标识字符串>*" } } } ] }
方案3:合规使用通配符匹配资源
如果必须通过特定字符串匹配资源,需遵循AWS ARN的通配符规则:仅在ARN末尾使用*,或在服务允许的分段中使用。例如,若资源ARN的后缀包含你的项目字符串,可写成:
arn:aws:*:*:*:*<项目字符串>*
注意:不同AWS服务的ARN结构不同,需对应调整通配符位置,确保符合该服务的ARN格式要求。
额外建议
遵循IAM最小权限原则,尽量避免使用Action: "*",而是明确指定用户需要的具体操作(如amplify:UpdateEnvironment、amplify:CreateBranch),提升安全性。
内容的提问来源于stack exchange,提问作者mwcwge23
相关产品推荐
相关产品推荐

