SystemsManagerのChangeManager承認リクエストをロール指定にして承認する

# ChangeManagerとは
ChangeManagerとは、SSMの機能の一つで、ランブックを用いて行われる「変更」に対して承認プロセスを作成できる機能です。
ランブックを指定して変更テンプレートを作成し、リクエストを作成することで「承認されたらランブックを実行する」というプロセスを作成することができます。
また、過去に承認したリクエストの履歴確認やリクエストの状態確認なども行えます。

以下公式説明文

> AWS Systems Manager の機能である Change Manager は、アプリケーションの設定とインフラストラクチャに対する運用上の変更をリクエスト、承認、実装、および報告するためのエンタープライズ変更管理フレームワークです。単一の委任管理者アカウントから AWS Organizations を使用すると、複数の AWS アカウント と複数の AWS リージョン 全体で変更を管理することができます。または、ローカルアカウントを使用して、単一の AWS アカウント の変更を管理できます。AWS リソースとオンプレミスリソースの両方に対する変更を管理するには、Change Manager を使用します。

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/change-manager.html

ランブックについては以下に説明があります。

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/automation-documents.html

## リクエスト承認者に関して
ChangeManagerのリクエスト承認者は、今までIAM ユーザもしくはIAMグループから選択することができました。

![image_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675893/89f28892-fbe6-bfe0-7c4d-094cbe820fd9.png)


ここに、最近の発表でIAMロールが追加されました。

> AWS Systems Manager の機能である Change Manager では、変更リクエストや変更テンプレートの承認者としてAWS Identity and Access Management (IAM) のロールを指定できるようになりました。

https://aws.amazon.com/jp/about-aws/whats-new/2021/08/aws-systems-manager-change-manager-supports-aws-iam-roles-approvers/

これにより、スイッチロールを利用することでロールの切り替えから承認することができるようになったと思うのでやってみます！


### スイッチロールの設定
別アカウントを作成するのは少し手間がかかるので、今回は同一アカウント内でスイッチロールを行います。
ここでは作成方法は省略しますが、以下が必要となります。

- スイッチ先のロール(CM_test_role)
    - 「別のAWSアカウント」を指定して作成。
    - アタッチするポリシー(承認権限があれば他お好み)：AmazonSSMFullAccess

- ロールをスイッチするユーザ(CM_test_user)
    - ポリシー(お好み):AmazonSSMFullAccess
    - ロール引き受けるポリシーを持つユーザ
   
### リクエストの作成
主な部分は省略します。

リクエスト承認者選択でRoleタブを選択し、先ほど作成したスイッチ先のロールを選択します。
![image_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675893/557b95fb-0ede-b984-3b5f-e1de136d5b70.png)


余談ですが、SNSのARNを入力したのちに「通知を追加」ボタンを押さないと追加されないのやめてほしいです...
ここ押さないと承認者に通知が来ませんのでお気を付けください。

![image_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675893/fe5687e9-39d5-5052-2e7f-07cafe43c6c4.png)

### 承認を試す
まず、スイッチロール前のユーザで承認してみます。
CLIから。

```sh:terminal
aws ssm send-automation-signal \
	--automation-execution-id <実行Id> \ 
	--signal-type Approve \ 
	--payload Comment="Approve" 

> An error occurred (InvalidAutomationSignalException) when calling the SendAutomationSignal operation: arn:aws:iam::<AccountID>:user/CM_test_user is not in the approver list of step SimpleApproveAction. Valid approvers: [CM_test_role].
```

Approveできませんでした。
次に、ロールの切り替えを行った後、試してみます。

`~/.aws/config`を以下のように編集します。

```ini
[default]
region = ap-northeast-1
output = json

[profile CM_test_profile]
region = ap-northeast-1
output = json
role_arn = arn:aws:iam::<AccountID>:role/CM_test_role
source_profile = default
```

スイッチロールして再度試します。

```sh:terminal
aws ssm send-automation-signal \
	--automation-execution-id <実行Id> \ 
	--signal-type Approve \ 
	--payload Comment="Approve" \
	--profile CM_test_profile
```

レスポンスはありませんでしたが、マネコンからリクエストの承認欄を見てみると「承認済み」となっています。
![image_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675893/c04bae82-9646-7f94-62ee-064191b262d8.png)

# まとめ
ChangeManagerの承認をIam roleベースで行えるようになったということで、(ニッチですが)スイッチロールで承認してみました。
こういう細かいアップデート増えて痒い所に手が届くとうれしいですよね。