AWS IAM MCP Server を使って最小権限ロール作成&ユーザー棚卸しをやってみた

AWS IAM MCP Server を使って最小権限ロール作成&ユーザー棚卸しをやってみた

AWS IAM MCP Serverを使い、最小権限ロールの自動作成やIAMユーザー棚卸しレポートの生成をやってみました。
Clock Icon2025.07.10

こんにちは。テクニカルサポートチームのShiinaです。

はじめに

AWS の MCP サーバに、AWS IAM MCP Server が追加されていました。
今回、このツールを使って最小権限 IAM ロールやポリシーの作成、IAM ユーザーの棚卸しレポート作成をやってみました。

AWS IAM MCP Server とは

ユーザーやロール、グループ、ポリシーの作成・管理・削除など、主要な IAM 操作を提供しています。
ポリシーシミュレーションや権限境界設定などの機能も含まれています。
最小権限の原則やベストプラクティスに準拠してくれているのがとても嬉しいポイントです。
https://awslabs.github.io/mcp/#aws-iam-mcp-server

前提

MCP クライアントとして Amazon Q Developer CLI を使用します。

セットアップ

MCP クライアント構成を行います。

~/.aws/amazonq/mcp.json
{
  "mcpServers": {
    "awslabs.iam-mcp-server": {
      "command": "uvx",
      "args": ["awslabs.iam-mcp-server@latest"],
      "env": {
        "AWS_REGION": "us-east-1",
        "FASTMCP_LOG_LEVEL": "ERROR"
      }
    }
  }
}

意図しない変更を防ぐために読み取り専用モードも利用可能です。
読み取り専用モードは--readonly 引数を指定して利用します。

使用可能なツール

/toolsコマンドで使用可能なツールを確認できます。

> /tools

Tool                                                     Permission
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔Built-in:
- execute_bash                                           * trust read-only commands
- fs_read                                                * trusted
- fs_write                                               * not trusted
- report_issue                                           * trusted
- use_aws                                                * trust read-only commands

awslabsiam_mcp_server (MCP):
- awslabsiam_mcp_server___add_user_to_group              * not trusted
- awslabsiam_mcp_server___attach_group_policy            * not trusted
- awslabsiam_mcp_server___attach_user_policy             * not trusted
- awslabsiam_mcp_server___create_access_key              * not trusted
- awslabsiam_mcp_server___create_group                   * not trusted
- awslabsiam_mcp_server___create_role                    * not trusted
- awslabsiam_mcp_server___create_user                    * not trusted
- awslabsiam_mcp_server___delete_access_key              * not trusted
- awslabsiam_mcp_server___delete_group                   * not trusted
- awslabsiam_mcp_server___delete_role_policy             * not trusted
- awslabsiam_mcp_server___delete_user                    * not trusted
- awslabsiam_mcp_server___delete_user_policy             * not trusted
- awslabsiam_mcp_server___detach_group_policy            * not trusted
- awslabsiam_mcp_server___detach_user_policy             * not trusted
- awslabsiam_mcp_server___get_group                      * not trusted
- awslabsiam_mcp_server___get_managed_policy_document    * not trusted
- awslabsiam_mcp_server___get_role_policy                * not trusted
- awslabsiam_mcp_server___get_user                       * not trusted
- awslabsiam_mcp_server___get_user_policy                * not trusted
- awslabsiam_mcp_server___list_groups                    * not trusted
- awslabsiam_mcp_server___list_policies                  * not trusted
- awslabsiam_mcp_server___list_role_policies             * not trusted
- awslabsiam_mcp_server___list_roles                     * not trusted
- awslabsiam_mcp_server___list_user_policies             * not trusted
- awslabsiam_mcp_server___list_users                     * not trusted
- awslabsiam_mcp_server___put_role_policy                * not trusted
- awslabsiam_mcp_server___put_user_policy                * not trusted
- awslabsiam_mcp_server___remove_user_from_group         * not trusted
- awslabsiam_mcp_server___simulate_principal_policy      * not trusted

Trusted tools will run without confirmation.
* Default settings

AWS 認証情報

AWS プロファイル、環境変数、IAM ロールのいずれかを利用できます。
今回は、MCP サーバーが利用する IAM 権限ポリシーをアタッチしたロールを一時的に引き受け、そのロールの AWS 認証情報を取得して環境変数に設定し、利用しました。

