Claude CodeにMCP経由で複数のAWSアカウントを参照させてみる

Claude CodeにMCP経由で複数のAWSアカウントを参照させてみる

Claude Codeに複数のAWSアカウントを参照させたいという思いから、AWS MCP Serverを使った設定方法をまとめました。 安全かつ効率的にマルチアカウント環境を参照させる方法を紹介します。
2026.10.12

はじめに

皆様こんにちは、あかいけです。
Claude Codeへ複数のAWSアカウントを参照させたいと思ったことはありますか?私はあります。

ただ1アカウントずつ手でスイッチロールするのは現実的ではないので、Claude CodeにAWS MCP Serverをつないで調べてもらうことにしました。
というわけで今回は、Claude Codeに複数のAWSアカウントを横断参照させる設定をまとめます。

前提条件

  • ベースアカウントから、参照対象の各AWSアカウントへスイッチロールするためのIAMロールが、スイッチロール先のアカウントへ展開されていること
    • ロール名は全アカウントで統一されていると設定が楽です
  • スイッチロール先のIAMロールには、基本的に参照権限のみが付与されていること
    • AIに触らせるときは参照権限だけにするのが原則だと考えています。詳しくは後述します
  • AWS CLI 2.32.0以降がインストールされていること
    • aws loginコマンドの利用に必要なバージョンです
  • uv(uvx)がインストールされていること

認証にはaws loginを使います。
なおIAM Identity Centerを使っている場合は起点プロファイルの定義がsso_sessionを使う形に変わりますが、そこから先のスイッチロールとMCP設定は同じです。

https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sign-in.html

認証フロー

本ブログで行う設定は以下のとおりです。

  1. ベースアカウントを起点に、各アカウントへスイッチロールするプロファイルをAWS CLIの設定ファイルに定義する
  2. そのプロファイル名をMCP設定でまとめてプロキシに渡す

認証情報のチェーンはこのようになります。
ブラウザで認証するのは起点のプロファイルの1回のみで、各アカウントへのスイッチロールはそのセッションから派生します。

リクエストの流れは以下のとおりです。
Claude Codeはツール呼び出しのたびにaws_profileパラメータで対象アカウントを指定できるため、MCPサーバーの再起動は不要です。

このaws_profileによる切り替えは、AWS MCP ServerをSigV4認証で使うときに限って提供される機能です。
OAuth認証の場合はセッションが1つのIAMロールに固定されるため、アカウントを切り替えるたびに再認証が必要になります。

https://docs.aws.amazon.com/agent-toolkit/latest/userguide/multi-account-access.html

設定内容

スイッチロール元のIAMユーザー

ベースアカウントに置く、aws loginでサインインするIAMユーザーです。
必要な権限は2つあります。

1つ目はaws loginでコンソール認証情報を使うための権限で、AWS管理ポリシーのSignInLocalDevelopmentAccessをアタッチします。

SignInLocalDevelopmentAccess(AWS管理ポリシー)
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "signin:AuthorizeOAuth2Access",
        "signin:CreateOAuth2Token"
      ],
      "Resource": "arn:aws:signin:*:*:oauth2/public-client/*"
    }
  ]
}

https://docs.aws.amazon.com/ja_jp/aws-managed-policy/latest/reference/SignInLocalDevelopmentAccess.html

2つ目は各アカウントへスイッチロールするための権限です。
こちらはインラインポリシーで付けます。

スイッチロール元の許可ポリシー
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AssumeReadOnlyRoleInTargetAccounts",
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::*:role/AIAgentReadOnlyRole"
    }
  ]
}

スイッチロール先のIAMロール

参照対象の各アカウントに展開するロールです。
ここではAIAgentReadOnlyRoleという名前で、全アカウントに同名で配置されている前提とします。

許可ポリシーは、「ReadOnlyAccess」をアタッチします。

https://docs.aws.amazon.com/ja_jp/aws-managed-policy/latest/reference/ReadOnlyAccess.html

信頼ポリシーは、ベースアカウントからのみ引き受けられるようにします。

スイッチロール先の信頼ポリシー
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::XXXXXXXXXXXX:root"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

AWS CLI 設定ファイル

プロファイル定義です。
~/.aws/configに直接書いてもよいのですが、今回は専用のファイルに分けています。

/Users/example/work/aws-audit/aws-config
# 起点 プロファイル
[profile hub-account]
region = ap-northeast-1
output = json

# スイッチロール先 プロファイル
[profile network-account]
source_profile = hub-account
role_arn = arn:aws:iam::YYYYYYYYYYYY:role/AIAgentReadOnlyRole
role_session_name = claude-code
region = ap-northeast-1
output = json

[profile security-account]
source_profile = hub-account
role_arn = arn:aws:iam::ZZZZZZZZZZZZ:role/AIAgentReadOnlyRole
role_session_name = claude-code
region = ap-northeast-1
output = json

[profile workload-prd-account]
source_profile = hub-account
role_arn = arn:aws:iam::AAAAAAAAAAAA:role/AIAgentReadOnlyRole
role_session_name = claude-code
region = ap-northeast-1
output = json

MCP 設定ファイル

プロジェクト直下の.mcp.jsonです。

