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


person Benny    schedule 17.07.2020    source источник
comment
Не уверен, связано ли это, но у вас неправильное количество фигурных скобок в: assumeRole: "{{AutomationAssumeRole}"   -  person John Rotenstein    schedule 17.07.2020
comment
Да это была опечатка, к сожалению ничего не изменила   -  person Benny    schedule 17.07.2020
comment
Не могли бы вы добавить политику в свой вопрос, чтобы мы могли воспроизвести ее?   -  person John Rotenstein    schedule 18.07.2020
comment
Я добавил политику и дополнительную информацию по моему делу   -  person Benny    schedule 19.07.2020
comment
Я собирался попытаться воспроизвести вашу ситуацию, но потом заметил, что assumeRole относится к параметру. Возможно, это не сработает, поскольку параметры определяются отдельно. Можете ли вы попробовать жестко закодировать ARN роли IAM в assumeRole (например, assumeRole: arn:aws:iam::accountnumber:role/SSMUpdateVolume и посмотреть, работает ли это?   -  person John Rotenstein    schedule 19.07.2020
comment
Я пробовал добавить параметр непосредственно в acceptRole, результат остался прежним. Если бы вы могли попытаться воспроизвести это и сказать мне, что вы думаете, это могло бы помочь   -  person Benny    schedule 19.07.2020
comment
@Benny, который на снимке экрана выглядит как политика, а не роль, можете ли вы пройти через docs.aws.amazon.com/systems-manager/latest/userguide/ и убедитесь, что у вас настроена роль службы, как в этих инструкциях?   -  person Chris Williams    schedule 20.07.2020
comment
@Benny, который на снимке экрана выглядит как политика, а не роль, можете ли вы пройти через docs.aws.amazon.com/systems-manager/latest/userguide/ и убедитесь, что у вас настроена роль службы, как в этих инструкциях?   -  person Chris Williams    schedule 20.07.2020
comment
Ах! @Benny - Я предполагал, что вы создаете роль IAM с именем arn:aws:iam::accountnumber:role/SSMUpdateVolume и назначили ей Modify Volume разрешения. Это верно?   -  person John Rotenstein    schedule 20.07.2020
comment
@JohnRotenstein да, это правильно, роль называется SSMUpdateVolume, и ей назначается политика с разрешением ModifyVolume в SSM, как сказано, это не работает. Вместо этого документ SSM использует роль самого экземпляра.   -  person Benny    schedule 20.07.2020
comment
Я попробую воспроизвести это в тестовой среде. Дай мне пару минут.   -  person Dennis Traub    schedule 20.07.2020
comment
Мне нужно воспроизвести ошибку. Хотя не знаю, почему это происходит. Я буду продолжать попытки.   -  person Dennis Traub    schedule 20.07.2020
comment
Думаю, я понимаю суть проблемы. Постараюсь выразить это в ответ.   -  person Dennis Traub    schedule 20.07.2020


Ответы (1)


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

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

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

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

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

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

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

Чтобы добиться желаемого, вместо выполнения команд оболочки можно использовать _ 6_, чтобы изменить том.

Обратите внимание: вы используете документ типа 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 }}'
person Dennis Traub    schedule 20.07.2020
comment
Я получаю эту ошибку, когда пытаюсь использовать этот код: InvalidDocumentContent: Неизвестное имя плагина: aws: executeAwsApi - person Benny; 20.07.2020
comment
Да, ты прав. aws:executeAwsApi используется в другой схеме. При этом мой первоначальный ответ сделал его намного более сложным, чем нужно. С помощью документа AWS SSSM Automation вы можете напрямую вызывать ec2:ModifyVolume API. Вам не нужно запускать скрипт в экземпляре EC2. Я собираюсь обновить свой ответ соответственно. - person Dennis Traub; 20.07.2020
comment
Выполнено. Надеюсь, теперь это поможет. Обратите внимание, что вы должны создать документ SSM другого типа. Находясь в консоли документов AWS Systems Manager, выберите Создать автоматизацию вместо Создать команду или сеанс. - person Dennis Traub; 20.07.2020
comment
Ммм, ну, я предпочел предыдущее решение вместе с рабочей командой aws: executeAwsApi .... фон в том, что я планировал выполнить некоторые операции сценария, которые, как я полагаю, недоступны при использовании только документа SSM ... Я знаю, что не упомянули об этом здесь, но изначально это был мой план ..., я дополню свой ответ дополнительными вещами, которые мне нужны, чтобы было ясно, почему для меня было бы более выгодно использовать здесь команды сценария - person Benny; 20.07.2020
comment
Пожалуйста, если у вас есть другой вопрос, примите его и напишите новый. Мы потратили много времени, пытаясь помочь вам, основываясь на вашем первоначальном вопросе, и, по крайней мере, я был бы признателен, чтобы это не было слишком подвижной целью. - person Dennis Traub; 20.07.2020
comment
При этом с помощью AWS SSM Automation Document вы также можете выполнять сценарии python или PowerShell с помощью модуля aws:executeScript. - person Dennis Traub; 20.07.2020
comment
Хорошо, я отмечу это как принятый ответ, поскольку он решает проблему, а остальное я попытаюсь решить самостоятельно с помощью aws: executeScript, большое спасибо - person Benny; 20.07.2020