Документ 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 }}'