[アップデート]Amazon Cognito ユーザープールが AWS PrivateLinkとのプライベート接続のサポートを開始しました!

[アップデート]Amazon Cognito ユーザープールが AWS PrivateLinkとのプライベート接続のサポートを開始しました!

2025.11.19

こんにちは。クラウド事業本部の桑野です。

みなさん、Amazon Cognitoをお使いでしょうか?

最近(2025年11月7日)Amazon Cognito ユーザープールが AWS PrivateLinkとのプライベート接続のサポートを開始しました。
これにより、VPC内のリソースからCognitoにアクセスする際に、パブリックインターネットを経由しなくてもよくなります。
Interface型のVPCエンドポイントを立てて、Cognito idpのエンドポイントサービスへ接続することでよりセキュアなアクセスを実現することができます。

https://aws.amazon.com/jp/about-aws/whats-new/2025/11/amazon-cognito-user-pools-private-connectivity-aws-privatelink/

早速プライベートなEC2からCognitoにアクセスするという簡単な検証を行いましたので、その内容を共有します。

前提

下記の条件で検証しています。

  • OS:macOS Sequoia バージョン 15.6.1
  • チップ:Apple M4
  • Docker Client:28.4.0
  • Docker Server:28.3.3
  • Colima:0.8.4
  • docker compose:2.39.3

構築手順については以下の記事をご参照ください。

https://dev.classmethod.jp/articles/colima-docker-terraform/

また、Terraform実行用にAWS CLIのプロファイルが必要になります。
IAMユーザーのクレデンシャルを指定するので、あらかじめアクセスキーとシークレットアクセスキーを発行しておきましょう。

構築

いつも通り、リソースはTerraformを使って構築します。
コードは下記GitHubリポジトリにて公開しています。

https://github.com/k-kuwan0/cognito-private-link-sample

1. AWS CLIのセットアップ

terraform_runnerというコンテナにアクセスします。
以下のコマンドを実行し、事前に用意していたクレデンシャルを設定します。

aws configure --profile kuwan0-app

2. Terraform実行

クレデンシャルの設定が完了したら、Terraformを使用してリソースを作成します。

cd /terraform-runner/terraform/environments/dev
terraform init
terraform apply

3. 動作確認(エンドポイントがない場合)

AWSマネジメントコンソールから検証します。

まず、Cognitoを開き、作成したユーザープールのIDを控えておきます。

スクリーンショット 2025-11-19 15.47.40

次にEC2を開き、作成したEC2インスタンスにSSM接続します。

スクリーンショット 2025-11-19 16.26.42

スクリーンショット 2025-11-19 16.27.56

接続したら、以下のコマンドを実行します。
xxxxxxxxには先ほど確認したCognitoユーザープールのIDに置き換えてください。

aws cognito-idp describe-user-pool --user-pool-id xxxxxxxx

スクリーンショット 2025-11-19 14.55.19

sh-5.2$ aws cognito-idp describe-user-pool --user-pool-id xxxxxxxx

Could not connect to the endpoint URL: "https://cognito-idp.ap-northeast-1.amazonaws.com/"

EC2はインターネットに接続する手段を持たないため、コマンドは失敗します。

4. VPCエンドポイントを構築する

terraform/environments/dev/main.tfの107~111行目のコメントアウトを外しましょう。

cognito-idp = {
  service_name    = "${local.vpc_endpoint_service_prefix}.cognito-idp"
  service_type    = "Interface"
  ip_address_type = "ipv4"
}

これによりCognitoのVPCエンドポイントが作成されます。
EC2インスタンスのセキュリティグループはVPCエンドポイントへの通信を許可しています。

再度Terraform実行します。

terraform apply

5. 動作確認(エンドポイントがある場合)

先ほどと同様に、AWSマネジメントコンソールからEC2を開き、EC2インスタンスにSSM接続します。

接続したら、以下のコマンドを実行します。

aws cognito-idp describe-user-pool --user-pool-id xxxxxxxx

スクリーンショット 2025-11-19 16.05.03

sh-5.2$ aws cognito-idp describe-user-pool --user-pool-id xxxxxxxx
{
    "UserPool": {
        ...
    },
    ...
}

なんということでしょう・・・
無事インターネット接続がない状態であってもCognitoにアクセスすることができました。

6. AWSリソースの削除

今回作成したリソースは、放っておくとお金がかかり続けます。
実施が終わったあと、リソースを残しておく必要がなければ削除することを忘れずに行ないましょう。

terraform_runnerコンテナにアクセスし、下記コマンドを実行します。

terraform destroy

まとめ

いかがだったでしょうか。
サービス名を指定してあげることでTerraformでも作成することが可能でした。
パブリックインターネットを経由しなくても良いという選択肢が生まれるのは非常に安心感があります。

VPCエンドポイントを介してCognito User Pool APIの操作を実行できますが、OAuth 2.0認証サーバーへのリクエスト(クライアント資格情報の付与、マネージドログインなど)は現時点では対応していません。

詳細は下記をご覧いただければと思います。

https://docs.aws.amazon.com/cognito/latest/developerguide/vpc-interface-endpoints.html

最後までご覧いただきありがとうございました。

この記事をシェアする

FacebookHatena blogX

関連記事