错误:提供的凭证无权为 EC2 Spot 实例创建服务相关角色

mcd*_*on0 8 amazon-ec2 amazon-web-services aws-cloudformation aws-cli

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

此处描述了所需的权限,但是当我尝试按照步骤创建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```
Run Code Online (Sandbox Code Playgroud)

小智 11

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

aws iam create-service-linked-role --aws-service-name spot.amazonaws.com
Run Code Online (Sandbox Code Playgroud)


Sco*_*ott 1

它通过控制台工作的原因是它附加了正确的 IAM 实例配置文件。你的SpotFleetRequestConfigData.

我也尝试创建现货车队请求,但使用 Terraform 时遇到了相同的错误。根据问题中的代码片段,我认为正确的语法是:

SpotFleetRequestConfigData:
  LaunchSpecifications:
    iamInstanceProfile:
      arn: arn:aws:iam:::instance-profile/instance-compute-full-access
Run Code Online (Sandbox Code Playgroud)

注意:您可能必须将帐户 ID 添加到 ARN,并且权限低于完全计算访问权限的角色也可能有效。