Amazon web services 错误:提供的凭据没有为EC2 Spot实例创建服务链接角色的权限

Amazon web services 错误:提供的凭据没有为EC2 Spot实例创建服务链接角色的权限,amazon-web-services,amazon-ec2,amazon-cloudformation,aws-cli,Amazon Web Services,Amazon Ec2,Amazon Cloudformation,Aws Cli,我在通过cloudformation创建spot车队请求时遇到错误。请求已经创建,但是当车队试图请求实例时,我得到了标题中提到的错误 中描述了所需的权限,但是,当我尝试按照步骤创建AWSServiceRoleForEC2SpotFleet角色时,我没有选择EC2-Spot Fleet的选项,只有EC2 Fleet。奇怪的是,当我创建CF堆栈时,它实际上为我创建了服务链接角色 我的用户具有管理员凭据,我使用aws-ec2-spot-fleet-tagging-role作为车队角色 据我所知,服务链

我在通过cloudformation创建spot车队请求时遇到错误。请求已经创建,但是当车队试图请求实例时,我得到了标题中提到的错误

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

我的用户具有管理员凭据,我使用aws-ec2-spot-fleet-tagging-role作为车队角色

据我所知,服务链接角色只需要存在,就可以工作,但我无法手动创建它。 我能够通过控制台成功创建车队,使用与我在模板中使用的值完全相同的值,并且我在那里也选择了相同的aws-ec2-spot-fleet-tagging-role

我还向我的用户提供了该文档中提到的IAM凭据,尽管它是admin,只是为了看看我是否需要通过权限,但据我所知,我只需要在启动规范中提供实例配置文件时才需要它,而我不是。这是我在模板中的资源定义:

SpotFleetRequestConfigData: 目标容量:1 iam车队角色:arn:aws:iam::73682036499:role/aws-ec2-spot-fleet-tagging-role 发射规格: -ImageId:“{resolve:ssm:TestImage4}}”参数存储了对AMI的引用 实例类型:t2.small 网络接口: -子网:!导入值自定义VPCSTACK-dmz-SUNBET-1 DeviceIndex:0 组: - !Ref EC2MCServerSecurityGroup 标签规格: - ResourceType:实例 标签: - 关键字:姓名 值:spotfleetserver 替换不健康状态:正确 类型:保持默认值```
您的AWS帐户可能已经足够旧,因此没有创建与服务链接的角色。发出具有管理员权限的以下命令,以创建具有适当信任的角色:

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

您的AWS帐户可能已经足够旧,因此没有创建与服务链接的角色。发出具有管理员权限的以下命令,以创建具有适当信任的角色:

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

我能够让它工作,尽管我仍然不完全清楚为什么。通过控制台创建Spot车队时,选择的默认角色是aws-ec2-Spot-Fleet-tagging-role。这是我在cloudformation模板中用于舰队资源定义的角色,但它会导致我提到的IAM错误。我首先尝试确保创建了所需的服务链接角色,如下所述:。但我在使用spot fleet标记角色时仍然会出错。只有在创建具有以下权限的新策略后,我才能使其成功完成实例请求:

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


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

我能够让它工作,但我仍然不完全清楚原因。通过控制台创建Spot车队时,选择的默认角色是aws-ec2-Spot-Fleet-tagging-role。这是我在cloudformation模板中用于舰队资源定义的角色,但它会导致我提到的IAM错误。我首先尝试确保创建了所需的服务链接角色,如下所述:。但我在使用spot fleet标记角色时仍然会出错。只有在创建具有以下权限的新策略后,我才能使其成功完成实例请求:

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


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

我确实尝试过,是的,我的用户有管理员权限,但我也只是尝试了根用户,我仍然得到相同的错误。当我创建堆栈时,我可以看到我的spot fleet在生成requ时正在创建AWSServiceRoleForRec2SpotFleet角色
举个例子。因此,它显然有创建角色的权限,但没有创建与spot服务链接的角色的权限。当我查看“选择用例”下的“创建角色”部分时,我没有看到选择EC2-Spot或Spot车队服务的选项,这是预期的吗?我尝试使用红线13运行负载测试,这有助于在AWS上创建Spot实例,但遇到了问题。您的cli命令有帮助!我确实试过了,是的,我的用户有管理员权限,但我也只是用root用户试过,我仍然得到相同的错误。当我创建堆栈时,我可以看到我的spot fleet在请求实例时正在创建AWSServiceRoleForEC2SpotFleet角色。因此,它显然有创建角色的权限,但没有创建与spot服务链接的角色的权限。当我查看“选择用例”下的“创建角色”部分时,我没有看到选择EC2-Spot或Spot车队服务的选项,这是预期的吗?我尝试使用红线13运行负载测试,这有助于在AWS上创建Spot实例,但遇到了问题。您的cli命令有帮助!