【问题标题】:Error: The provided credentials do not have permission to create the service-linked role for EC2 Spot Instances错误:提供的凭证无权为 EC2 Spot 实例创建服务相关角色
【发布时间】:2021-01-16 01:44:31
【问题描述】:

我在通过 cloudformation 创建现场队列请求时遇到错误。请求已创建,但当队列尝试请求实例时,我收到标题中提到的错误。

here 中描述了所需的权限,但是当我尝试按照步骤创建AWSServiceRoleForEC2SpotFleet 角色时,我没有选择“EC2 - Spot Fleet”的选项,只有 EC2 Fleet。奇怪的是,当我创建 CF 堆栈时,它实际上确实为我创建了服务相关角色。

我的用户拥有管理员凭据,并且我使用“aws-ec2-spot-fleet-tagging-role”作为队列角色。

据我了解,服务相关角色只需要存在才能使其正常工作,但我无法手动创建它。 我能够通过控制台成功创建队列,使用与模板中使用的值完全相同的值,并且我在那里也选择了相同的“aws-ec2-spot-fleet-tagging-role”。

我还向我的用户提供了该文档中提到的 IAM 凭据,即使它是管理员,只是为了查看我是否需要通过权限,但据我所知,我只有在我提供实例配置文件时才真正需要它发射规范,我不是。这是我在模板中的资源定义:

     SpotFleetRequestConfigData: 
        TargetCapacity: 1
        IamFleetRole:  arn:aws:iam::73682036499:role/aws-ec2-spot-fleet-tagging-role
        LaunchSpecifications: 
          - ImageId: '{{resolve:ssm:TestImage:4}}' #param stored reference to AMI
            InstanceType: t2.small
            NetworkInterfaces:
              - SubnetId: !ImportValue CustomVPCStack-dmz-subnet-1
                DeviceIndex: 0
                Groups:
                  - !Ref EC2MCServerSecurityGroup
            TagSpecifications:
              - 
                ResourceType: instance
                Tags: 
                  - 
                    Key: Name
                    Value: spotfleetserver
        ReplaceUnhealthyInstances: true
        Type: maintain #default```

【问题讨论】:

    标签: amazon-web-services amazon-ec2 amazon-cloudformation aws-cli


    【解决方案1】:

    我能够让它工作,但我仍然不完全清楚为什么。当我通过控制台创建 Spot 队列时,选择的默认角色是“aws-ec2-spot-fleet-tagging-role”。这是我在 cloudformation 模板中用于队列资源定义的角色,但它会导致我提到的 IAM 错误。我首先尝试确保创建了我需要的服务相关角色,如下所述:https://docs.aws.amazon.com/batch/latest/userguide/spot_fleet_IAM_role.html。但是我在使用现场车队标记角色时仍然遇到错误。在创建具有以下权限的新策略后,我只能让它成功完成实例请求:

    "ec2:DescribeImages",
    "ec2:TerminateInstances",
    "ec2:RequestSpotInstances",
    "ec2:CreateTags",
    "ec2:RunInstances",
    "ec2:DescribeSubnets",
    "ec2:DescribeInstanceStatus"
    

    "iam:CreateServiceLinkedRole",
    "iam:ListRoles",
    "iam:ListInstanceProfiles"
    

    我之前使用的标记角色只有 ec2 的第一组权限,而不是 IAM 权限。如果有人有更好的答案,我会接受,因为正如我所说,仍然不清楚为什么当我在控制台中使用标记角色时它会起作用,但通过 cloudformation 会导致 IAM 错误。当我创建堆栈时,我没有指定任何 IAM 权限,因此它应该使用与我的用户(管理员用户)相同的权限。

    【讨论】:

      【解决方案2】:

      您的 AWS 账户可能已经足够老,以至于它没有创建服务相关角色。使用管理员权限发出以下命令以创建具有适当信任的角色:

      aws iam create-service-linked-role --aws-service-name spot.amazonaws.com
      

      【讨论】:

      • 我确实试过了,是的,我的用户有管理员权限,但我也只是用 root 用户尝试过,我仍然得到同样的错误。当我创建堆栈时,我可以看到我的 Spot 队列在发出实例请求时正在创建“AWSServiceRoleForEC2SpotFleet”角色。所以它显然有创建角色的权限,但没有现货服务相关角色。当我查看选择用例下的创建角色部分时,我没有看到选择 EC2 - Spot 或 Spot Fleet 服务的选项,这是预期的吗?
      • 我尝试使用 RedLine13 运行负载测试(这有助于在 AWS 上创建现场实例)并遇到了问题。您的 cli 命令有帮助!
      猜你喜欢
      • 2018-07-07
      • 2023-03-20
      • 2018-07-31
      • 2019-05-22
      • 1970-01-01
      • 2016-12-07
      • 1970-01-01
      • 2018-07-12
      • 1970-01-01
      相关资源
      最近更新 更多