🍉

AWS GenU で Claude Sonnet 4 を有効化し Entra で SSO する

に公開

はじめに

プログデンスの圓佛です。 AWS は GenU (Generative AI Use Cases) という生成 AI のユースケースを集めたサンプルアプリケーションを公開しています。 GenU は以下などの機能を備えています。

  1. チャット
  2. 音声チャット
  3. 文章生成
  4. 要約
  5. 執筆
  6. 翻訳
  7. Web コンテンツ抽出
  8. 画像生成
  9. 動画生成
  10. 映像分析
  11. ダイアグラム生成

「サンプルアプリケーション」と言いながら完成度が高く、十分に実践的な利用が可能です。 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 も有効化します。

設定の流れ

設定の流れは以下の通りです。

  1. [作業用端末] awscli をインストールする
  2. [AWS] Bedrock で推論モデルを有効化する
  3. [AWS] GenU をデプロイする
  4. [AWS] Cognito でドメインを作成する
  5. [Entra] エンタープライズアプリケーションを作成する
  6. [AWS] Cognito に設定を追加する
  7. [AWS] GenU を再デプロイする
  8. [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 へアクセスしたら モデルアクセス をクリックします。

image

推論モデルを個別に選択し、必要なものだけを有効化することも出来ますが、全てのモデルを有効化することも出来ます。 今回は 全てのモデルを有効にする をクリックします。

image

有効化対象のモデル一覧が表示されます。 次へ をクリックします。

image

最終確認画面が表示されます。 送信 をクリックします。

image

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 がデプロイされたことが分かります。

image

インストールログに表示されていた GenU の URL へアクセスするとログイン画面が表示されます。 SSO を有効化しないのであれば、この状態で GenU を利用可能です。

image

4. [AWS] Cognito でドメインを作成する

GenU をデプロイした直後の状態では「Cognito はローカル認証で構築」されている為、これを Entra ID による SSO 設定へ変更していきます。 CloudFormation スタックの リソースAuthAuthUserPool から表示されている 物理 ID をクリックします。

image

Cognito の画面に遷移します。 この時点で ユーザープール ID を控えておきます。 ドメイン をクリックします。

image

Cognito ドメインの作成 をクリックします。

image

Cognito ドメインを入力し、Cognito ドメインの作成 をクリックします。

image

これで Cognito にドメインが設定されました。

image

5. [Entra] エンタープライズアプリケーションを作成する

次は Entra ID 側に SSO 用のエンタープライズアプリケーションを作成していきます。 Azure Portal へログインしたら Microsoft Entra ID をクリックします。

image

エンタープライズアプリケーション をクリックします。

image

新しいアプリケーション をクリックします。

image

エンタープライズアプリケーションに人間が識別しやすい名前を入力します。 作成 をクリックします。

image

シングルサインオン をクリックします。

image

SAML をクリックします。

image

基本的な SAML 構成編集 をクリックします。

image

識別子応答 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 を入力したら 保存 をクリックします。

image

Cognito に設定するエンタープライアプリケーション側の設定をダウンロードします。 フェデレーションメタデータ XMLダウンロード をクリックし、XML ファイルをダウンロードしておきます。

image

最後に「認証を許可するユーザとグループ」の設定を行います。 今回は「Entra 上に存在するユーザは全て許可」しますので プロパティ割り当てが必要ですか?いいえ に設定し、保存 をクリックします。 これで Entra 側の設定は完了です。

image

[AWS] Cognito に設定を追加する

Entra のエンタープライズアプリケーションで発行された情報を Cognito に追加設定します。 ソーシャルプロパイダーと外部プロパイダー をクリックします。

image

アイデンティティプロパイダーを追加 をクリックします。

image

SAML をクリックします。 クリックすると画面の下部に入力可能なパラメータが表示されます。

image

以下を設定します。 値を入力したら アイデンティティプロパイダーを追加 をクリックします。

項目
プロパイダー名 EntraID
識別子 EntraID
メタデータドキュメント Entra のエンタープライズアプリケーションからダウンロードした XML ファイルをアップロード
ユーザープール属性 email
SAML 属性 http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress

image

アプリケーションクライアント をクリックします。

image

表示されたアプリケーションクライアントをクリックします。

image

ログインページ をクリックします。

image

編集 をクリックします。

image

許可されているコールバック URL許可されているサインアウト URL に GenU をデプロイした再に表示されていた CloudFront の URL を入力します。 また ID プロパイダー から EntraID を選択します。 入力が完了したら 保存 をクリックします。 これで Cognito の設定も完了です。

image

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

また modelIdsus.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 へアクセスします。 ログインフォームが表示されたら ログイン をクリックします。

image

Microsoft の認証情報を要求されたら正しく動作しています。 Entra 上のユーザ情報を入力して続行します。

image

「AWS ではじめる生成 AI」という画面が表示されたら GenU へログイン成功です。

image

試しに チャット をクリックしてみると推論モデルとして Claude Sonnet 4 という選択肢が確認出来ます。

image

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
株式会社プログデンス
設定によりコメント欄が無効化されています