Amazon web services 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

我正在尝试使用SSM修改EC2实例上的现有卷。我附加了一个角色,其策略允许修改EC2实例上的卷。我在策略中选择的权限称为ModifyVolume。当我尝试运行脚本时,它会给我以下消息:

调用ModifyVolume操作时发生错误(UnauthorizedOperation):您无权执行此操作

我确信我使用的策略授予我这种许可,所以我想知道为什么它不起作用

这是我的SSM文档:

---
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系统中请给我经理文件控制台