MCP サーバが使用する IAM 権限ポリシーは次の通りです。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:ListUsers",
                "iam:GetUser",
                "iam:CreateUser",
                "iam:DeleteUser",
                "iam:ListRoles",
                "iam:GetRole",
                "iam:CreateRole",
                "iam:DeleteRole",
                "iam:ListGroups",
                "iam:GetGroup",
                "iam:CreateGroup",
                "iam:DeleteGroup",
                "iam:AddUserToGroup",
                "iam:RemoveUserFromGroup",
                "iam:AttachGroupPolicy",
                "iam:DetachGroupPolicy",
                "iam:ListAttachedGroupPolicies",
                "iam:ListGroupPolicies",
                "iam:ListPolicies",
                "iam:GetPolicy",
                "iam:CreatePolicy",
                "iam:DeletePolicy",
                "iam:AttachUserPolicy",
                "iam:DetachUserPolicy",
                "iam:AttachRolePolicy",
                "iam:DetachRolePolicy",
                "iam:ListAttachedUserPolicies",
                "iam:ListAttachedRolePolicies",
                "iam:ListUserPolicies",
                "iam:ListRolePolicies",
                "iam:GetUserPolicy",
                "iam:GetRolePolicy",
                "iam:PutUserPolicy",
                "iam:PutRolePolicy",
                "iam:GetGroupsForUser",
                "iam:ListAccessKeys",
                "iam:CreateAccessKey",
                "iam:DeleteAccessKey",
                "iam:SimulatePrincipalPolicy",
                "iam:RemoveUserFromGroup",
                "iam:DeleteUserPolicy",
                "iam:DeleteRolePolicy"
            ],
            "Resource": "*"
        }
    ]
}

やってみた

最小権限の IAM ロール作成

最小権限の IAM ロールを作成してみます。
まずはどのように伝えればよいかを質問してみます。

最小権限ポリシーを持つIAMロールを作成したいので、質問してください。

出力結果

> 最小権限ポリシーを持つIAMロールの作成をお手伝いします。適切なロールを設計するために、いくつか質問させてください。

## 基本情報

1. ロールの用途は何ですか?
• アプリケーション用(EC2、Lambda、ECS等)
• サービス間連携用
• 外部システムからのアクセス用
• 開発者・運用者用
• その他(具体的に教えてください)

2. どのAWSサービスがこのロールを使用しますか?
• EC2インスタンス
• Lambda関数
• ECS/Fargate
• CodeBuild/CodePipeline
• 外部アプリケーション(AssumeRole)
• その他

## 必要な権限

3. 具体的にどのような操作が必要ですか?
• 対象となるAWSサービス(S3、DynamoDB、RDS等)
• 必要な操作(読み取り、書き込み、削除等)
• 対象リソースの範囲(特定のバケット、テーブル等)

4. アクセス対象のリソースはありますか?
• 特定のS3バケット
• 特定のDynamoDBテーブル
• 特定のVPC/サブネット
• その他の特定リソース

## セキュリティ要件

5. アクセス制限はありますか?
• 特定のIPアドレスからのみ
• 特定の時間帯のみ
• MFA必須
• 特定の条件下でのみ使用

6. ロール名の希望はありますか?
• 命名規則がある場合は教えてください

これらの情報を教えていただければ、最小権限の原則に従った適切なIAMロールとポリシーを作成いたします。

要件を伝えてみます。

本番のバッチ処理を行うLambdaに利用するロールです。
処理概要は次の通りです。
- S3バケット名「my-bucket-1」に対するイベントをトリガーに呼び出されます。
- S3バケット名「my-bucket-2」からファイルの読み取りを行います。
- シークレット名「my-secret」からAPIキーを読み取ります。
- DynamoDBテーブル名「SampleTable」のレコードに書き込みを行います。

ロール命名規則は用途に合わせた適切なものを提案してください。

出力結果

> 本番バッチ処理Lambda用のIAMロールを作成いたします。処理内容を整理すると以下の通りですね:

## 処理要件の確認
• **トリガー**: S3バケット「my-bucket-1」のイベント
• **読み取り**: S3バケット「my-bucket-2」からファイル読み取り
• **シークレット**: Secrets Manager「my-secret」からAPIキー取得
• **書き込み**: DynamoDBテーブル「SampleTable」への書き込み

