Документ SSM не использует роль для изменения тома

Я пытаюсь изменить существующий том на экземпляре EC2 с помощью SSM. Я прикрепил роль с политикой, которая позволяет изменять тома на инстансах EC2. Разрешение, которое я выбрал в политике, называется ModifyVolume. Когда я пытаюсь запустить свой скрипт, он выдает следующее сообщение:

Произошла ошибка (UnauthorizedOperation) при вызове операции ModifyVolume: у вас нет прав для выполнения этой операции.

Я уверен, что политика, которую я использую, дает мне это разрешение, поэтому мне интересно, почему она не работает?

Это мой документ 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, так что она вообще не применяет роль и просто вызывает сценарии в экземпляре? Не в этом ли причина? И если это так, что мне нужно сделать, чтобы это сработало?

1 ответ

Решение

Мне потребовалось некоторое время, чтобы осмыслить этот вопрос, но я думаю, что у меня есть ответ:

Документы AWS Systems Manager работают следующим образом:

У них есть действия (например,aws:runShellScript, aws:createStack, так далее.)

Эти действия используют либо роль службы SSM по умолчанию, либо роль, введенную черезassumeRole.

Это означает, что в вашем примере действие aws:runShellScriptвыполняется с использованием роли SSMUpdateVolume.

Однако отдельные команды в сценарии оболочки запускаются с использованием локальных разрешений на экземпляре EC2, то есть роли, прикрепленной к профилю экземпляра, которая не имеет необходимых разрешений.

Итак, понятно, что это не работает.

Чтобы добиться желаемого, вы могли бы - вместо выполнения команд оболочки - использовать aws:executeAwsApi действие для изменения громкости.

Обратите внимание: вы используете документ типа Command. Чтобы это работало, вам необходимо создать документ типа " Автоматизация". Для этого в консоли AWS Systems Manager Documents выберите " Создать автоматизацию" вместо " Создать команду или сеанс".

Окончательный документ может выглядеть примерно так:

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 }}'
Другие вопросы по тегам