Skip to content

AWS Systems Manager Change Managerによる 変更管理と本番アクセス統制 ⑤テンプレート作成編


  1. Change Manager/Automation/Documentの関係
  2. Documentを作成する
  3. テンプレートを作成する
  4. まとめ

こんにちは、クラウドセキュリティアーキテクトの大島です。

7編にわたって、「AWS Systems Manager Change Managerによる 変更管理と本番アクセス統制」について紹介しています。

前回の「④Change Managerセットアップ編」では、Change Managerのセットアップ方法と、本番アクセス統制のために追加で必要な設定やハマりやすいポイントを紹介しました。今回の「⑤テンプレート作成編」では、本番アクセス統制を実現するために、Change Managerに必要なテンプレートの作成と登録方法を紹介します。

AWS01

 

Change Manager/Automation/Documentの関係

Change Manager(変更マネージャー)は内部的にAutomation(自動化)を使っており、AutomationはDocument(ドキュメント)で定義されたタスクを実行しています。
つまり、まずDocumentでタスクを定義し、次にChange ManagerでDocumentを指定し、起票と承認がされるとAutomationを通してタスクを実行するという流れです。

AWS02

 

 

Documentを作成する

ドキュメントから、「Create document」→「Automation」を選択します。

 

AWS03

  

グループ参加用のDocument作成(ビルダーで作成)

任意の名前を付けて、分かりやすい説明を記載します。「ロールを想定」に「AWS-QuickSetup-SSMChangeMgr-<ジョブ機能名>AdminRole」を指定します。

AWS04

 入力パラメータを入力します。ここでは、ユーザ名/グループ名/TTLをタスクに渡したいので、それが分かるような名前を付けます。

AWS05

 実行するタスクを設定していきます。

ステップ1でユーザをグループに追加します。任意のステップ名を付け、アクションタイプを「AWS APIのアクションを呼び出して実行する」を選択します。

Serviceはiam、APIはAddUserToGroupを入力し、APIに渡すパラメータとして前述の入力パラメータからGroupNameとUserNameを入力します。

AWS06

 ステップ2でユーザにタグを付与します。

任意のステップ名を付け、アクションタイプを「AWS APIのアクションを呼び出して実行する」を選択します。Serviceはiam、APIはTagUserを入力し、APIに渡すパラメータとして前述の入力パラメータからUserNameとGroupNameを入力します。

AWS07

 ドキュメントが作成されました。

AWS08

ドキュメントはyaml形式で管理されます。先ほどビルダーで作成したものは、以下のようになります。

 

  1. description: Add User To Group and Tag User
  2. schemaVersion: '0.3'
  3. assumeRole: 'arn:aws:iam::<accountID>:role/AWS-QuickSetup-SSMChangeMgr-MyAWSAdminAdminRole'
  4. parameters:
  5.   UserName:
  6.     type: String
  7.   GroupName:
  8.     type: String
  9.   TTL:
  10.     type: String
  11. mainSteps:
  12.   - name: AddUserToGroup
  13.     action: aws:executeAwsApi
  14.     inputs:
  15.       Service: iam
  16.       Api:  AddUserToGroup
  17.       GroupName: ""
  18.       UserName: ""
  19.   - name: AddTag
  20.     action: 'aws:executeAwsApi'
  21.     inputs:
  22.       Service: iam
  23.       Api: TagUser
  24.       UserName: ''
  25.       Tags:
  26.         - Key: ''
  27.           Value: ''

 

グループ離脱用のDocument作成(エディタで作成)

今度はエディタで作成してみます。ドキュメント作成画面からエディタを選択し、「編集」を押下します。

AWS09

グループ参加用に作成したドキュメントのyamlを流用し、以下のようにします。 

 

  1. description: Remove User From Group and Untag User
  2. schemaVersion: '0.3'
  3. assumeRole: 'arn:aws:iam::<accountID>:role/AWS-QuickSetup-SSMChangeMgr-MyAWSAdminAdminRole'
  4. parameters:
  5.   UserName:
  6.     type: String
  7.   GroupName:
  8.     type: String
  9. mainSteps:
  10.   - name: RemoveUserFromGroup
  11.     action: aws:executeAwsApi
  12.     inputs:
  13.       Service: iam
  14.       Api:  RemoveUserFromGroup
  15.       GroupName: ""
  16.       UserName: ""
  17.   - name: RemoveTag
  18.     action: 'aws:executeAwsApi'
  19.     inputs:
  20.       Service: iam
  21.       Api: UntagUser
  22.       UserName: ''
  23.       TagKeys:
  24.         - ''

 

これをエディタに張り付けて作成します。

AWS10 

 ドキュメントが作成されました。

AWS11

 

今回は、想定ロールに「AWS-QuickSetup-SSMChangeMgr-<ジョブ機能名>AdminRole」を入力しました。これにより、Change Managerでドキュメント実行時のデフォルトのロールを設定することができます。

また、デフォルトのロールを設定しない場合は、{{AutomationAssumeRole}}と指定し(※CMSの仕様上、波括弧=curly bracketsを全角表示しています。ご了承ください)、入力パラメータに「AutomationAssumeRole」を指定することも可能です。

ドキュメントの想定ロールが決まっている場合は、ユーザがドキュメント作成時に明示的に選択する手間を省くために、デフォルトのロールを設定するとよいでしょう。

この想定ロールを設定していない場合、Change Managerでリクエストを作成する際に、使用するロールを選択することができずエラーになるので注意が必要です。

840035d7-efa3-4bed-84a4-0731184d1504

AWS12

.

テンプレートを作成する

ここでは、先ほど作成したドキュメントを使って、Change Managerのテンプレートを作成していきます。

 