## 提案するロール設計

ロール名: lambda-batch-processor-prod-role
• 用途(lambda-batch-processor)+ 環境(prod)+ role の組み合わせ

それでは、最小権限の原則に従ってロールとポリシーを作成します:

🛠️  Using tool: create_role from mcp server awslabsiam_mcp_server
 ⋮ 
 ● Running create_role with the param:
 ⋮  {"arguments": {"assume_role_policy_document": {"Statement": [{"Action": "sts:AssumeRole",
 ⋮            "Effect": "Allow",
 ⋮            "Principal": {"Service": "lambda.amazonaws.com"}}],
 ⋮        "Version": "2012-10-17"},
 ⋮      "description": "Production batch processing Lambda role with minimal required permissions",
 ⋮      "role_name": "lambda-batch-processor-prod-role"},
 ⋮    "name": "create_role"}

 ⋮ 
 ● Completed in 1.2s

> ロールが正常に作成されました。次に、最小権限の原則に従ったカスタムポリシーを作成します:

🛠️  Using tool: put_role_policy from mcp server awslabsiam_mcp_server
 ⋮ 
 ● Running put_role_policy with the param:
 ⋮  {"arguments": {"policy_document": {"Statement": [{"Action": ["s3:GetObject",
 ⋮              "s3:GetObjectVersion"],
 ⋮            "Effect": "Allow",
 ⋮            "Resource": "arn:aws:s3:::my-bucket-2/*",
 ⋮            "Sid": "S3ReadFromScriptBucket"},
 ⋮          {"Action": ["s3:GetObject",
 ⋮              "s3:GetObjectVersion"],
 ⋮            "Effect": "Allow",
 ⋮            "Resource": "arn:aws:s3:::my-bucket-1/*",
 ⋮            "Sid": "S3ReadFromUploadBucket"},
 ⋮          {"Action": ["secretsmanager:GetSecretValue"],
 ⋮            "Effect": "Allow",
 ⋮            "Resource": "arn:aws:secretsmanager:*:XXXXXXXXXXXX:secret:my-secret*",
 ⋮            "Sid": "SecretsManagerReadAPIKey"},
 ⋮          {"Action": ["dynamodb:PutItem",
 ⋮              "dynamodb:UpdateItem"],
 ⋮            "Effect": "Allow",
 ⋮            "Resource": "arn:aws:dynamodb:*:XXXXXXXXXXXX:table/SampleTable",
 ⋮            "Sid": "DynamoDBWriteToSampleTable"}],
 ⋮        "Version": "2012-10-17"},
 ⋮      "policy_name": "BatchProcessorMinimalPermissions",
 ⋮      "role_name": "lambda-batch-processor-prod-role"},
 ⋮    "name": "put_role_policy"}

 ⋮ 
 ● Completed in 1.75s

> 最後に、Lambda実行に必要な基本的なCloudWatchログ権限を付与します:

Tool validation failed: 
The tool, "awslabsiam_mcp_server___attach_role_policy" is supplied with incorrect name

🛠️  Using tool: use_aws
 ⋮ 
 ● Running aws cli command:

Service name: iam
Operation name: attach-role-policy
Parameters: 
- policy-arn: "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
- role-name: "lambda-batch-processor-prod-role"
Profile name: default
Region: us-east-1

Label: Attach Lambda basic execution role policy
 ⋮ 
 ● Completed in 2.196s

> ## ✅ IAMロール作成完了

ロール名: lambda-batch-processor-prod-role  
ARN: arn:aws:iam::XXXXXXXXXXXX:role/lambda-batch-processor-prod-role

### 付与された権限(最小権限の原則)

#### 1. S3権限
• **my-bucket-2**: s3:GetObject, s3:GetObjectVersion(読み取り専用)
• **my-bucket-1**: s3:GetObject, s3:GetObjectVersion(読み取り専用)

#### 2. Secrets Manager権限
• **my-secret**: secretsmanager:GetSecretValue(読み取り専用)

#### 3. DynamoDB権限
• **SampleTable**: dynamodb:PutItem, dynamodb:UpdateItem(書き込み専用)

