[AWS](WA)自動化された IAM ユーザー クリーンアップ

AWS

元ネタ

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スタックをデプロイします。ここで作成されるリソースは以下のような感じです。

デプロイ手順

  1. こちら(yamlファイル)をダウンロードする。
  2. CloudFormationコンソールを開く。
  3. 「スタック」内の右上にある「スタックの作成」を選択し、「新しいリソースを使用(標準)を選択する。
  1. 「前提条件」より「テンプレートの準備完了」、「テンプレートの指定」にある「テンプレートソース」に「テンプレートファイルのアップロード」を選択し、「ファイルの選択」からダウンロードしたyamlファイルをアップロードする。
  1. 「次へ」を選択する。
  2. 「スタック名」に「iam-cleanup」と入力する。
  3. 「パラメータ」については以下を参考に入力する。
パラメータ名説明入力内容
AnalyzerTypeIAM Access Analyzer は、AWS アカウント内のリソースの外部可用性に関する結果を生成します。
このアカウントが組織のルート アカウントまたは委任された管理者の場合は「ORGANIZATION」を選択し、それ以外の場合は「ACCOUNT」または「NONE」を選択してこのチェックをスキップします。
ACCOUNT
MinAgeKeysToDeleteAccessKeyを削除する未使用日数。
0の場合は削除対象外。
0
MinAgeKeysToDisableAccessKeyを無効化する未使用日数。
0の場合は無効化対象外。
0
MinAgeKeysToReportAccessKeyをレポートする未使用日数。30
MinAgeRolesToDeleteロールを削除する未使用日数。
0の場合は削除対象外。
0
MinAgeRolesToDisableロールを無効化する未使用日数。
0の場合は無効化対象外。
0
MinAgeRolesToReportロールをレポートする未使用日数。30
MinAgeUnusedUsersToDeleteユーザーを削除する未使用日数。
0の場合は削除対象外。
0
MinAgeUnusedUsersToDisableユーザーを無効化する未使用日数。
0の場合は無効化対象外。
0
MinAgeUnusedUsersToReportユーザーをレポートする未使用日数。30
NotificationEmailレポートの送信先メールアドレス。通知先メールアドレスを入力

デプロイされた Lambda 関数には、IAM ユーザー、アクセス キー、ロールを無効化または削除するコードが含まれていますが、デフォルトではこれらのアクションを実行するために必要な IAM 権限がありません。IAM 権限を更新して、これらの機能を有効にします。(権限更新については最後に説明。

自分
自分

実行した結果だとうまく動きませんでした。

削除は紐づいているポリシーのデタッチが必要だったり。

無効化もうまく適用されない。

pythonなので読んだけど見直したほうが良いかも。。。

  1. 「次へ」を選択する。
  2. 「スタックオプションの設定」は変更なしで「次へ」を選択する。
  1. 「レビュー」にて最終確認。最下部にある「機能と変換」にて3つのチェックボックスをオンにし、「送信」を選択する。
  1. 「スタック」の「ステータス」が「CREATE COMPLETE」と表示されるまで数分待つ。

2. Lambda関数のテスト

関連リソースであるSNSトピックのサブスクリプションを確認し、Lambda関数を実行確認します。

SNSトピックのサブスクリプション確認手順

  1. CloudFormationでのスタックが作成完了した時点で送信先メールアドレスにメールが送信されているので確認する。
  1. メール内にある「Confirm subscription」のリンクをクリックし、確認完了とする。

Lambda関数のテスト手順

  1. CloudFormationで作成したスタックの詳細を開く。
  1. 「リソース」の「UserCleanupLambda」にある「物理ID」のリンクを開く。
  1. 「テスト」タブを選択し、「イベント名」に「Test-IAM-Cleanup」を入力する。
  1. 「テスト」を選択し、関数を実行する。数分かかる。
  1. テスト実行完了後、メールを確認する。以下のようなステータスレポートが含まれます。
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関数には削除実行のためのロールが設定されていません。そのため、未使用日数の設定をしてもエラーとなり、処理されません。ここでロールに削除実行のための権限を与える手順を説明しますが、内容を十分に理解の上、この手順を実行してください。

Lambda 関数で削除の実行を有効にしたり、IAM エンティティのアクションを無効にしたりすることに伴うリスクを必ず理解してください。

構成を誤ると、意図しないデータ損失やセキュリティ上の脆弱性が発生する可能性があります。

Lambda 関数を本番環境にデプロイする前に、必ず制御された環境でテストして、期待どおりに動作することを確認してください。

ロール変更手順

  1. IAMコンソールを開く。
  2. 対象となる「UserCleanupLambdaExecutionRole-」を含むロールの詳細を開く。
  1. 「許可」タブの「許可ポリシー」にあるポリシー「sec-UserCleanupRole」の左にある+をクリックし、詳細を開く。
  1. 「編集」を選択し、ポリシーエディタに以下の権限を追加する。

変更前

変更後

追加内容

iam:DeleteAccessKey
iam:DeleteUser
iam:DeleteRole
iam:UpdateAccessKey
iam:UpdateUser
  1. 「次へ」を選択する。
  2. 内容を確認し、「変更を保存」を選択する。
  3. 必要に応じて「2. Lambda関数のテスト」を実行し、意図した処理が行われるかを確認する。

重要な考慮事項

最小権限の原則: 意図しないアクションのリスクを軽減するために、この Lambda 関数にはそのタスクに必要な権限のみを与えます。

ロギングとモニタリング: AWS CloudWatch Logs を有効にし、監査証跡を維持するための削除または無効化アクションに対するアラートを設定します。

バックアップ: 自動削除または無効化アクションを許可する前に、重要な IAM エンティティの手動バックアップなどの回復メカニズムが整備されていることを確認してください。

タイトルとURLをコピーしました