Amazon web services SSM文档不使用角色修改卷
我正在尝试使用SSM修改EC2实例上的现有卷。我附加了一个角色,其策略允许修改EC2实例上的卷。我在策略中选择的权限称为ModifyVolume。当我尝试运行脚本时,它会给我以下消息: 调用ModifyVolume操作时发生错误(UnauthorizedOperation):您无权执行此操作 我确信我使用的策略授予我这种许可,所以我想知道为什么它不起作用 这是我的SSM文档:Amazon web services SSM文档不使用角色修改卷,amazon-web-services,amazon-ec2,amazon-ebs,aws-systems-manager,Amazon Web Services,Amazon Ec2,Amazon Ebs,Aws Systems Manager,我正在尝试使用SSM修改EC2实例上的现有卷。我附加了一个角色,其策略允许修改EC2实例上的卷。我在策略中选择的权限称为ModifyVolume。当我尝试运行脚本时,它会给我以下消息: 调用ModifyVolume操作时发生错误(UnauthorizedOperation):您无权执行此操作 我确信我使用的策略授予我这种许可,所以我想知道为什么它不起作用 这是我的SSM文档: --- schemaVersion: "2.2" assumeRole: "{{Autom
---
schemaVersion: "2.2"
assumeRole: "{{AutomationAssumeRole}}"
description: "Resizes the specified EBS volume to the target size"
parameters:
AutomationAssumeRole:
type: "String"
description: "The ARN of the role that allows Automation to perform the actions on your behalf."
default: "arn:aws:iam::accountnumber:role/SSMUpdateVolume"
VolumeId:
type: "String"
description: "(Required) EBS volume ID"
Size:
type: "String"
description: "(Required) Target size for the selected volume in GB"
mainSteps:
- action: "aws:runShellScript"
name: "ModifyVolumeSize"
inputs:
runCommand:
- "export AWS_DEFAULT_REGION=eu-central-1"
- "aws ec2 modify-volume --size {{Size}} --volume-id {{VolumeId}}"
以下是我需要的角色:
我注意到,当我将权限直接分配给分配给实例本身的角色时,它会起作用。但是,我只想在使用SSM文档时暂时允许此权限。因此,这意味着SSM文档不应用此权限,而是在缺少此ModifyVolume权限的实例本身上使用此权限。我怎样才能解决这个问题
我假设这可能是因为我使用的是aws:runShellScript命令,所以它根本不应用角色,只是在实例上调用脚本?这可能是原因吗?如果是这样的话,我需要做些什么才能使这项工作成功呢?我花了一些时间来思考这个问题,但我想我已经得到了一个答案: AWS Systems Manager文档的工作方式如下: 它们具有操作(例如
aws:runShellScript
,aws:createStack
等)
这些操作使用默认的SSM服务角色,或通过assumeRole
注入的角色
这意味着在您的示例中,操作aws:runShellScript
是使用角色执行的
但是,shell脚本中的各个命令是使用EC2实例上的本地权限运行的,即附加到实例配置文件的角色,它没有所需的权限
所以,这不起作用是有道理的
要实现您想要的,您可以使用操作来修改卷,而不是执行shell命令
请注意:您正在使用Command类型的文档。要使其工作,您需要创建类型为的文档。为此,在AWS Systems Manager文档控制台中,请选择创建自动化,而不是创建命令或会话
最终文件可能类似于以下内容:
description: Resizes the specified EBS volume to the target size
schemaVersion: '0.3'
assumeRole: '{{ AutomationAssumeRole }}'
parameters:
AutomationAssumeRole:
type: String
default: 'arn:aws:iam::accountnumber:role/SSMUpdateVolume'
description: The ARN of the role that allows Automation to perform the actions on your behalf.
VolumeId:
type: String
description: (Required) EBS volume ID
Size:
type: String
description: (Required) Target size for the selected volume in GB
mainSteps:
- name: ModifyVolumeSize
action: 'aws:executeAwsApi'
inputs:
Service: ec2
Api: ModifyVolume
Size: '{{ Size }}'
VolumeId: '{{ VolumeId }}'
我花了一些时间来思考这个问题,但我想我已经找到了答案: AWS Systems Manager文档的工作方式如下: 它们具有操作(例如
aws:runShellScript
,aws:createStack
等)
这些操作使用默认的SSM服务角色,或通过assumeRole
注入的角色
这意味着在您的示例中,操作aws:runShellScript
是使用角色执行的
但是,shell脚本中的各个命令是使用EC2实例上的本地权限运行的,即附加到实例配置文件的角色,它没有所需的权限
所以,这不起作用是有道理的
要实现您想要的,您可以使用操作来修改卷,而不是执行shell命令
请注意:您正在使用Command类型的文档。要使其工作,您需要创建类型为的文档。为此,在AWS Systems Manager文档控制台中,请选择创建自动化,而不是创建命令或会话
最终文件可能类似于以下内容:
description: Resizes the specified EBS volume to the target size
schemaVersion: '0.3'
assumeRole: '{{ AutomationAssumeRole }}'
parameters:
AutomationAssumeRole:
type: String
default: 'arn:aws:iam::accountnumber:role/SSMUpdateVolume'
description: The ARN of the role that allows Automation to perform the actions on your behalf.
VolumeId:
type: String
description: (Required) EBS volume ID
Size:
type: String
description: (Required) Target size for the selected volume in GB
mainSteps:
- name: ModifyVolumeSize
action: 'aws:executeAwsApi'
inputs:
Service: ec2
Api: ModifyVolume
Size: '{{ Size }}'
VolumeId: '{{ VolumeId }}'
不确定它是否相关,但在:
assumeRole:{{AutomationAssumeRole}中有不匹配的大括号数
是的,这是一个输入错误,不幸的是它没有改变任何事情。您可以将策略添加到您的问题中,以便我们可以尝试复制吗?我添加了策略,并添加了一些关于我的案例的附加信息。我正要尝试复制您的情况,但我注意到assumeRole
引用的是一个参数。它可能是pos可能这不起作用,因为参数是单独定义的。您能否尝试在assumeRole
中对IAM角色的ARN进行编码(例如assumeRole:ARN:aws:IAM::accountnumber:Role/SSMUpdateVolume
并查看其是否起作用?不确定是否相关,但在:assumeRole:{{automationasumerole}”
是的,这是一个输入错误,不幸的是它没有改变任何事情。您可以将策略添加到您的问题中,以便我们可以尝试复制吗?我添加了策略,并添加了一些关于我的案例的附加信息。我正要尝试复制您的情况,但我注意到assumeRole
引用的是一个参数。它可能是pos可能这不起作用,因为参数是单独定义的。您能否尝试在assumeRole
(例如assumeRole:arn:aws:iam::accountnumber:role/SSMUpdateVolume
并查看是否有效?当我尝试使用此代码时,会出现此错误:InvalidDocumentContent:Unknown插件名称:aws:executeAwsApi是的,你说得对。aws:executeAwsApi
在不同的模式中使用。话虽如此,我最初的答案让它更像c。)比它需要的简单。使用AWS SSSM Automation DComent,您可以直接调用ec2:ModifyVolume
API。您不需要在ec2实例中运行脚本。我将相应地更新我的答案。完成。我希望这现在能有所帮助。请注意,您必须创建不同类型的SSM文档。在AWS系统中请给我经理文件控制台