[アップデート]Amazon Cognito ユーザープールが AWS PrivateLinkとのプライベート接続のサポートを開始しました!
こんにちは。クラウド事業本部の桑野です。
みなさん、Amazon Cognitoをお使いでしょうか?
最近(2025年11月7日)Amazon Cognito ユーザープールが AWS PrivateLinkとのプライベート接続のサポートを開始しました。
これにより、VPC内のリソースからCognitoにアクセスする際に、パブリックインターネットを経由しなくてもよくなります。
Interface型のVPCエンドポイントを立てて、Cognito idpのエンドポイントサービスへ接続することでよりセキュアなアクセスを実現することができます。
早速プライベートな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
構築手順については以下の記事をご参照ください。
また、Terraform実行用にAWS CLIのプロファイルが必要になります。
IAMユーザーのクレデンシャルを指定するので、あらかじめアクセスキーとシークレットアクセスキーを発行しておきましょう。
構築
いつも通り、リソースはTerraformを使って構築します。
コードは下記GitHubリポジトリにて公開しています。
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を控えておきます。

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


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

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

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認証サーバーへのリクエスト(クライアント資格情報の付与、マネージドログインなど)は現時点では対応していません。
詳細は下記をご覧いただければと思います。
最後までご覧いただきありがとうございました。






