AWS GenU で Claude Sonnet 4 を有効化し Entra で SSO する
はじめに
プログデンスの圓佛です。 AWS は GenU (Generative AI Use Cases) という生成 AI のユースケースを集めたサンプルアプリケーションを公開しています。 GenU は以下などの機能を備えています。
- チャット
- 音声チャット
- 文章生成
- 要約
- 執筆
- 翻訳
- Web コンテンツ抽出
- 画像生成
- 動画生成
- 映像分析
- ダイアグラム生成
「サンプルアプリケーション」と言いながら完成度が高く、十分に実践的な利用が可能です。 GenU 自体は GitHub で OSS として公開されており、はじめての Contribution ガイド などを参考にしながら GenU をカスタマイズした内容を Pull Request することも可能です。
GenU のデプロイ自体は非常に簡単で Deployment にの手順を実行すれば 10 分程度で利用出来るようになります。 ですが、オプションを指定せずにデプロイすると「ローカル認証なアプリケーション」として構築されます。 これでは「ログインフォームから誰でも新規ユーザを作成出来る」状態となってしまい、セキュリティの観点からは好ましくありません。 GenU は SSO (シングルサインオン) にも対応しており、例えば Microsoft Entra ID and SAML Integration の手順に従って設定することで Microsoft Entra ID で SSO させることも出来ます。 今回は「GenU を SSO 設定する方法」を AWS / Entra 両面から記載します。
尚、Introducing Claude 4 in Amazon Bedrock, the most powerful models for coding from Anthropic に書かれていますが AWS でも Calaude Opus 4 と Calaude Sonnet 4 が利用可能になっています。 合わせて、Claude Sonnet 4 も有効化します。
設定の流れ
設定の流れは以下の通りです。
- [作業用端末] awscli をインストールする
- [AWS] Bedrock で推論モデルを有効化する
- [AWS] GenU をデプロイする
- [AWS] Cognito でドメインを作成する
- [Entra] エンタープライズアプリケーションを作成する
- [AWS] Cognito に設定を追加する
- [AWS] GenU を再デプロイする
- [AWS] GenU へログインする
1. [作業用端末] awscli をインストールする
GenU のデプロイ作業用端末に awscli をインストールし、初期設定を行います。 awscli のインストール方法は幾つかありますが、私の環境 (macOS) では mise を使ってインストールしました。
mise install awscli@latest
mise use --global awscli@latest
インストール後は aws configure
を実行してアクセスキーやシークレットキーなどの初期設定を行います。 GenU をデプロイする際は様々な権限が必要になります。 その為、不慣れなうちは (セキュリティ的にはお勧め出来ませんが…) AdministratorAccess などの強い権限を割り当てておくと、エラーの発生は回避しやすいです。
$ aws configure
AWS Access Key ID [None]: 12345678901234567890
AWS Secret Access Key [None]: 1234567890123456789012345678901234567890
Default region name [None]: ap-northeast-1
Default output format [None]: json
2. [AWS] Bedrock で推論モデルを有効化する
GenU で利用する推論モデルを事前に Bedrock で有効化します。 最新の推論モデルを利用する為、(東京リージョンなどでは無く) 米国 (バージニア北部) リージョンで作業を行います。 Bedrock へアクセスしたら モデルアクセス
をクリックします。
推論モデルを個別に選択し、必要なものだけを有効化することも出来ますが、全てのモデルを有効化することも出来ます。 今回は 全てのモデルを有効にする
をクリックします。
有効化対象のモデル一覧が表示されます。 次へ
をクリックします。
最終確認画面が表示されます。 送信
をクリックします。
3. [AWS] GenU をデプロイする
GenU をデプロイしていきます。 この時点ではまだ SSO 化されません (デプロイした後で必要な情報を収集し、後の手順で SSO を有効化します)。 まず GitHub から GenU をクローンします。
git clone https://github.com/aws-samples/generative-ai-use-cases.git
cd generative-ai-use-cases/
Deployment に書かれている以下のコマンドを実行し、GenU をデプロイします。 npm run cdk:deploy:quick
の実行が完了するには 5 〜 10 分程度かかりました。
npm ci
npx -w packages/cdk cdk bootstrap
npm run cdk:deploy:quick
インストールが完了するとログの最下部に GenU のログイン URL が表示されます。
・
・
・
GenerativeAiUseCasesStack.WebUrl = https://1234567890123.cloudfront.net
Stack ARN:
arn:aws:cloudformation:ap-northeast-1:123456789012:stack/GenerativeAiUseCasesStack/12345678-1234-1234-1234-123456789012
✨ Total time: 383.81s
CloudFormation スタックを確認すると GenU がデプロイされたことが分かります。
インストールログに表示されていた GenU の URL へアクセスするとログイン画面が表示されます。 SSO を有効化しないのであれば、この状態で GenU を利用可能です。
4. [AWS] Cognito でドメインを作成する
GenU をデプロイした直後の状態では「Cognito はローカル認証で構築」されている為、これを Entra ID による SSO 設定へ変更していきます。 CloudFormation スタックの リソース
→ Auth
→ AuthUserPool
から表示されている 物理 ID
をクリックします。
Cognito の画面に遷移します。 この時点で ユーザープール ID
を控えておきます。 ドメイン
をクリックします。
Cognito ドメインの作成
をクリックします。
Cognito ドメインを入力し、Cognito ドメインの作成
をクリックします。
これで Cognito にドメインが設定されました。
5. [Entra] エンタープライズアプリケーションを作成する
次は Entra ID 側に SSO 用のエンタープライズアプリケーションを作成していきます。 Azure Portal へログインしたら Microsoft Entra ID
をクリックします。
エンタープライズアプリケーション
をクリックします。
新しいアプリケーション
をクリックします。
エンタープライズアプリケーションに人間が識別しやすい名前を入力します。 作成
をクリックします。
シングルサインオン
をクリックします。
SAML
をクリックします。
基本的な SAML 構成
の 編集
をクリックします。
識別子
と 応答 URL
を入力します。 入力形式は Microsoft Entra ID Configuration で以下のように記載されています。
Identifier (Entity ID)
# Format urn:amazon:cognito:sp:<UserPoolID> # Example urn:amazon:cognito:sp:ap-northeast-1_p0oD4M3F0
Reply URL (Assertion Consumer Service URL)
# Format https://<your-entered-value>.auth.yourRegion.amazoncognito.com/saml2/idpresponse # Example https://your-preferred-name.auth.ap-northeast-1.amazoncognito.com/saml2/idpresponse
これを表にすると以下のようになります。
項目 | Cognito での値 (例) | エンタープライズアプリケーションへの設定値 |
---|---|---|
識別子 | ユーザプール ID が ap-northeast-1_ABCDEFGHI
|
urn:amazon:cognito:sp:ap-northeast-1_ABCDEFGHI |
応答 URL | ドメインの値が abcdefg.auth.ap-northeast-1.amazoncognito.com
|
https://abcdefg.auth.ap-northeast-1.amazoncognito.com/saml2/idpresponse |
Cognito の設定値に応じて 識別子
と 応答 URL
を入力したら 保存
をクリックします。
Cognito に設定するエンタープライアプリケーション側の設定をダウンロードします。 フェデレーションメタデータ XML
の ダウンロード
をクリックし、XML ファイルをダウンロードしておきます。
最後に「認証を許可するユーザとグループ」の設定を行います。 今回は「Entra 上に存在するユーザは全て許可」しますので プロパティ
→ 割り当てが必要ですか?
を いいえ
に設定し、保存
をクリックします。 これで Entra 側の設定は完了です。
[AWS] Cognito に設定を追加する
Entra のエンタープライズアプリケーションで発行された情報を Cognito に追加設定します。 ソーシャルプロパイダーと外部プロパイダー
をクリックします。
アイデンティティプロパイダーを追加
をクリックします。
SAML
をクリックします。 クリックすると画面の下部に入力可能なパラメータが表示されます。
以下を設定します。 値を入力したら アイデンティティプロパイダーを追加
をクリックします。
項目 | 値 |
---|---|
プロパイダー名 | EntraID |
識別子 | EntraID |
メタデータドキュメント | Entra のエンタープライズアプリケーションからダウンロードした XML ファイルをアップロード |
ユーザープール属性 | email |
SAML 属性 | http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress |
アプリケーションクライアント
をクリックします。
表示されたアプリケーションクライアントをクリックします。
ログインページ
をクリックします。
編集
をクリックします。
許可されているコールバック URL
と 許可されているサインアウト URL
に GenU をデプロイした再に表示されていた CloudFront の URL を入力します。 また ID プロパイダー
から EntraID
を選択します。 入力が完了したら 保存
をクリックします。 これで Cognito の設定も完了です。
7. [AWS] GenU を再デプロイする
これまで設定した SSO 設定を追加し、GenU を再デプロイします。 GenU の設定ファイルは packages/cdk/cdk.json
に存在します。 このファイルを以下のように修正します。 samlCognitoDomainName
の値は Cognito に設定したドメイン名に合わせて修正します。 尚、この値には https
のようなプロトコルハンドラを指定しないように注意します (指定した場合、アプリケーションが上手く動作しません)。
項目 | 変更前 | 変更後 |
---|---|---|
samlAuthEnabled |
false |
true |
samlCognitoDomainName |
- | domain.auth.ap-northeast-1.amazoncognito.com |
samlCognitoFederatedIdentityProviderName |
- | EntraID |
また modelIds
に us.anthropic.claude-sonnet-4-20250514-v1:0
(Claude Sonnet 4) を追記します。
変更前
"context": {
…
"samlAuthEnabled": false,
"samlCognitoDomainName": "",
"samlCognitoFederatedIdentityProviderName": "",
"hiddenUseCases": {},
"modelRegion": "us-east-1",
"modelIds": [
"us.anthropic.claude-3-7-sonnet-20250219-v1:0",
"us.anthropic.claude-3-5-haiku-20241022-v1:0",
変更後
"context": {
…
"samlAuthEnabled": true,
"samlCognitoDomainName": "domain.auth.ap-northeast-1.amazoncognito.com",
"samlCognitoFederatedIdentityProviderName": "EntraID",
"hiddenUseCases": {},
"modelRegion": "us-east-1",
"modelIds": [
"us.anthropic.claude-sonnet-4-20250514-v1:0",
"us.anthropic.claude-3-7-sonnet-20250219-v1:0",
"us.anthropic.claude-3-5-haiku-20241022-v1:0",
修正が完了したら GenU を再デプロイします。 これで作業完了です。
npm run cdk:deploy:quick
8. [AWS] GenU へログインする
Web ブラウザで GenU の URL である https://1234567890123.cloudfront.net
へアクセスします。 ログインフォームが表示されたら ログイン
をクリックします。
Microsoft の認証情報を要求されたら正しく動作しています。 Entra 上のユーザ情報を入力して続行します。
「AWS ではじめる生成 AI」という画面が表示されたら GenU へログイン成功です。
試しに チャット
をクリックしてみると推論モデルとして Claude Sonnet 4
という選択肢が確認出来ます。
GenU を削除する
作成した GenU 環境を全削除するには npm run cdk:destroy "*"
を実行します。 但し Cognito に手動で追加したドメインが残っている場合、以下のエラーになってしまいます。
Resource handler returned message: "User pool cannot be deleted. It has a domain configured that should be deleted first. (Service: CognitoIdentityProvider, Status Code: 400, Request ID: 12345678-1234-1234-1234-1234567890AB) (SDK AttemptCount: 1)" (RequestToken: 12345678-1234-1234-1234-1234567890AB, HandlerErrorCode: InvalidRequest)
その為、削除実行時は「事前に手動で追加した設定」(今回は Cognito ドメイン) を削除してから npm run cdk:destroy "*"
を実行します。 実際の実行時は y/n
の入力を求められますので y
を入力します。
% npm run cdk:destroy "*"
> generative-ai-use-cases@4.2.3 cdk:destroy
> npm -w packages/cdk run cdk destroy -- *
> cdk
> cdk destroy *
Are you sure you want to delete: GenerativeAiUseCasesStack, VideoTmpBucketStackus-east-1 (y/n)? y