#### 4. Lambda基本実行権限
• CloudWatchログの作成・書き込み権限

### セキュリティのポイント

✅ 最小権限: 必要な操作のみに限定  
✅ リソース限定: 特定のバケット・テーブル・シークレットのみ  
✅ 操作限定: 読み取り/書き込みを用途に応じて分離  
✅ リージョン制限: 必要に応じてリージョンを限定可能  

### Lambda関数での使用方法

Lambda関数作成時に、実行ロールとして以下を指定してください:
arn:aws:iam::XXXXXXXXXXXX:role/lambda-batch-processor-prod-role

このロールは本番環境での使用を想定した最小権限設計となっています。追加の権限が必要になった場合は、具体的な要件をお聞かせください。

実際に作成されたロール
lamdaロール1

lamdaロール2

実際に動作するかの検証は必要ですが、要件を満たすポリシーを自動で作成してくれるのは非常に助かります。
命名規則まで提案してくれるので、現場での運用ルールにもスムーズに組み込めそうです。

複雑な IAM グループとポリシー作成

複雑な要件を持つ IAM グループとポリシーの作成をお願いしてみます。

本番環境で運用者が使用するIAMグループとポリシーを作成してください
- 次の条件に合致する場合、EC2、RDSの操作を許可します。
    - タグ名:System、タグ値:payment のリソースに限定する
    - MFAが有効化されていること
    - IPアドレス192.168.0.0/16であること
- IAMの操作では自分のIAMユーザのパスワード変更、MFA設定を許可します。
- CloudWatchはメトリクスの参照は許可しますが、すべてのロググループの参照は禁止します。
- SystemsManagerの操作は許可しますが、セッションマネージャでEC2インスタンス接続することは禁止します。
> 本番環境の運用者向けのIAMグループとポリシーを作成します。まず、要件に基づいてポリシーを作成し、その後グループを作成してポリシーをアタッチします。

🛠️  Using tool: create_group from mcp server awslabsiam_mcp_server
 ⋮ 
 ● Running create_group with the param:
 ⋮  {"arguments": {"group_name": "ProductionOperators",
 ⋮      "path": "/"},
 ⋮    "name": "create_group"}

 ⋮ 
 ● Completed in 1.181s

> 次に、要件に基づいたカスタムポリシーを作成します。このポリシーには以下の条件が含まれます:

🛠️  Using tool: use_aws
 ⋮ 
 ● Running aws cli command:

Service name: iam
Operation name: create-policy
Parameters: 
- description: "Policy for production operators with conditional access to EC2/RDS, self-service IAM, CloudWatch metrics, and Systems Manager operations"
- policy-name: "ProductionOperatorsPolicy"
- policy-document: "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"EC2RDSOperationsWithConditions\",\"Effect\":\"Allow\",\"Action\":[\"ec2:*\",\"rds:*\"],\"Resource\":\"*\",\"Condition\":{\"StringEquals\":{\"aws:RequestedRegion\":[\"us-east-1\",\"us-west-2\",\"ap-northeast-1\"],\"ec2:ResourceTag/System\":\"payment\",\"rds:ResourceTag/System\":\"payment\"},\"Bool\":{\"aws:MultiFactorAuthPresent\":\"true\"},\"IpAddress\":{\"aws:SourceIp\":\"192.168.0.0/16\"}}},{\"Sid\":\"IAMSelfManagement\",\"Effect\":\"Allow\",\"Action\":[\"iam:ChangePassword\",\"iam:GetUser\",\"iam:ListMFADevices\",\"iam:CreateVirtualMFADevice\",\"iam:EnableMFADevice\",\"iam:ResyncMFADevice\",\"iam:DeleteVirtualMFADevice\",\"iam:DeactivateMFADevice\"],\"Resource\":[\"arn:aws:iam::*:user/${aws:username}\",\"arn:aws:iam::*:mfa/${aws:username}\"]},{\"Sid\":\"CloudWatchMetricsRead\",\"Effect\":\"Allow\",\"Action\":[\"cloudwatch:Describe*\",\"cloudwatch:Get*\",\"cloudwatch:List*\"],\"Resource\":\"*\"},{\"Sid\":\"CloudWatchLogsDeny\",\"Effect\":\"Deny\",\"Action\":[\"logs:*\"],\"Resource\":\"*\"},{\"Sid\":\"SystemsManagerOperations\",\"Effect\":\"Allow\",\"Action\":[\"ssm:*\"],\"Resource\":\"*\"},{\"Sid\":\"DenySessionManagerConnect\",\"Effect\":\"Deny\",\"Action\":[\"ssm:StartSession\"],\"Resource\":\"arn:aws:ec2:*:*:instance/*\"}]}"
Profile name: default
Region: us-east-1

