みなさん、こんにちは!
素早くデプロイして本番運用も可能なGenUですが、デフォルトではセルフサインアップが有効になっていたりなど、そのままではセキュリティ的に問題があります。
GenUにはセキュリティ関連のデプロイオプションが用意されており、以下の設定を行うことでセキュリティを強化することができます。
- セルフサインアップ無効化
- サインアップ可能なメールアドレスドメインの制限
- AWS WAFによるアクセス制限
本記事では、上記それぞれの場合の設定方法と検証結果についてご紹介します。
準備
最初にGenUをデプロイしておきます。

最初の状態では、GenUのURLを知っているユーザであれば誰でもサインアップすることができる状態です。
セルフサインアップ無効化
packages/cdk/cdk.json を開き、selfSignUpEnabledをfalseに変更して保存します。
{
"context": {
"selfSignUpEnabled": false
}
}
再デプロイします。
npm run cdk:deploy
デプロイ完了後にアカウント作成を試みると、セルフサインアップが無効化されているため、サインアップできない旨が表示されます。

Cognitoでユーザを作成し、そのユーザでサインインを試みます。

サインアップ可能なメールアドレスドメインの制限
packages/cdk/cdk.json を開き、allowedSignUpEmailDomainsに許可するドメインのリストを設定して保存します(デフォルトはnull)。ドメインは複数指定可能です。[]の場合はどのドメインも許可しません。
設定すると、GenUのアカウント作成時とCognitoでのユーザ作成時にエラーになります。
※設定を変更しても、既存のユーザには影響しません。新規でサインアップ・作成するユーザにのみ適用されます。
{
"context": {
"allowedSignUpEmailDomains": ["reqtc.com"]
}
}
再デプロイします。
npm run cdk:deploy
許可されていないgmail.comのメールアドレスでアカウントの作成を試みるとエラーになることが確認できました。

AWS WAFによるアクセス制限
AWS WAFにより、以下の制限をかけることができます。
- IPアドレスによる制限
- 地理的制限
今回はIPアドレスによる制限について確認します。
IPアドレスによる制限
packages/cdk/cdk.json を開き、allowedIpV4AddressRangesに許可するIPv4アドレスのCIDRのリストを、allowedIpV6AddressRangesに許可するIPv6アドレスのCIDRのリストを設定して保存します(デフォルトはnull)。
{
"context": {
"allowedIpV4AddressRanges": ["xx.xxx.xxx.xxx/32"],
"allowedIpV6AddressRanges": ["xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/128"]
}
}
例ではIPアドレスをピンポイントで指定していますが、CIDR範囲を調整して特定のネットワーク内のIPアドレスのみ許可することもできます。
再デプロイします。
npm run cdk:deploy
許可されていないIPアドレスからサインインしようした場合、エラーが表示されます。

さいごに
GenUのセキュリティ機能について、実際の検証結果とともにご紹介しました。
いずれの場合も、設定した通りの内容でアクセスが制限されていることが確認できました。ドメインによる制限やIPアドレスによる制限など、Cognito側であれこれ設定しなくてもGenUの設定ファイルを編集して再デプロイするだけで済むので楽ですね。
デプロイの設定については公式のデプロイオプションにも詳しく記載されているので、必要に応じてご参照ください。
