1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ガバメント AI 源内(genai-web)を Entra ID シングルサインオン + カスタムドメインで運用する

1
Last updated at Posted at 2026-08-01

ガバメント AI 源内の AI インターフェース(genai-web)は、ユーザー認証に Cognito を使っており、デフォルトではメールアドレスを使ったパスワード認証をするようになっています。

genai-web は SAML で外部 IdP からシングルサインオンできるオプションがあるので、Entra ID を使った genai-web へのシングルサインオンを設定してみました。

また、genai-web のフロントは CloudFront となっており、デフォルトでは CloudFront のディストリビューションドメイン名にアクセスするよう設定されています。これを独自のカスタムドメイン名でアクセスするようにしてみます。

genai-web に Entra ID でシングルサインオンを設定

手順の概要

genai-web に Entra ID でシングルサインオンを設定する手順の概要は次のとおりです。

  1. 一旦デフォルトの手順で genai-web を CDK でデプロイ
  2. デプロイされた Cognito ユーザープールに Cognito ドメインを作成し、SAML で使う識別子と応答 URL を確認
  3. Entra ID でエンタープライズアプリを作成し、SAML によるシングルサインオンを設定
  4. Cognito ユーザープールに SAML ID プロバイダーとして Entra ID を追加
  5. genai-web のパラメーター設定を SAML に対応するよう変更して再度 CDK でデプロイ

それでは早速実際の手順を見ていきます。

genai-web のデプロイ(暫定)

genai-web のドキュメントの事前準備 は完了してることとします。

まずは デプロイ手順 に沿って、一旦普通に genai-web をデプロイします。

genai-web のデプロイに最低限必要な手順

packages/cdk/env-parameters にあるファイルに genai-web の設定に必要なパラメーターが定義されています。

テンプレートファイルをデプロイしたい環境(production, staging, develop など)に合わせたファイル名でコピーします。ここではコピーしたファイルを self-hosting-dev.ts としました。

$ cd packages/cdk/env-parameters
$ cp self-hosting-template.ts self-hosting-dev.ts

コピーしたファイルを編集し、他のファイルへ参照させる定数名を環境に合わせて変更し、appEnv に環境名を定義します。