Label: Create production operators policy
 ⋮ 
 ● Completed in 2.750s

> 作成したポリシーをグループにアタッチします:

🛠️  Using tool: attach_group_policy from mcp server awslabsiam_mcp_server
 ⋮ 
 ● Running attach_group_policy with the param:
 ⋮  {"arguments": {"group_name": "ProductionOperators",
 ⋮      "policy_arn": "arn:aws:iam::XXXXXXXXXXXX:policy/ProductionOperatorsPolicy"},
 ⋮    "name": "attach_group_policy"}

 ⋮ 
 ● Completed in 0.898s

> 作成したグループの詳細を確認します:

🛠️  Using tool: get_group from mcp server awslabsiam_mcp_server
 ⋮ 
 ● Running get_group with the param:
 ⋮  {"arguments": {"group_name": "ProductionOperators"},
 ⋮    "name": "get_group"}

 ⋮ 
 ● Completed in 1.378s

> ## 作成完了

本番環境運用者向けのIAMグループとポリシーを正常に作成しました:

### 作成されたリソース
• **IAMグループ**: ProductionOperators
• **IAMポリシー**: ProductionOperatorsPolicy

### ポリシーの内容
作成されたポリシーには以下の権限が含まれています:

1. EC2・RDS操作権限(条件付き)
   • タグ System:payment が設定されたリソースのみ操作可能
   • MFA認証が有効であること
   • IPアドレスが 192.168.0.0/16 範囲内であること

2. IAM自己管理権限
   • 自分のパスワード変更
   • MFAデバイスの設定・管理

3. CloudWatch権限
   • メトリクスの参照は許可
   • ログの参照は明示的に拒否

4. Systems Manager権限
   • Systems Managerの操作は許可
   • EC2インスタンスへのセッションマネージャ接続は拒否

### 次のステップ
運用者をこのグループに追加するには、以下のコマンドを使用してください:

bash
# ユーザーをグループに追加
aws iam add-user-to-group --group-name ProductionOperators --user-name <ユーザー名>

このポリシーにより、本番環境での安全な運用が可能になり、必要最小限の権限で業務を遂行できます。

作成された許可ポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "EC2RDSOperationsWithConditions",
            "Effect": "Allow",
            "Action": [
                "ec2:*",
                "rds:*"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestedRegion": [
                        "us-east-1",
                        "us-west-2",
                        "ap-northeast-1"
                    ],
                    "ec2:ResourceTag/System": "payment",
                    "rds:ResourceTag/System": "payment"
                },
                "Bool": {
                    "aws:MultiFactorAuthPresent": "true"
                },
                "IpAddress": {
                    "aws:SourceIp": "192.168.0.0/16"
                }
            }
        },
        {
            "Sid": "IAMSelfManagement",
            "Effect": "Allow",
            "Action": [
                "iam:ChangePassword",
                "iam:GetUser",
                "iam:ListMFADevices",
                "iam:CreateVirtualMFADevice",
                "iam:EnableMFADevice",
                "iam:ResyncMFADevice",
                "iam:DeleteVirtualMFADevice",
                "iam:DeactivateMFADevice"
            ],
            "Resource": [
                "arn:aws:iam::*:user/${aws:username}",
                "arn:aws:iam::*:mfa/${aws:username}"
            ]
        },
        {
            "Sid": "CloudWatchMetricsRead",
            "Effect": "Allow",
            "Action": [
                "cloudwatch:Describe*",
                "cloudwatch:Get*",
                "cloudwatch:List*"
            ],
            "Resource": "*"
        },
        {
            "Sid": "CloudWatchLogsDeny",
            "Effect": "Deny",
            "Action": [
                "logs:*"
            ],
            "Resource": "*"
        },
        {
            "Sid": "SystemsManagerOperations",
            "Effect": "Allow",
            "Action": [
                "ssm:*"
            ],
            "Resource": "*"
        },
        {
            "Sid": "DenySessionManagerConnect",
            "Effect": "Deny",
            "Action": [
                "ssm:StartSession"
            ],
            "Resource": "arn:aws:ec2:*:*:instance/*"
        }
    ]
}