グループ参加用のテンプレート作成(ビルダーで作成)

Change Managerの画面から、「テンプレートを作成」を押下します。

AWS13

任意の名前を付け、分かりやすい説明を入力します。
ランブックは作成済のグループ参加用ドキュメントを選択します。

AWS14

承認者はIAMユーザ/グループ/ロールから選択できますが、ここではグループを選択します。このグループは、変更を承認するユーザ(例えばチームリーダ)から構成されるグループを選択するとよいでしょう。

承認通知用のSNSトピックは、リクエストが起票されたときの通知先です。先ほどのグループに含まれるユーザ全員を宛先としたSNSトピックもよいですが、起票時に個人宛に承認をもらいたいことを考えると、リクエスタに指定を許可するほうが良いでしょう。

AWS15

 

ちなみに、承認者を変更リクエストで指定することもできます。しかし、起票者が承認者を自由に選択できてしまうと、メンバー同士の結託によりリーダーの承認を介さない変更ができてしまいますので、要件に応じてよく考える必要があります。

AWS16

 

テンプレートが作成されたので、「レビューのために送信」を押下します。

AWS17

Change Managerのテンプレートレビュアーで設定した通知先に以下のようなメールが届きます。

AWS18

 

自己承認はできませんので、テンプレート作成者以外でレビュアーに該当するユーザがテンプレートを確認します。承認/拒否ボタンがありますので、「承認」を押下します。

AWS19コメントを入力して承認します。

AWS20

テンプレートが承認され、ステータスが「承認済み」になり、通知メールも届きました。

AWS21

 

 

AWS22

 

もし、承認されていないテンプレートを使ってリクエストを作成しようとすると、以下のようなエラーが出て作成できません。

AWS23

 

ドキュメントと同様に、Change Managerのテンプレートもyaml形式で管理されています。今回だとこのようになると思います。

 

  1. schemaVersion: "0.3"
  2. emergencyChange: false
  3. autoApprovable: false
  4. mainSteps:
  5.   - name: ApproveAction1
  6.     action: aws:approve
  7.     timeoutSeconds: 604800
  8.     inputs:
  9.       Message: Please approve this change request
  10.       EnhancedApprovals:
  11.         Approvers:
  12.           - approver: ChangeApprovalGroup
  13.             type: IamGroup
  14.             minRequiredApprovals: 1
  15.         NotificationArn: ""
  16. description: Add User To Group and Tag User
  17. executableRunBooks:
  18.   - name: AddUserToGroup-document
  19.     version: $DEFAULT
  20. templateInformation: >
  21.   #### What is the purpose of this change?
  22.  
  23.  
  24.   #### What will be required to make this change?
  25.  
  26.  
  27.   #### Are there any manual steps that need to be run as part of this change?
  28.  
  29.  
  30.   #### What is the expected end state of the system after this change?
  31.  
  32.  
  33.   #### What assumptions, if any, are being made about the state of the system at the time of this change?
  34.  
  35.  
  36.   #### What could happen if everything goes wrong this change and how is the risk mitigated?
  37.  
  38.  
  39.   #### What is your rollback plan?
  40. parameters:
  41.   Level1ApproverSnsTopicArn:
  42.     type: String
  43.     description: Level 1 Approver SNS Topic Arn

 

グループ参加用のテンプレート作成(エディタで作成)

今度はエディタで作成してみます。テンプレート作成画面からエディタを選択し、「編集」を押下します。

AWS24

 

グループ参加用に作成したテンプレートのyamlを流用し、以下のようにします。

 

  1. schemaVersion: "0.3"
  2. emergencyChange: false
  3. autoApprovable: false
  4. mainSteps:
  5.   - name: ApproveAction1
  6.     action: aws:approve
  7.     timeoutSeconds: 604800
  8.     inputs:
  9.       Message: Please approve this change request
  10.       EnhancedApprovals:
  11.         Approvers:
  12.           - approver: ChangeApprovalGroup
  13.             type: IamGroup
  14.             minRequiredApprovals: 1
  15.         NotificationArn: ""
  16. description: Remove User From Group and Untag User
  17. executableRunBooks:
  18.   - name: RemoveUserFromGroup-document
  19.     version: $DEFAULT
  20. templateInformation: >
  21.   #### What is the purpose of this change?
  22.  
  23.  
  24.   #### What will be required to make this change?
  25.  
  26.  
  27.   #### Are there any manual steps that need to be run as part of this change?
  28.  
  29.  
  30.   #### What is the expected end state of the system after this change?
  31.  
  32.  
  33.   #### What assumptions, if any, are being made about the state of the system at the time of this change?
  34.  
  35.  
  36.   #### What could happen if everything goes wrong this change and how is the risk mitigated?
  37.  
  38.  
  39.   #### What is your rollback plan?
  40. parameters:
  41.   Level1ApproverSnsTopicArn:
  42.     type: String
  43.     description: Level 1 Approver SNS Topic Arn

 

これをエディタに張り付けて作成します。先ほどと同様に、承認されるとテンプレートを利用することができます。

AWS25

 

まとめ

今回の「⑤テンプレート作成編」では、本番アクセス統制を実現するために、Change Managerに必要なテンプレートの作成と登録方法を紹介しました。

バックアップの観点で、yamlファイルはソースコード管理ツールなどで管理しておくとよいでしょう。

次回の「⑥動作確認編」では、Change Mangerのリクエスト作成を行ってみて、変更管理と本番アクセス統制が可能になっているかを紹介します。

 

 
「AWS Systems Manager Change Managerによる
変更管理と本番アクセス統制
」シリーズ全編はこちら