如何在EC2控制台显示策略限制实例创建的友好提示信息?
解决IAM策略触发后控制台显示加密错误的问题
我之前处理过类似的需求,AWS控制台默认抛出的加密授权错误确实很不友好。要让控制台直接展示人类可读的提示,核心是在你的IAM策略的Condition块里添加自定义描述信息——AWS会把这个描述包含在授权失败响应中,控制台就能解析并显示出来,不用再手动解密了。
具体修改步骤
找到你现有的Deny策略:
你的原始策略大概是类似这样(针对标签值的限制):{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "ForAllValues:StringNotEquals": { "aws:RequestTag/test1": ["your-required-value"], "aws:RequestTag/test2": ["your-required-value"] } } } ] }添加自定义描述到Condition块:
在Condition内部加入Description字段,写入你想让用户看到的提示内容。修改后的策略如下:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "ForAllValues:StringNotEquals": { "aws:RequestTag/test1": ["your-required-value"], "aws:RequestTag/test2": ["your-required-value"] }, "Description": "创建EC2实例必须添加test1和test2标签,且标签值需符合要求,请检查标签配置后重试。" } } ] }如果你的需求是只要存在test1和test2标签即可(不限制值),可以用
Null条件来判断标签是否存在,同样添加描述:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "Null": { "aws:RequestTag/test1": "true", "aws:RequestTag/test2": "true" }, "Description": "创建EC2实例时必须添加test1和test2标签,请在实例配置页面添加这两个标签后重试。" } } ] }
关键注意事项
Description必须放在Condition块的内部,不能放在Statement或Policy的顶层,否则不会生效。- 修改策略后,记得让测试用户重新登录AWS控制台(避免IAM缓存),再尝试创建未加标签的实例验证效果。
- 描述信息尽量简洁明确,直接告诉用户需要做什么操作来解决问题。
验证效果
修改完成后,当用户尝试创建不符合标签要求的EC2实例时,控制台会直接显示你自定义的提示文字,不再抛出那个加密的授权失败消息了。
内容的提问来源于stack exchange,提问作者sidnandan
相关产品推荐
相关产品推荐

