SSM AutomationでEC2のIAM Role Policyを承認後に変更する
概要
SSM Automationの機能を使ってEC2のIAM Role Policyを変更する
その際に複数人からの承認があって初めて変更できるというフローにしたい
ユースケースとしては、AWS Systems Manager Session Managerを実行する権限を一時的につけたいなど
作業の流れ
- EC2インスタンスにIAM RoleをAttachする
- SSM AutomationでAttachするIAM Policyを作成する
- SSM AutomationのYAMLを書く
作業
EC2インスタンスにIAM RoleをAttachする
インスタンスの作り方は省略
IAM RoleとInstance Profileの作成
$ ROLE_AND_PROFILE_NAME=ssm-automation-test-role
$ ASSUME_ROLE_POLICY_DOCUMENT=$(cat << EOS
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
EOS
)
$ aws iam create-role \
--role-name "${ROLE_AND_PROFILE_NAME}" \
--assume-role-policy-document "${ASSUME_ROLE_POLICY_DOCUMENT}"
$ aws iam create-instance-profile \
--instance-profile-name "${ROLE_AND_PROFILE_NAME}"
あとは作ったインスタンスにAttach
SSM AutomationでAttachするIAM Policyを作成する
$ POLICY_NAME=ssm-automation-test-policy
$ POLICY_JSON=$(cat << EOS
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:DescribeInstances",
"Resource": "*"
}
]
}
EOS
)
$ aws iam create-policy \
--policy-name "${POLICY_NAME}" \
--policy-document "${POLICY_JSON}"
SSM AutomationのYAMLを書く
SSM Automationでやっていることの流れ
- 1人以上に承認もらえれば次のステップに行ける
- AWSのAPIを叩いてIAM PolicyをIAM RoleにAttachする
- 1人以上に承認もらえれば次のステップに行ける
- AWSのAPIを叩いてIAM PolicyをIAM RoleにDetachする
途中で承認もらえなかった場合はそのステップでAutomationは終了する
作業内容
$ NOTIFICATION_ARN=[SNSのTopic ARNなど]
$ AWS_ACCOUNT_ID=[自分のAWSのアカウントID]
$ APPROVERS=[承認者のIAM User ARNだったり、IAM GroupのARN]
$ DOCUMENT_CONTENT=$(cat << EOS
---
schemaVersion: "0.3"
description: "Automation Document Example YAML"
mainSteps:
- name: approve_attach
action: aws:approve
timeoutSeconds: 1000
onFailure: Abort
inputs:
NotificationArn: "${NOTIFICATION_ARN}"
Message: "EC2にec2:DescribeInstancesの権限を一時的につけたいです。"
MinRequiredApprovals: 1
Approvers:
- "${APPROVERS}"
- name: attach_policy
action: aws:executeAwsApi
inputs:
Service: iam
Api: AttachRolePolicy
RoleName: "ssm-automation-test"
PolicyArn: "arn:aws:iam::${AWS_ACCOUNT_ID}:policy/ssm-automation-test-policy"
- name: approve_detach
action: aws:approve
timeoutSeconds: 1000
onFailure: Abort
inputs:
NotificationArn: "${NOTIFICATION_ARN}"
Message: "EC2のec2:DescribeInstancesの権限を外したいです。"
MinRequiredApprovals: 1
Approvers:
- "${APPROVERS}"
- name: detach_policy
action: aws:executeAwsApi
onFailure: Continue
inputs:
Service: iam
Api: DetachRolePolicy
RoleName: "ssm-automation-test"
PolicyArn: "arn:aws:iam::${AWS_ACCOUNT_ID}:policy/ssm-automation-test-policy"
EOS
)
$ aws ssm create-document \
--content "${DOCUMENT_CONTENT}" \
--document-type "Automation" \
--name "attach-policy" \
--document-format "YAML"
動作確認
NOTIFICATION_ARNで設定した箇所にメールなり通知が届いているので内容を確認する
Approveすれば次のステップに進むし、Rejectすればそこで作業は止まる
IAM Roleの状態を見ながらステップを進めていくと良い