.mcp.json
{
  "mcpServers": {
    "aws-audit": {
      "command": "uvx",
      "args": [
        "mcp-proxy-for-aws-cli@latest",
        "https://aws-mcp.ap-northeast-1.api.aws/mcp",
        "--metadata",
        "AWS_REGION=ap-northeast-1"
      ],
      "env": {
        "AWS_CONFIG_FILE": "/Users/example/work/aws-audit/aws-config",
        "AWS_MCP_PROXY_PROFILES": "hub-account network-account security-account workload-prd-account"
      }
    }
  }
}

各種設定について

IAMは参照権限のみに絞る

この設定で安全性を担保するには、スイッチロール先のロールに参照権限しか与えていない点です。

まず前提として、AIエージェントに渡すロールは参照権限のみにするのが原則だと考えています。
理由は、エージェントの判断ミスがそのまま本番環境の変更になるからです。
調査の過程で「設定を直しておきますね」と動かれても困りますし、プロンプトインジェクションのような外部要因で意図しない操作が走る可能性も残ります。
そういった場合、参照権限しか持たないロールであれば、何が起きてもRead権限以上のことはできません。

なお今回はReadOnlyAccessを使っていますが、「S3のオブジェクトを読ませたくない!」など要件があれば、用途に応じてViewOnlyAccessを使ってもいいかもです。

https://docs.aws.amazon.com/ja_jp/aws-managed-policy/latest/reference/ViewOnlyAccess.html

スイッチロール元のIAMユーザー側も、sts:AssumeRoleの対象をAIAgentReadOnlyRoleというロール名に限定しています。
これでベースアカウントの認証情報を勝手に使われたとしても、引き受けられるのは参照専用のロールだけになります。

起点プロファイルとaws login

aws loginは起点プロファイルを指定します。

export AWS_CONFIG_FILE=/Users/example/work/aws-audit/aws-config
aws login --profile hub-account

ブラウザが開くので、ベースアカウントのIAMユーザーでサインインします。
すでにマネジメントコンソールにサインイン済みであれば、そのセッションを選ぶだけでOKです。

スイッチロールのプロファイル

source_profile = hub-accountを指定することで、起点プロファイルの認証情報を使ってAssumeRoleするチェーンが組まれます。
aws loginで得たセッションも、このチェーンの起点としてそのまま使えます。

アカウントが増えてもこのブロックを並べるだけなので、アカウント一覧のCSVなどがあるならスクリプトで生成してしまってもいいでしょう。

あとrole_session_nameはCloudTrailに記録されるので、あとからAIエージェント経由の操作だと追跡できる値がおすすめです。

MCP設定で渡している環境変数

envで渡している2つの設定がポイントです。

AWS_CONFIG_FILEで、先ほど作った専用の設定ファイルを指定しています。
これにより、普段使っている~/.aws/configのプロファイルとは完全に分離できます。

AWS_MCP_PROXY_PROFILESは、プロキシに使わせるプロファイルをスペース区切りで列挙する環境変数です。
ここに書いたプロファイルだけが、ツール呼び出し時のaws_profileパラメータの選択肢になります。先頭のhub-accountがデフォルトとして使われ、aws_profileを省略した呼び出しはこのプロファイルで実行されます。

ここで 重要なのは列挙していないプロファイルは使えない という点です。
設定ファイルに書いてあっても、ここに名前がなければClaude Codeからは見えませんし、指定してもエラーで弾かれます。
明示的な許可リストとして機能してくれるので、「意図しないアカウントを参照される」事故を構造的に防げます。

またプロジェクトごとに.mcp.jsonを分けることで、プロジェクト単位で参照できるAWSアカウントを分離できます。

動作確認

まずはAWS CLI単体で、スイッチロールが通ることを確認します。

export AWS_CONFIG_FILE=/Users/example/work/aws-audit/aws-config

# 起点
aws sts get-caller-identity --profile hub-account

# スイッチロール先
aws sts get-caller-identity --profile security-account

スイッチロール先では、引き受けたロールのARNが返ってくるはずです。

{
    "UserId": "AROAEXAMPLEID:claude-code",
    "Account": "ZZZZZZZZZZZZ",
    "Arn": "arn:aws:sts::ZZZZZZZZZZZZ:assumed-role/AIAgentReadOnlyRole/claude-code"
}

問題なく参照できたらClaude Codeを起動し、/mcpでサーバーが接続できているかを確認します。

あとは普通に日本語で聞くだけです。

security-account と workload-prd-account の2つのアカウントで、
パブリックアクセスを許可しているS3バケットがないか確認して

Claude Codeがアカウントごとにaws_profileを指定してツールを呼び分けてくれるので、アカウント横断の調査を自然言語で投げられるようになります。

さいごに

以上、AWSプロファイルとMCP設定を組み合わせて、Claude Codeに複数のAWSアカウントを参照させる方法でした。
やっていることは単純ですが、アカウント横断で調査する作業はそれなりに骨が折れる作業なので、個人的にはめっちゃ助かっています。

同じようにマルチアカウント環境でAIエージェントを使いたい方の参考になれば幸いです。


Claudeならクラスメソッドにお任せください

クラスメソッドは、Anthropic社とリセラー契約を締結しています。各種製品ガイドから、業種別の活用法、フェーズごとのお悩み解決などサービス支援ページにまとめております。まずはご覧いただき、お気軽にご相談ください。

サービス詳細を見る

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事