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

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


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


コメント

このブログの人気の投稿

投稿時間:2021-06-17 22:08:45 RSSフィード2021-06-17 22:00 分まとめ(2089件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)