【问题标题】:Ansible, EC2 and Instance ProfileAnsible、EC2 和实例配置文件
【发布时间】:2017-01-15 13:30:37
【问题描述】:

我正在尝试使用以下代码通过 ansible 创建:

– name: Create EC2 Instance(s)

ec2:
  region: “{{ vpc_region }}”
  instance_profile_name: “{{ instance_profile_name }}”
  group: “{{ ec2_security_group_name }}”
  keypair: “{{ ec2_key_name }}”
  …..

它仍然总是输出以下内容:

TASK [扫描仪:创建 EC2 实例] ************************************ ****
致命:[127.0.0.1]:失败! => {“changed”:false,“failed”:true,“msg”:“实例创建失败 => InvalidParameterValue:参数 iamInstanceProfile.name 的值(my-role-for-ansible)无效。 IAM 实例配置文件名称无效”}

虽然我认为我在 AWS 中为我​​的用户定义了正确的策略,如下所示:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt14844231360000",
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::11111111:role/my-role-for-ansible"
            ]
        }
    ]
}

上面有什么问题吗?

【问题讨论】:

  • 您的剧本是否在尝试启动实例之前立即创建了 IAM 角色?在这种情况下,您可能会陷入这种情况:“创建 IAM 角色后,权限可能需要几秒钟才能传播。如果您第一次尝试启动具有角色的实例失败,请等待几秒钟,然后再试一次。”
  • 是的,我等了它,但它没有帮助,这仍然失败。
  • IAM 实例配置文件名称与 IAM 角色略有不同。您将使用 aws ec2 create-instance-profile 创建实例配置文件,然后将您的角色(具有必要的 IAM 权限)添加到该实例配置文件。那里的InvalidParameterValue 错误通常表示a)命名的实例配置文件不存在,或者b)它存在,但不能假定配置文件指向的 IAM 角色。
  • 确实,这有助于通过替换实例配置文件而不是解决问题的角色
  • @Castaglia,奇怪的是我多年来一直在使用实例配置文件,现在却出现了这个错误:实例创建失败 => InvalidParameterValue: Value (arn:aws:iam::**** *:instance-profile/ansible-demo-role) 的参数 iamInstanceProfile.name 无效。许多人也抱怨比赛条件,但在我的情况下,我已经有了 3 天的配置文件,这只是在我升级我的 boto 版本以支持不同的 ansible 模块 github.com/hashicorp/terraform/issues/ 之后发生的。 15341.

标签: amazon-ec2 ansible


【解决方案1】:

这是因为您必须创建一个额外的 IAM 角色,一个实例配置文件。

您可以在启动时将 IAM 实例配置文件附加到 Amazon EC2 实例或之前启动的实例。如需更多信息,请参阅Instance Profiles

我通过关注the console instructions section of these AWS docs.解决了这个问题

关键部分是上述说明的第 9 步(上面链接):

在创建角色页面上,选择 AWS 服务,然后从选择 将使用此角色列表的服务,请选择 EC2。

一旦您将角色与特定的服务类型(在我的例子中为 EC2)相关联,那么一切正常。

【讨论】:

    【解决方案2】:

    在我的例子中,Packer 抛出了这个错误,这是因为不存在匹配的角色。

    曾经有一次 AWS 文档真的很有帮助:https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html

    【讨论】:

      【解决方案3】:
        RootInstanceProfile:
          Type: 'AWS::IAM::InstanceProfile'
          Properties:
            Path: /
            Roles:
              - !Ref RootRole  
      
        RootRole:
          Type: 'AWS::IAM::Role'
      

      ec2:

      IamInstanceProfile: !Ref RootInstanceProfile
      

      如果您使用 cloudformation 创建所有内容,则需要一个角色,但您不能直接引用该角色。您必须创建一个引用该角色的实例配置文件。然后在 ec2 属性中,您可以引用 IamInstanceProfile 属性中的实例配置文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-01
        • 1970-01-01
        • 2016-01-23
        • 1970-01-01
        • 2016-08-26
        相关资源
        最近更新 更多