1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SSM AutomationでEC2のIAM Role Policyを承認後に変更する

Last updated at Posted at 2019-01-17

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. 1人以上に承認もらえれば次のステップに行ける
  2. AWSのAPIを叩いてIAM PolicyをIAM RoleにAttachする
  3. 1人以上に承認もらえれば次のステップに行ける
  4. 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の状態を見ながらステップを進めていくと良い

メールの場合の内容

mail.png

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?