packages/cdk/env-parameters/self-hosting-dev.ts
- export const selfHostingTemplateParams: Partial<StackInput> = {
+ export const selfHostingDevParams: Partial<StackInput> = {

-   appEnv: 'your-environment-name',
+   appEnv: 'dev',

packages/cdk/parameter.ts に上記のファイルの定数をインポートし、環境ごとのパラメーターを定義します。

packages/cdk/parameter.ts
+ import { selfHostingDevParams } from "./env-parameters/self-hosting-dev";

// デプロイ先環境ごとのパラメータを定義する
const deploy_envs: Record<string, Partial<StackInput>> = {
+   "-selfHostingDev": selfHostingDevParams,
  // 他の環境も追加可能
};

ファイルの編集が終わったら CDK Deploy を実行します。

$ npm -w packages/cdk run cdk -- deploy --all --require-approval never -c env=-selfHostingDev

なお、デプロイ先は東京リージョンとしました。

genai-web は us-east-1 にもリソースが作られるので注意

genai-web をデプロイする時に気を付けるポイントは、デプロイ先のリージョンを例えば東京リージョンにするとしても、us-east-1 リージョンにも CDK Bootstrap が必要になることです。

これは、genai-web が CloudFront を使うためで、地方自治体のガバメントクラウド利用のように、Organizations のサービスコントロールポリシーで使用するリージョンを国内などに限定しているケースでは、事前に管理者へサービスコントロールポリシーを確認しましょう。

Cognito ドメインの作成

genai-web のデプロイができたら、デプロイされた Cognito ユーザープールに Cognito ドメインを作成します。

スクリーンショット 2026-08-01 13.48.12.png

次にユーザープールの概要からユーザープール ID を確認します。

スクリーンショット 2026-08-01 16.53.56.png

SAML 設定に使用する次の値をメモしておきます。

項目
識別子 urn:amazon:cognito:sp:確認したユーザープールID
応答 URL https://設定した Cognito ドメイン名.auth.ap-northeast-1.amazoncognito.com/saml2/idpresponse

Entra ID のエンタープライズアプリの作成

Entra 管理センターから Entra ID の「エンタープライズアプリ」で「独自のアプリケーションの作成」に進み、任意の名前でエンタープライズアプリケーションを作成します。

スクリーンショット 2026-08-01 13.25.30.png

作成したエンタープライズアプリケーションの「シングル サインオン」から「SAML」を選択します。

スクリーンショット 2026-08-01 13.26.41.png

「基本的な SAML 構成」から「識別子(エンティティ ID)」と「応答 URL(Assertion Consumer Service URL)」にそれぞれ Cognito で設定した値を設定します。

スクリーンショット 2026-08-01 13.52.04.png

設定できたら、Cognito へ連携する属性として「emailaddress」を使うこととし、「フェデレーション メタデータ XML」を後で Cognito へ連携するためにダウンロードします。

スクリーンショット 2026-08-01 13.56.27.png

ユーザーの割当て

エンタープライズアプリケーションに、genai-web へシングルサインオンさせたい Entra ID のユーザーを割り当てます。

スクリーンショット 2026-08-01 13.58.52.png

ここまでで Entra ID 側の設定は完了です。

Cognito に SAML ID プロバイダーを追加

Cognito ユーザープールに戻り、「ソーシャルプロバイダーと外部プロバイダー」から SAML 2.0 アイデンティティプロバイダーを設定します。

「プロバイダー名」に任意の名前を設定します。

「メタデータドキュメント」には Entra ID で SAML を作成した時にダウンロードした XML ファイルをアップロードします。

「ユーザープール属性」を「email」、「SAML 属性」は Entra ID の SAML に設定した「emailaddress」を設定します。

スクリーンショット 2026-08-01 14.04.34.png

genai-web の env-parameters を修正

genai-web の packages/cdk/env-parameters に作成した環境設定ファイル(self-hosting-dev.ts など)の以下の値を修正します。

項目 備考
samlAuthEnabled true
samlCognitoDomainName 設定した Cognito ドメイン名.auth.ap-northeast-1.amazoncognito.com
samlCognitoFederatedIdentityPrimaryProviderName SAML ID プロバイダーに設定したプロバイダー名 設定ファイルが samlCognitoFederatedIdentityProviderName と誤った項目名になっている
packages/cdk/env-parameters/self-hosting-dev.ts
-   samlAuthEnabled: false,
+   samlAuthEnabled: true,

-   // samlCognitoDomainName: 'your-app.auth.ap-northeast-1.amazoncognito.com',
+   samlCognitoDomainName: 'test01-dev-genai-web.auth.ap-northeast-1.amazoncognito.com',

-   // samlCognitoFederatedIdentityProviderName: 'EntraID',
+   samlCognitoFederatedIdentityPrimaryProviderName: 'test01-dev-genai-web',

再度 CDK Deploy を実行

設定が終わったら、再度 CDK Deploy を実行します。(以下は環境設定を selfHostingDev としたときのコマンド例)

$ npm -w packages/cdk run cdk -- deploy --all --require-approval never -c env=-selfHostingDev

デプロイに成功したら CloudFront の URL が出力されているので、これに Web ブラウザーからアクセスしてみます。

スクリーンショット 2026-08-01 14.43.48.png

SAML のシングルサインオン設定が成功していたら、Entra ID の認証画面に遷移します。

スクリーンショット 2026-08-01 21.05.24.png

Entra ID で作成したエンタープライズアプリケーションに割り当てたユーザーで認証すると、genai-web の画面に戻り、ログインに成功します。

スクリーンショット 2026-08-01 21.04.55.png

genai-web のグループ設定

genai-web は Cognito ユーザープールのグループで、グループに所属するユーザーの権限を設定しています。シングルサインオンしたユーザーのグループ分けは自動で行われないため、Cognito ユーザープールの管理画面からシングルサインオンユーザーを適宜グループに追加します。

スクリーンショット 2026-08-01 15.00.58.png

なお、グループの権限は genai-web の チーム管理権限表 に詳細が書かれています。

ここまでの手順で CloudFront のディストリビューションドメイン名にアクセスすれば genai-web を使えるようになりました。

本番運用を考えると、genai-web へ独自ドメインでアクセスしたいと思うので、続けてカスタムドメインの設定をしていきます。

genai-web のカスタムドメインの設定

手順の概要

genai-web のカスタムドメインの設定の手順の概要は次のとおりです。

  1. AWS Certificate Manager でパブリック証明書を発行
  2. CloudFront のディストリビューションドメイン名を自身が管理するドメインの CNAME に設定
  3. パラメーターを修正して再度 CDK Deploy を実行

詳細手順を見ていきます。

AWS Certificate Manager でパブリック証明書を作成

AWS Certificate Manager(ACM)で HTTPS に使うパブリック証明書を作成します。ここで注意なのは、パブリック証明書は CloudFront で使うことになるので、us-east-1 リージョン に作る必要があります。

ACM のパブリック証明書を作成するには自身が管理しているドメインの設定が必要です。

ドメインは、Route 53 で新規取得するか既存のドメインのサブドメインを委譲してホストゾーンで管理する方法と、AWS 外のサービスで管理する既存のドメインを使う方法がありますが、ここでは AWS 外のサービスで管理している既存のドメインを使うことにしました。

まずは ACM で「パブリック証明書のリクエスト」に進みます。

スクリーンショット 2026-08-01 15.20.21.png

ドメインを管理するサービスでパブリック証明書の DNS 検証を行うため、「CNAME 名」と「CNAME 値」を確認します。

スクリーンショット 2026-08-01 15.21.26.png

カスタムドメインをドメイン管理サービスで設定

ドメインを管理するサービスにて CNAME 名をホスト名として CNAME 値を返すように設定します。

また、併せて CloudFront のディストリビューションドメイン名の CNAME を設定し、カスタムドメイン名で CloudFront へアクセスできるように設定しておきます。

以下はさくらのドメインで、ホスト名を genai-web に、カスタムドメインとしてサブドメイン app.morori.jp を設定した例です。

スクリーンショット 2026-08-01 21.33.37.png

ACM で証明書のステータスが成功となっていればパブリック証明書の発行が完了です。後で必要になるのでパブリック証明書の ARN を控えておきます。

パラメーターをカスタムドメインに合わせて修正

packages/cdk/env-parameters のファイルに定義されているパラメーターをカスタムドメインに合わせて修正します。

項目
hostName 設定したホスト名
domainName 設定したサブドメイン名
certificateArn 発行したパブリック証明書の ARN
packages/cdk/env-parameters/self-hosting-dev.ts
-   // hostName: 'genai',
+   hostName: 'genai-web',

-   // domainName: 'example.com',
+   domainName: 'app.morori.jp',

-   // certificateArn: 'arn:aws:acm:us-east-1:123456789012:certificate/your-certificate-id',
+   certificateArn: '`発行したパブリック証明書の ARN`',

再度 CDK Deploy を実行

パラメーターの修正が終わったら、再度 CDK Deploy を実行します。

CloudFront の「代替ドメイン名」と「カスタム SSL 証明書」にこれまで設定したドメインやパブリック証明書が設定されていることが分かります。

スクリーンショット 2026-08-01 15.52.58.png

これでカスタムドメイン名にて genai-web へアクセスすることができました。

スクリーンショット 2026-08-01 16.09.07.png

genai-web のシングルサインオンとカスタムドメインの設定まとめ

ガバメント AI 源内の AI インターフェースである genai-web は、Entra ID など外部 IdP でシングルサインオンが可能です。また、独自ドメインを設定できるので、エンタープライズ環境で使う時にはありがたい機能です。

ガバメントクラウドで地方自治体が genai-web を使う場合の留意点

最初にも触れましたが、genai-web をデプロイする場合、us-east-1 リージョンで一部の API の実行が必要です。そのため、地方自治体が現状でガバメントクラウド環境へそのままデプロイできるかは、デジタル庁が管理する Organizations のサービスコントロールポリシーなどで制限がないか事前に確認する必要があると思われます。

今回検証した結果、genai-web のデプロイには us-east-1 リージョンで以下の API が許可されている必要がありました。

  • acm-pca:ListCertificateAuthorities
  • cloudformation:CreateChangeSet
  • cloudformation:DeleteChangeSet
  • cloudformation:DeleteStack
  • cloudformation:DescribeChangeSet
  • cloudformation:DescribeStackEvents
  • cloudformation:DescribeStacks
  • cloudformation:ExecuteChangeSet
  • cloudformation:GetTemplate
  • cloudformation:ListStackResources
  • cloudformation:ListStacks
  • ecr:CreateRepository
  • ecr:DeleteRepository
  • ecr:DescribeRepositories
  • ecr:PutLifecyclePolicy
  • ecr:SetRepositoryPolicy
  • ecr:TagResource
  • s3:AbortMultipartUpload
  • s3:CreateBucket
  • s3:DeleteBucketPolicy
  • s3:DeleteObject
  • s3:PutObject
  • s3:GetBucketLocation
  • s3:GetBucketPolicy
  • s3:GetObject
  • s3:PutBucketPolicy
  • s3:PutBucketPublicAccessBlock
  • s3:PutBucketVersioning
  • s3:PutEncryptionConfiguration
  • s3:PutLifecycleConfiguration
  • ssm:DeleteParameter
  • ssm:DescribeParameters
  • ssm:GetParameter
  • ssm:GetParameters
  • ssm:PutParameter
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?