1

我正在尝试使用 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 命令,所以它根本不应用角色而只是调用实例上的脚本?这可能是原因吗?如果是这种情况,我需要做什么才能完成这项工作?

4

1 回答 1

3

我花了一些时间来解决这个问题,但我想我已经得到了答案:

AWS Systems Manager 文档按以下方式工作:

他们有动作(例如aws:runShellScript,,aws:createStack等)

这些操作使用默认的SSM 服务角色或通过assumeRole.

这意味着在您的示例中,操作 aws:runShellScript是使用角色 SSMUpdateVolume执行的。

但是,shell 脚本中的各个命令是使用 EC2 实例上的本地权限运行的,即附加到实例配置文件的角色,它没有所需的权限。

所以,这不起作用是有道理的。

为了实现您想要的,您可以——而不是执行 shell 命令——使用aws:executeAwsApi操作来修改卷。

请注意:您使用的是 Command 类型的文档。为此,您需要创建一个Automation类型的文档。为此,在 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 }}'
于 2020-07-20T12:11:46.473 回答