SSM文档不使用role修改volume

SSM document does not use role to modify volume

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

An error occurred (UnauthorizedOperation) when calling the ModifyVolume operation: You are not authorized to perform this operation.

我确定我使用的策略授予了我此权限,所以我想知道为什么它不起作用?

这是我的 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:runShellScriptaws:createStack 等)

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

注入的角色

这意味着在您的示例中 action aws:runShellScript 是使用 role SSMUpdateVolume.

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

所以,这行不通是有道理的。

要实现您想要的效果,您可以使用 aws:executeAwsApi 操作来修改音量,而不是执行 shell 命令。

请注意:您正在使用命令类型的文档。为此,您需要创建 Automation 类型的文档。为此,在 AWS Systems Manager 文档控制台中,请选择 Create automation 而不是 Create command or session.

最终文档可能类似于以下内容:

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 }}'