元ネタ
AWSのWell-Architected Frameworkを改めて整理。せっかくなんでハンズオン形式で学べるAWS Well-Architected Labsをやってみよう!ということで、備忘も兼ねて実践&記録をしてみました。
Workshop Studio
Discover and participate in AWS workshops and GameDays
前提条件
- AWSアカウントがあること
- リストから AWS Lambda をサポートするリージョンを選択します。
- AWS コマンドラインインターフェイス (AWS CLI) インストールされ、設定されています。AWS コマンドライン インターフェイス (AWS CLI) は、コマンドライン シェルのコマンドを使用して AWS のサービスと対話できるようにするオープンソース ツールです。
ハンズオン開始
0. 概要
このハンズオンでは、IAMユーザー、ロール、アクセスキーについてAWS Lambda関数を使用して、使用状況に応じたレポート、無効化、削除できるようにします。
1. CloudFormationスタックをデプロイする
一連のリソースを作成するCloudFormationスタックをデプロイします。ここで作成されるリソースは以下のような感じです。
デプロイ手順
- こちら(yamlファイル)をダウンロードする。
- CloudFormationコンソールを開く。
- 「スタック」内の右上にある「スタックの作成」を選択し、「新しいリソースを使用(標準)を選択する。
- 「前提条件」より「テンプレートの準備完了」、「テンプレートの指定」にある「テンプレートソース」に「テンプレートファイルのアップロード」を選択し、「ファイルの選択」からダウンロードしたyamlファイルをアップロードする。
- 「次へ」を選択する。
- 「スタック名」に「iam-cleanup」と入力する。
- 「パラメータ」については以下を参考に入力する。
パラメータ名 | 説明 | 入力内容 |
---|---|---|
AnalyzerType | IAM Access Analyzer は、AWS アカウント内のリソースの外部可用性に関する結果を生成します。 このアカウントが組織のルート アカウントまたは委任された管理者の場合は「ORGANIZATION」を選択し、それ以外の場合は「ACCOUNT」または「NONE」を選択してこのチェックをスキップします。 | ACCOUNT |
MinAgeKeysToDelete | AccessKeyを削除する未使用日数。 0の場合は削除対象外。 | 0 |
MinAgeKeysToDisable | AccessKeyを無効化する未使用日数。 0の場合は無効化対象外。 | 0 |
MinAgeKeysToReport | AccessKeyをレポートする未使用日数。 | 30 |
MinAgeRolesToDelete | ロールを削除する未使用日数。 0の場合は削除対象外。 | 0 |
MinAgeRolesToDisable | ロールを無効化する未使用日数。 0の場合は無効化対象外。 | 0 |
MinAgeRolesToReport | ロールをレポートする未使用日数。 | 30 |
MinAgeUnusedUsersToDelete | ユーザーを削除する未使用日数。 0の場合は削除対象外。 | 0 |
MinAgeUnusedUsersToDisable | ユーザーを無効化する未使用日数。 0の場合は無効化対象外。 | 0 |
MinAgeUnusedUsersToReport | ユーザーをレポートする未使用日数。 | 30 |
NotificationEmail | レポートの送信先メールアドレス。 | 通知先メールアドレスを入力 |
自分
実行した結果だとうまく動きませんでした。
削除は紐づいているポリシーのデタッチが必要だったり。
無効化もうまく適用されない。
pythonなので読んだけど見直したほうが良いかも。。。
- 「次へ」を選択する。
- 「スタックオプションの設定」は変更なしで「次へ」を選択する。
- 「レビュー」にて最終確認。最下部にある「機能と変換」にて3つのチェックボックスをオンにし、「送信」を選択する。
- 「スタック」の「ステータス」が「CREATE COMPLETE」と表示されるまで数分待つ。
2. Lambda関数のテスト
関連リソースであるSNSトピックのサブスクリプションを確認し、Lambda関数を実行確認します。
SNSトピックのサブスクリプション確認手順
- CloudFormationでのスタックが作成完了した時点で送信先メールアドレスにメールが送信されているので確認する。
- メール内にある「Confirm subscription」のリンクをクリックし、確認完了とする。
Lambda関数のテスト手順
- CloudFormationで作成したスタックの詳細を開く。
- 「リソース」の「UserCleanupLambda」にある「物理ID」のリンクを開く。
- 「テスト」タブを選択し、「イベント名」に「Test-IAM-Cleanup」を入力する。
- 「テスト」を選択し、関数を実行する。数分かかる。
- テスト実行完了後、メールを確認する。以下のようなステータスレポートが含まれます。
IAM user cleanup successfully ran.
User John Doe has not logged in since 2018-04-19 08:36:18+00:00 and needs cleanup
User John Doe has not used access key AKIAIOSFODNN7EXAMPLE in since 2018-04-22 21:32: 00+00:00 and needs cleanup
User John Doe has not used access key AKIAIOSFODNN7EXAMPLE in since 2018-04-22 20:08:00+00:00 and needs cleanup
Principal 012345678901 has permission to sts:AssumeRole against arn:aws:iam::0123456789012:role/Role AWS::IAM::Role. See finding 00000000-0000-0000-0000-000000000000 in IAM Access Analyzer for more information or to archive this finding
(オプション)破壊的なIAMアクションの有効化
CloudFormationスタックの作成でも説明しましたが、ここで作成されるLambda関数には削除実行のためのロールが設定されていません。そのため、未使用日数の設定をしてもエラーとなり、処理されません。ここでロールに削除実行のための権限を与える手順を説明しますが、内容を十分に理解の上、この手順を実行してください。
ロール変更手順
- IAMコンソールを開く。
- 対象となる「UserCleanupLambdaExecutionRole-」を含むロールの詳細を開く。
- 「許可」タブの「許可ポリシー」にあるポリシー「sec-UserCleanupRole」の左にある+をクリックし、詳細を開く。
- 「編集」を選択し、ポリシーエディタに以下の権限を追加する。
変更前
変更後
追加内容
iam:DeleteAccessKey
iam:DeleteUser
iam:DeleteRole
iam:UpdateAccessKey
iam:UpdateUser
- 「次へ」を選択する。
- 内容を確認し、「変更を保存」を選択する。
- 必要に応じて「2. Lambda関数のテスト」を実行し、意図した処理が行われるかを確認する。