CloudFormation中如何将已有IAM角色ARN关联到实例配置文件以创建EC2实例?
CloudFormation中如何将已有IAM角色ARN关联到实例配置文件以创建EC2实例?
我来帮你排查并解决这个问题!咱们一步步来分析:
第一个报错的原因
你第一次用ARN填写Roles属性时出现的错误,本质是IAM实例配置文件(InstanceProfile)的Roles字段只接受角色名称,不能直接填ARN。系统把你输入的ARN当成了角色名来校验,而ARN里的冒号、斜杠等字符不符合角色名的规则(只能包含字母、数字和+=,.@_-这些符号),所以直接报错了。
第二次栈卡住的原因
换成角色名后栈卡在“资源创建初始化”,大概率是你引用的已有IAM角色没有配置正确的信任策略。因为实例配置文件的作用是让EC2实例能够扮演这个角色,如果角色本身不信任EC2服务,CloudFormation在关联角色到实例配置文件时就会卡住,无法完成验证。
正确的解决步骤
保持使用角色名称填写
Roles字段
你的第二个模板里角色名的写法是对的,继续保留这个配置:Resources: MyNewEC2Instance: Type: AWS::EC2::Instance Properties: ImageId: ami-0fcbc9ed97efe271e InstanceType: t2.micro SubnetId: subnet-fc2df495 KeyName: sant-test IamInstanceProfile: !Ref Ec2InstanceProfile Ec2InstanceProfile: Type: AWS::IAM::InstanceProfile Properties: Path: "/" Roles: - "xxxxx" # 这里填已有角色的名称,不要用ARN检查并更新已有角色的信任策略
登录AWS控制台,找到管理员给你的那个xxxxx角色,查看它的信任策略,确保包含允许EC2服务扮演该角色的规则。正确的信任策略示例如下:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }如果原来的信任策略没有这条规则,添加之后再重新执行CloudFormation栈,应该就能正常创建了。
额外注意点
- 确保你使用的AWS账户有权限将这个已有角色关联到新创建的实例配置文件上(管理员应该已经给你开了对应权限,但如果还是有问题可以找管理员确认)。
- 角色和实例配置文件必须在同一个AWS账户下,跨账户的话需要额外配置角色信任关系,但你的场景里是同账户的已有角色,所以不用考虑这个。
备注:内容来源于stack exchange,提问作者Santhosh
相关产品推荐
相关产品推荐