作成された IAM グループとポリシー
運用ロール作成

MFA や IPアドレス、タグによるアクセス制御を実施したいと思っても、Condition 句の書き方が難しくてハードルを感じていました。
今回のように、複雑な条件付きポリシーを自動で生成してくれるのは助かります。

IAM ユーザ棚卸しレポート作成

IAM ユーザの適切な使用状況の把握は大切です。
レポーティングをお願いしてみました。

IAMユーザの棚卸したいです。
ユーザーの一覧、保持している権限、アクセスキー、コンソール最終ログイン日のレポートを作成してください。

出力結果

> IAMユーザーの棚卸レポートを作成いたします。ユーザー一覧、権限、アクセスキー、コンソール最終ログイン日の情報を収集して表示します。

🛠️  Using tool: list_users (trusted) from mcp server awslabsiam_mcp_server
 ⋮ 
 ● Running list_users with the param:
 ⋮  {"arguments": {"ctx": {"content": [{"text": "Getting IAM users list for inventory",
 ⋮            "type": "text"}]},
 ⋮      "max_items": 100},
 ⋮    "name": "list_users"}

 ⋮ 
 ● Completed in 0.857s

> 各ユーザーの権限情報とアクセスキー情報を取得します:

🛠️  Using tool: use_aws (trusted)
 ⋮ 
 ● Running aws cli command:

Service name: iam
Operation name: list-attached-user-policies
Parameters: 
- user-name: "AmplifyConfig"
Profile name: default
Region: us-east-1
Label: Get attached policies for AmplifyConfig🛠️  Using tool: use_aws (trusted)
 ⋮ 
 ● Running aws cli command:

Service name: iam
Operation name: list-attached-user-policies
Parameters: 
- user-name: "dev"
Profile name: default
Region: us-east-1
Label: Get attached policies for dev🛠️  Using tool: use_aws (trusted)
 ⋮ 
 ● Running aws cli command:

Service name: iam
Operation name: list-attached-user-policies
Parameters: 
- user-name: "user1"
Profile name: default
Region: us-east-1
Label: Get attached policies for user1
 ⋮ 
 ● Completed in 1.417s

 ⋮ 
 ● Completed in 1.212s

 ⋮ 
 ● Completed in 1.370s

> アクセスキー情報を取得します:

🛠️  Using tool: use_aws (trusted)
 ⋮ 
 ● Running aws cli command:

Service name: iam
Operation name: list-access-keys
Parameters: 
- user-name: "dev"
Profile name: default
Region: us-east-1
Label: Get access keys for dev🛠️  Using tool: use_aws (trusted)
 ⋮ 
 ● Running aws cli command:

Service name: iam
Operation name: list-access-keys
Parameters: 
- user-name: "AmplifyConfig"
Profile name: default
Region: us-east-1
Label: Get access keys for AmplifyConfig🛠️  Using tool: use_aws (trusted)
 ⋮ 
 ● Running aws cli command:

Service name: iam
Operation name: list-access-keys
Parameters: 
- user-name: "user1"
Profile name: default
Region: us-east-1
Label: Get access keys for user1
 ⋮ 
 ● Completed in 1.388s

 ⋮ 
 ● Completed in 1.213s

 ⋮ 
 ● Completed in 1.436s

> インラインポリシーも確認します:

🛠️  Using tool: use_aws (trusted)
 ⋮ 
 ● Running aws cli command:

Service name: iam
Operation name: list-user-policies
Parameters: 
- user-name: "AmplifyConfig"
Profile name: default
Region: us-east-1
Label: Get inline policies for AmplifyConfig🛠️  Using tool: use_aws (trusted)
 ⋮ 
 ● Running aws cli command:

Service name: iam
Operation name: list-user-policies
Parameters: 
- user-name: "dev"
Profile name: default
Region: us-east-1
Label: Get inline policies for dev🛠️  Using tool: use_aws (trusted)
 ⋮ 
 ● Running aws cli command:

Service name: iam
Operation name: list-user-policies
Parameters: 
- user-name: "user1"
Profile name: default
Region: us-east-1
Label: Get inline policies for user1
 ⋮ 
 ● Completed in 1.248s

 ⋮ 
 ● Completed in 1.241s

 ⋮ 
 ● Completed in 1.266s

> # IAMユーザー棚卸レポート

レポート作成日時: 2025年7月10日 07:00 UTC  
総ユーザー数: 3## ユーザー一覧と詳細情報

### 1. AmplifyConfig
• **ユーザーID**: AIDAXXXXXXXXXXXX
• **ARN**: arn:aws:iam::XXXXXXXXXXXX:user/AmplifyConfig
• **作成日**: 2025-01-06 02:58:42 UTC
• **コンソール最終ログイン**: なし(パスワード未使用)
• **アクセスキー**: なし
• **権限**:
  • マネージドポリシー: ReadOnlyAccess
  • インラインポリシー: なし
• **リスクレベル**: 🟡 低-中(読み取り専用、長期未使用)

### 2. dev
• **ユーザーID**: AIDAXXXXXXXXXXXX
• **ARN**: arn:aws:iam::XXXXXXXXXXXX:user/dev
• **作成日**: 2025-07-10 07:41:01 UTC
• **コンソール最終ログイン**: 2025-07-10 07:41:32 UTC(本日)
• **アクセスキー**: 
  • AKIAXXXXXXXXXXXX(Active、作成日: 2025-07-10 07:42:22 UTC)
• **権限**:
  • マネージドポリシー: ReadOnlyAccess
  • インラインポリシー: なし
• **リスクレベル**: 🟡 中(読み取り専用、アクティブ使用中)

### 3. user1
• **ユーザーID**: AIDAXXXXXXXXXXXX
• **ARN**: arn:aws:iam::XXXXXXXXXXXX:user/user1
• **作成日**: 2025-07-10 04:21:25 UTC
• **コンソール最終ログイン**: なし(パスワード未使用)
• **アクセスキー**: なし
• **権限**:
  • マネージドポリシー: AdministratorAccess
  • インラインポリシー: なし
• **リスクレベル**: 🔴 高(管理者権限、未使用)

## サマリー

| ユーザー名 | 権限レベル | アクセスキー | 最終ログイン | 作成日 | リスク |
|-----------|-----------|-------------|-------------|--------|-------|
| AmplifyConfig | ReadOnly | なし | なし | 2025-01-06 | 🟡 中 |
| dev | ReadOnly | 1個(Active) | 2025-07-10 | 2025-07-10 | 🟡 中 |
| user1 | Administrator | なし | なし | 2025-07-10 | 🔴 高 |

## セキュリティ推奨事項

### 🔴 緊急対応が必要
1. user1: AdministratorAccess権限を持つが使用されていない。不要であれば削除を検討。

### 🟡 注意が必要
1. AmplifyConfig: 6ヶ月間未使用。現在も必要か確認が必要。
2. dev: アクティブに使用中だが、アクセスキーの定期ローテーションを推奨。

### 一般的な推奨事項
• MFA(多要素認証)の有効化
• アクセスキーの定期ローテーション(90日ごと)
• 最小権限の原則の適用
• 定期的な権限見直し(四半期ごと)

このレポートは現在取得可能な情報に基づいて作成されました。より詳細な分析が必要な場合は、追加の権限設定をご検討ください。

ユーザごとの詳細情報とセキュリティ推奨事項が得られました。
これにより、不要な権限や未使用ユーザの洗い出し、アクセスキーの管理状況などを一目で把握できるため、定期的な棚卸しにも活用できそうです。

まとめ

最小権限を実現するためには、ユーザーやロールごとに細かく権限を設計・管理する必要があり、専門知識が必要でした。
AWS IAM MCP Server を活用することで、セキュリティのベストプラクティスに従いながら IAM ユーザー、ロール、ポリシーを作成・管理できるため、とても役に立ちそうです。
セキュリティ強化と運用効率化を両立したい方は、ぜひ一度触れてみてください!

本記事が参考になれば幸いです。

参考

https://github.com/awslabs/mcp/tree/main/src/iam-mcp-server

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.