Amazon Bedrock 経由の Claude Code に SAML 認証を設定する
はじめに
こんにちは、AI 事業本部の Kanaru です。
Claude Code や Cowork を企業で導入するにあたってはさまざまな方法があります。中でも今回は、Amazon Bedrock 経由でのモデル使用を想定した、Claude Code / Cowork についてフォーカスします。この構成の構築には AWS が提供するソリューション Guidance for Claude Code and Cowork on Amazon Bedrock が便利です。しかし、このソリューションには認証方法として SAML の直接的なサポートがありません。そこで、本記事では、Guidance for Claude Code and Cowork on Amazon Bedrock で間接的に SAML 認証を使用する方法を紹介します。
対象読者
- Claude Code / Cowork で Bedrock 経由のモデルを使用したい人
- Guidance for Claude Code and Cowork on Amazon Bedrock の認証に既存の ID プロバイダの SAML を使用したい人
本記事で紹介しないこと
SSO 認証以外の Guidance for Claude Code and Cowork on Amazon Bedrock を使用した構築方法は紹介しません。以下の記事を参照してください。
前提条件
以下の条件で検証しています。今回は SAML のプロバイダとして EC2 上に構築した Keycloak を使用しています。
- macOS Tahoe 26.4.1
- EC2
- t4g.medium
- Amazon Linux 2023
- Keycloak 26.6.2
概要
今回は、Cognito User Pool を新規に作成し、そこに外部プロバイダとして SAML の ID プロバイダを紐づける方針にします。

[AWS] Cognito User Pool のデプロイ
AWS 関連の作業になります。Cognito User Pool を作成します。
まずは、リポジトリをクローンします。
git clone https://github.com/aws-solutions-library-samples/guidance-for-claude-code-with-amazon-bedrock.git
cd guidance-for-claude-code-with-amazon-bedrock
ドキュメント に従い、Cognito User Pool をデプロイします。
aws cloudformation deploy \
--template-file deployment/infrastructure/cognito-user-pool-setup.yaml \
--stack-name claude-code-user-pool \
--capabilities CAPABILITY_IAM \
--parameter-overrides \
UserPoolName=<ユーザープール名> \
DomainPrefix=<ドメイン> \
CallbackURLs=http://localhost:8400/callback
適宜、<ユーザープール名> と <ドメイン> を置き換えてください。なお、<ドメイン> は、アカウントに関わらず同一リージョンで一意の値である必要があるので注意してください。
[IdP] SAML クライアントの作成
続いて、ID プロバイダ側での作業です。今回は Keycloak を例に説明しますが、お使いの ID プロバイダに合わせた設定をするようにお願いします。基本的には、以下のドキュメントに従って進行します。
まずは、対象の realm を選択します。今回は新しく saml-test という realm を作成しました。

続いて、clients → Create client からクライアントを作成します。以下の通り項目を設定します。
- Client type:
SAML - Client ID:
urn:amazon:cognito:sp:<ユーザープール名> - Valid redirect URIs:
https://<ドメイン>.auth.<リージョン>.amazoncognito.com/saml2/idpresponse


[IdP] マッピングの設定
SSO でログインした際、ID プロバイダから Cognito にユーザー情報を渡す必要があります。上記方法で作成したユーザープールは preferred_username と email を要求します。ここからは、これらを適切に渡す設定をします。
引き続き、ID プロバイダでの設定です。Clients ページから先ほど作成したクライアントを選択します。Client scopes → urn:amazon:cognito:sp:<ユーザープール名>-dedicated → Configure a new mapper と選択します。

下の方に User Property とあるので、それを選択し、次のように設定します。
- Mapper type: User Property
- Name: email
- Property: email
- Friendly Name: email
- SAML Attribute Name: email
- SAML Attribute NameFormat: Basic
追加できたら、さらに Add mapper → By configuration をクリックし、同様の設定をします。
- Mapper type: User Property
- Name: username
- Property: username
- Friendly Name: username
- SAML Attribute Name: username
- SAML Attribute NameFormat: Basic
[IdP] メタデータの取得
ユーザープールに渡す SAML のメタデータを取得します。Realm settings → SAML 2.0 Identity Provider Metadata から飛べる XML ファイルをダウンロードします。

[AWS] 自己登録の無効化
ユーザープールに外部プロバイダを追加するためには、自己登録を無効化する必要があります。これは、アカウントを持っていない人が自分でアカウントを作成できる機能です。
ここからは、AWS の作業です。
デプロイが完了したら、Cognito のコンソール画面に移動し、作成された User Pool を選択します。
左側のサイドバーから 認証 → サインアップ → セルフサービスのサインアップ に移動し、自己登録の有効化 のチェックを外します。
以下のようになっていれば成功です。

[AWS] 外部プロバイダーの追加
ユーザープールに外部プロバイダーを追加します。引き続き、AWS での作業です。
左側のサイドバーから 認証 → ソーシャルプロバイダーと外部プロバイダー → アイデンティティプロバイダーを追加 を押します。
アイデンティティ は SAML を選択します。プロバイダー名 には好きな名前を入れて大丈夫です。ここで設定した名前はログイン画面に表示されます。
メタデータドキュメントには先ほどダウンロードした XML ファイルをアップロードします。
SAML プロバイダーとユーザープールの間で属性をマッピング は次のように設定します。
| ユーザープール属性 | SAML 属性 |
|---|---|
| preferred_username | username |

アイデンティティプロバイダーを追加 ボタンをクリックして完了です。
次のような表記になっていれば成功です。

[AWS] アプリケーションクライアントとの紐付け
最後に、追加したプロバイダーを使えるようにします。引き続き、AWS での作業です。
左側のサイドバーから、アプリケーション → アプリケーションクライアント → claude-code-auth-client を選択します。ログインページ タブから、マネージドログインページの設定 の編集をクリックします。
ID プロバイダー を先ほど作成したプロバイダーに変更して、変更を保存 します。

次のようになっていれば成功です。

動作確認
実際に、Guidance for Claude Code and Cowork on Amazon Bedrock の設定ファイルをインストールした状態で Claude Code を開きます。正しく設定できていれば、SSO のログイン画面に遷移します。ログインして Claude Code に戻り、モデルが Bedrock になっていれば成功です。
お疲れ様でした。

おわりに
本来、Guidance for Claude Code and Cowork on Amazon Bedrock では SAML を直接サポートしていませんが、今回は Cognito User Pool を活用することで間接的に SAML の SSO ログインを実現しました。Cognito User Pool のデプロイ自体もソリューション内で用意されているという意味でも、今回の方法は非常に現実的な選択肢になるかと思います。
ぜひ試してみてください。










