AWS IAM Key Rotation Runbookを試してみる（概要〜準備編）

# はじめに
前提としてアクセスキーは可能な限り持つべきではないと思うのですが、AWSを使う上で仕方がなくアクセスキーを使った認証を行うケースがあると思います。

アクセスキーはご存知の通り漏洩リスクや期限切れによる対応が必要で、手動でやると面倒だったり先程のリスクに晒される可能性があります。

例えば複数のメンバーアカウントを管理している場合では、全てのアカウントの運用状況を管理・把握出来ていればいいのですが、メンバーアカウント事に運用を個別に任せている場合だとアクセスキーの管理が属人的になったり、ガバナンスが効かない状態になる可能性があり、よりセキュリティのリスクが高まると思います。


今回検証導入しようと思っているAWS社から提供されている**AWS IAM Key Rotation Runbook**は自動でキー・ローテーション・ソリューションをデプロイ、構成、検証、トラブルシューティングする方法に関するRunbookです。

このテンプレートは、毎日Organizaions配下のメンバーアカウントをスキャンし、AWS IAMユーザーのアクセスキーを90日ごとに自動的にローテーションし、新しいアクセスキーを**AWS Secrets Manager**内のシークレットに保存してくれます。

シークレットを保存する先は2パターン選べるようで下記図はメンバーアカウント側のシークレットに保存するパターンとなります。（もう一つのパターンはマネージメントアカウント側のシークレットに保存）
    
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592207/412d0a33-8616-d4fc-e2b2-cb97a840538d.png)
[※画像引用 https://github.com/aws-samples/aws-iam-access-key-auto-rotation](https://github.com/aws-samples/aws-iam-access-key-auto-rotation/blob/main/Docs/ASA%20IAM%20Key%20Rotation%20Runbook(v3).pdf)

今回検証しようと思っているのはこちらのパターンで、このランブックにかかるコストって多分ちょっとのコストだと思うんですが、各メンバーアカウント側にコストを持ってもらいたいという意図でこちらのパターンの検証を進めて行きたいと思っています。(**StackSets**を利用するので事前に有効化が必要です)

## 準備
では早速準備に取り掛かりたいと思います。まずこちらの[マニュアル](https://github.com/aws-samples/aws-iam-access-key-auto-rotation/blob/main/Docs/ASA%20IAM%20Key%20Rotation%20Runbook(v3).pdf)をベースに進めて行きます。

**Required Files**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592207/1874503f-ebb6-d496-9403-18ce5cfed5c9.png)
    [※画像引用 https://github.com/aws-samples/aws-iam-access-key-auto-rotation](https://github.com/aws-samples/aws-iam-access-key-auto-rotation/blob/main/Docs/ASA%20IAM%20Key%20Rotation%20Runbook(v3).pdf)
### Deployment

[マニュアル](https://github.com/aws-samples/aws-iam-access-key-auto-rotation/blob/main/Docs/)によると、Deployについては下記手順が必要なようです。

1. **Upload Project Files to S3 Bucket**　←今日はこれ
1. Deploy the main IAM Key Rotation Solution as a CloudFormation Stack
1. Deploy IAM Assumed Roles CloudFormation Template as a StackSet
1. Deploy the List Account Role in the Central/Management Account
1. Deploy the VPC Endpoint template if you are running Lambda in VPC

今回は上記の1.について実施していきます。（残りは次回以降）

#### **Upload Project Files to S3 Bucket**

**STEP:1 ZIPファイルのダウンロード**
上記ファイルが必要なので、まずgithubの[リポジトリ](https://github.com/aws-samples/aws-iam-access-key-auto-rotation/archive/refs/heads/main.zip)から一旦ローカルにZipファイルをダウンロードして解凍まで行います。

**STEP:2 S3バケットの作成**
次にマネコンからS3バケットを作成。バケット名は適当にユニークかつ分かりやすいもので。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592207/34363953-9726-17a5-125f-bad0a5c78119.png)


**STEP:3 フォルダの作成**
先ほど作ったバケットにフォルダを作成していきます。
ここで大事な事は、作成したバケットのフォルダー構造が下記の様になっていないと駄目らしい。
>**IMPORTANT**: Make sure all files are in the **‘asa/asa-iam-rotation’** folder structure.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592207/e0d7a49c-e9b9-eda9-6bb0-87e57c15fc78.png)

**STEP:4 ASAファイルのアップロード**
先ほど作ったバケットにASA関連ファイルのフォルダ3つ（急にASAって出てきたけど、このランブックの事をASAって呼ぶんかいな？）をアップロードします。(DocsとかTest Unitsとかのフォルダは不要)
・CloudFormation
・Lambda
・template
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592207/493518e7-f791-a034-03f6-0ad5b90fc3dd.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592207/deeda0f5-f66c-d3b6-75a5-40172ce89ed1.png)
一旦ここまでで前準備は完了です！

# おわりに
ここまでは特に問題なく進んでます。このマニュアルが英語な上に、少し読みづらく（内容も少し古い？）なかなか苦労しそうですが、時間を見つけ進めていければと思います。今回ご紹介したASAはセキュアなシステム環境を構築するのに必要だと思いますので、どなたかのご参考になれば幸いです。引き続きよろしくお願い致します。