AWS IAM MCPサーバー
AWS Identity and Access Management (IAM) の包括的な操作を提供する Model Context Protocol (MCP) サーバーです。このサーバーは、セキュリティのベストプラクティスに従いながら、AI アシスタントが IAM のユーザー、ロール、ポリシー、権限を管理できるようにします。
機能
IAM のコア管理
- ユーザー管理: IAM ユーザーの作成、一覧表示、取得、削除
- ロール管理: 信頼ポリシーを持つ IAM ロールの作成、一覧表示、管理
- グループ管理: メンバー管理を含む IAM グループの作成、一覧表示、取得、削除
- ポリシー管理: IAM ポリシー(マネージドおよびインライン)の一覧表示と管理
- インラインポリシー管理: ユーザーおよびロールのインラインポリシーに対する完全な CRUD 操作
- 権限管理: ユーザーおよびロールへのポリシーのアタッチ/デタッチ
- アクセスキー管理: ユーザーのアクセスキーの作成と削除
- セキュリティシミュレーション: ポリシーを適用する前に権限をテスト
セキュリティ機能
- ポリシーシミュレーション: 変更を加えずに権限をテスト
- 強制削除: 関連するすべてのリソースとともにユーザーを安全に削除
- アクセス許可境界のサポート: セキュリティを強化するためのアクセス許可境界の設定
- 信頼ポリシーの検証: ロールの JSON 信頼ポリシーを検証
- 読み取り専用モード: あらゆる変更を防止する読み取り専用モードでのサーバー実行
ベストプラクティスの統合
- AWS IAM のセキュリティベストプラクティスに準拠
- 最小権限の原則をサポート
- 機密性の高い操作に対する警告を提供
- 包括的なエラーハンドリングを搭載
インストール
# Install using uv (recommended)
uv tool install awslabs.iam-mcp-server
# Or install using pip
pip install awslabs.iam-mcp-server
設定
AWS 認証情報
このサーバーには AWS 認証情報の設定が必要です。以下のいずれかの方法を使用できます。
-
AWS プロファイル(推奨):
export AWS_PROFILE=your-profile-name -
環境変数:
export AWS_ACCESS_KEY_ID=your-access-key
export AWS_SECRET_ACCESS_KEY=your-secret-key
export AWS_REGION=us-east-1 -
IAM ロール(EC2/Lambda 向け): AWS サービス上で実行されている場合、サーバーは自動的に IAM ロールを使用します。
必要な IAM 権限
このサーバーが使用する AWS 認証情報には、以下の 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": "*"
}
]
}
MCP クライアントの設定
Kiro
~/.kiro/settings/mcp.json に以下を追加します。
{
"mcpServers": {
"awslabs.iam-mcp-server": {
"command": "uvx",
"args": ["awslabs.iam-mcp-server@latest"],
"env": {
"AWS_PROFILE": "your-aws-profile",
"AWS_REGION": "us-east-1",
"FASTMCP_LOG_LEVEL": "ERROR"
}
}
}
}
Cline
cline_mcp_settings.json に以下を追加します。
{
"mcpServers": {
"awslabs.iam-mcp-server": {
"command": "uvx",
"args": ["awslabs.iam-mcp-server@latest"],
"env": {
"AWS_PROFILE": "your-aws-profile",
"AWS_REGION": "us-east-1",
"FASTMCP_LOG_LEVEL": "ERROR"
}
}
}
}
Windows でのインストール
Windows ユーザーの場合、MCP サーバーの設定形式は少し異なります。
{
"mcpServers": {
"awslabs.iam-mcp-server": {
"disabled": false,
"timeout": 60,
"type": "stdio",
"command": "uv",
"args": [
"tool",
"run",
"--from",
"awslabs.iam-mcp-server@latest",
"awslabs.iam-mcp-server.exe"
],
"env": {
"FASTMCP_LOG_LEVEL": "ERROR",
"AWS_PROFILE": "your-aws-profile",
"AWS_REGION": "us-east-1"
}
}
}
}
ワンクリックインストール
| Kiro | Cursor | VS Code |
|---|---|---|
手動設定
.cursor/mcp.json に以下を追加します。
{
"mcpServers": {
"awslabs.iam-mcp-server": {
"command": "uvx",
"args": ["awslabs.iam-mcp-server@latest"],
"env": {
"AWS_PROFILE": "your-aws-profile",
"AWS_REGION": "us-east-1",
"FASTMCP_LOG_LEVEL": "ERROR"
}
}
}
}
読み取り専用モード
このサーバーは、読み取り操作は許可しつつ、すべての変更操作を防止する読み取り専用モードをサポートしています。これは次のような用途に役立ちます。
- 安全性: 本番環境での誤った変更を防止
- テスト: 変更のリスクなしに IAM リソースを安全に探索
- 監査: 読み取りアクセスのみを許可すべき環境でのサーバー実行
読み取り専用モードの有効化
サーバーの起動時に --readonly フラグを追加します。
# Using uvx
uvx awslabs.iam-mcp-server@latest --readonly
# Or if installed locally
python -m awslabs.iam_mcp_server.server --readonly
読み取り専用モードでの MCP クライアント設定
Kiro
{
"mcpServers": {
"awslabs.iam-mcp-server": {
"command": "uvx",
"args": ["awslabs.iam-mcp-server@latest", "--readonly"],
"env": {
"AWS_PROFILE": "your-aws-profile",
"AWS_REGION": "us-east-1"
}
}
}
}
その他の MCP クライアント
MCP 設定の args 配列に "--readonly" を追加するだけです。
読み取り専用モードでブロックされる操作
読み取り専用モードが有効な場合、以下の操作はエラーを返します。
create_userdelete_usercreate_roleattach_user_policydetach_user_policycreate_access_keydelete_access_key
読み取り専用モードで利用可能な操作
以下の操作は通常どおり動作します。
list_usersget_userlist_roleslist_policiessimulate_principal_policy
利用可能なツール
ユーザー管理
list_users
アカウント内の IAM ユーザーを一覧表示します。オプションでフィルタリングが可能です。
パラメータ:
path_prefix(オプション): ユーザーをフィルタリングするパスプレフィックス(例: "/division_abc/")max_items(オプション): 返すユーザーの最大数(デフォルト: 100)
get_user
アタッチされたポリシー、グループ、アクセスキーを含む、特定の IAM ユーザーの詳細情報を取得します。
パラメータ:
user_name: 取得する IAM ユーザーの名前
create_user
新しい IAM ユーザーを作成します。
パラメータ:
user_name: 新しい IAM ユーザーの名前path(オプション): ユーザーのパス(デフォルト: "/")permissions_boundary(オプション): アクセス許可境界ポリシーの ARN
delete_user
IAM ユーザーを削除します。オプションで強制クリーンアップが可能です。
パラメータ:
user_name: 削除する IAM ユーザーの名前force(オプション): アタッチされているすべてのリソースを先に削除して強制削除する(デフォルト: false)
ロール管理
list_roles
アカウント内の IAM ロールを一覧表示します。オプションでフィルタリングが可能です。
パラメータ:
path_prefix(オプション): ロールをフィルタリングするパスプレフィックス(例: "/service-role/")max_items(オプション): 返すロールの最大数(デフォルト: 100)
create_role
信頼ポリシーを持つ新しい IAM ロールを作成します。
パラメータ:
role_name: 新しい IAM ロールの名前assume_role_policy_document: JSON 形式の信頼ポリシードキュメントpath(オプション): ロールのパス(デフォルト: "/")description(オプション): ロールの説明max_session_duration(オプション): 最大セッション時間(秒単位、デフォルト: 3600)permissions_boundary(オプション): アクセス許可境界ポリシーの ARN
グループ管理
list_groups
アカウント内の IAM グループを一覧表示します。オプションでフィルタリングが可能です。
パラメータ:
path_prefix(オプション): グループをフィルタリングするパスプレフィックス(例: "/division_abc/")max_items(オプション): 返すグループの最大数(デフォルト: 100)
get_group
メンバー、アタッチされたポリシー、インラインポリシーを含む、特定の IAM グループの詳細情報を取得します。
パラメータ:
group_name: 取得する IAM グループの名前
create_group
新しい IAM グループを作成します。
パラメータ:
group_name: 新しい IAM グループの名前path(オプション): グループのパス(デフォルト: "/")
delete_group
IAM グループを削除します。オプションで強制クリーンアップが可能です。
パラメータ:
group_name: 削除する IAM グループの名前force(オプション): すべてのメンバーとポリシーを先に削除して強制削除する(デフォルト: false)
add_user_to_group
ユーザーを IAM グループに追加します。
パラメータ:
group_name: IAM グループの名前user_name: IAM ユーザーの名前
remove_user_from_group
ユーザーを IAM グループから削除します。
パラメータ:
group_name: IAM グループの名前user_name: IAM ユーザーの名前
attach_group_policy
マネージドポリシーを IAM グループにアタッチします。
パラメータ:
group_name: IAM グループの名前policy_arn: アタッチするポリシーの ARN
detach_group_policy
マネージドポリシーを IAM グループからデタッチします。
パラメータ:
group_name: IAM グループの名前policy_arn: デタッチするポリシーの ARN
ポリシー管理
list_policies
アカウント内の IAM ポリシーを一覧表示します。
パラメータ:
scope(オプション): 一覧表示するポリシーのスコープ。"All"、"AWS"、"Local" のいずれか(デフォルト: "Local")only_attached(オプション): アタッチされているポリシーのみを返す(デフォルト: false)path_prefix(オプション): ポリシーをフィルタリングするパスプレフィックスmax_items(オプション): 返すポリシーの最大数(デフォルト: 100)
attach_user_policy
マネージドポリシーを IAM ユーザーにアタッチします。
パラメータ:
user_name: IAM ユーザーの名前policy_arn: アタッチするポリシーの ARN
detach_user_policy
マネージドポリシーを IAM ユーザーからデタッチします。
パラメータ:
user_name: IAM ユーザーの名前policy_arn: デタッチするポリシーの ARN
アクセスキー管理
create_access_key
IAM ユーザーの新しいアクセスキーを作成します。
パラメータ:
user_name: IAM ユーザーの名前
⚠️ セキュリティ警告: シークレットアクセスキーは一度しか返されず、後から再取得することはできません。
delete_access_key
IAM ユーザーのアクセスキーを削除します。
パラメータ:
user_name: IAM ユーザーの名前access_key_id: 削除するアクセスキー ID
セキュリティ分析
simulate_principal_policy
プリンシパルに対する IAM ポリシー評価をシミュレートして権限をテストします。
パラメータ:
policy_source_arn: シミュレートするユーザーまたはロールの ARNaction_names: シミュレートするアクションのリストresource_arns(オプション): テスト対象のリソース ARN のリストcontext_entries(オプション): シミュレーション用のコンテキストエントリ
インラインポリシー管理
put_user_policy
IAM ユーザーのインラインポリシーを作成または更新します。
パラメータ:
user_name: IAM ユーザーの名前policy_name: インラインポリシーの名前policy_document: JSON 形式のポリシードキュメント(文字列または dict)
get_user_policy
IAM ユーザーのインラインポリシーを取得します。
パラメータ:
user_name: IAM ユーザーの名前policy_name: インラインポリシーの名前
delete_user_policy
IAM ユーザーからインラインポリシーを削除します。
パラメータ:
user_name: IAM ユーザーの名前policy_name: 削除するインラインポリシーの名前
list_user_policies
IAM ユーザーのすべてのインラインポリシーを一覧表示します。
パラメータ:
user_name: IAM ユーザーの名前
put_role_policy
IAM ロールのインラインポリシーを作成または更新します。
パラメータ:
role_name: IAM ロールの名前policy_name: インラインポリシーの名前policy_document: JSON 形式のポリシードキュメント(文字列または dict)
get_role_policy
IAM ロールのインラインポリシーを取得します。
パラメータ:
role_name: IAM ロールの名前policy_name: インラインポリシーの名前
delete_role_policy
IAM ロールからインラインポリシーを削除します。
パラメータ:
role_name: IAM ロールの名前policy_name: 削除するインラインポリシーの名前
list_role_policies
IAM ロールのすべてのインラインポリシーを一覧表示します。
パラメータ:
role_name: IAM ロールの名前
使用例
基本的なユーザー管理
# List all users
users = await list_users()
# Get specific user details
user_details = await get_user(user_name="john.doe")
# Create a new user
new_user = await create_user(
user_name="jane.smith",
path="/developers/"
)
# Delete a user (with force cleanup)
await delete_user(user_name="old.user", force=True)
ロール管理
# Create a role for EC2 instances
trust_policy = {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {"Service": "ec2.amazonaws.com"},
"Action": "sts:AssumeRole"
}
]
}
role = await create_role(
role_name="EC2-S3-Access-Role",
assume_role_policy_document=json.dumps(trust_policy),
description="Role for EC2 instances to access S3"
)
グループ管理
# Create a new group
group = await create_group(
group_name="Developers",
path="/teams/"
)
# Add users to the group
await add_user_to_group(
group_name="Developers",
user_name="john.doe"
)
# Attach a policy to the group
await attach_group_policy(
group_name="Developers",
policy_arn="arn:aws:iam::123456789012:policy/DeveloperPolicy"
)
# Get group details including members
group_details = await get_group(group_name="Developers")
ポリシー管理
# List customer managed policies
policies = await list_policies(scope="Local", only_attached=True)
# Attach a policy to a user
await attach_user_policy(
user_name="developer",
policy_arn="arn:aws:iam::123456789012:policy/DeveloperPolicy"
)
セキュリティテスト
# Test if a user can perform specific actions
simulation = await simulate_principal_policy(
policy_source_arn="arn:aws:iam::123456789012:user/developer",
action_names=["s3:GetObject", "s3:PutObject"],
resource_arns=["arn:aws:s3:::my-bucket/*"]
)
インラインポリシー管理
# Create an inline policy for a user
policy_document = {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
await put_user_policy(
user_name="developer",
policy_name="S3AccessPolicy",
policy_document=policy_document
)
# Retrieve an inline policy
policy = await get_user_policy(
user_name="developer",
policy_name="S3AccessPolicy"
)
# List all inline policies for a user
policies = await list_user_policies(user_name="developer")
# Create an inline policy for a role
await put_role_policy(
role_name="EC2-S3-Access-Role",
policy_name="S3ReadOnlyPolicy",
policy_document={
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "*"
}
]
}
)
# Delete an inline policy
await delete_user_policy(
user_name="developer",
policy_name="S3AccessPolicy"
)
セキュリティのベストプラクティス
- 最小権限の原則: 常に必要最小限の権限のみを付与する
- アプリケーションにはロールを使用: アプリケーションにはユーザーではなく IAM ロールを優先する
- 定期的なアクセスレビュー: 未使用のユーザーと権限を定期的に確認してクリーンアップする
- アクセスキーのローテーション: アクセスキーを定期的にローテーションする
- MFA の有効化: 可能な限り多要素認証を使用する
- アクセス許可境界: アクセス許可境界を使用して最大権限を設定する
- ポリシーシミュレーション: 本番環境に適用する前にポリシーをテストする
- マネージドポリシーの優先: 再利用可能な権限にはインラインポリシーよりマネージドポリシーを使用する
- インラインポリシーのガイドライン: インラインポリシーは単一のアイデンティティに固有の権限にのみ使用する
エラーハンドリング
このサーバーは、わかりやすいメッセージによる包括的なエラーハンドリングを提供します。
- 認証エラー: 認証情報の問題に関する明確なメッセージ
- 権限エラー: 不足している権限に関する具体的な情報
- リソースが見つからない場合: リソースが存在しない場合の役立つメッセージ
- 検証エラー: 無効なパラメータに関する詳細なフィードバック
開発
テストの実行
# Install development dependencies
uv sync --dev
# Run tests
uv run pytest
# Run tests with coverage
uv run pytest --cov=awslabs.iam_mcp_server
ローカル開発
# Install in development mode
uv pip install -e .
# Run the server directly
python -m awslabs.iam_mcp_server.server
コントリビューション
コントリビューションを歓迎します。ガイドラインについては、メインリポジトリの CONTRIBUTING.md を参照してください。
ライセンス
このプロジェクトは Apache License 2.0 の下でライセンスされています。詳細については LICENSE ファイルを参照してください。
サポート
問題や質問がある場合:
- AWS IAM ドキュメント を確認する
- MCP 仕様 を確認する
- GitHub リポジトリ で issue を作成する
変更履歴
バージョン履歴と変更内容については CHANGELOG.md を参照してください。