【Security Hub修復手順】[Cognito.6] Cognito ユーザープールでは削除保護を有効にする必要があります
こんにちは!コンサルティング部のみゃんです。
皆さん、お使いのAWS環境のセキュリティチェックはしていますか?
本記事では、AWS Security HubによるAWS環境のセキュリティ状況スコアリングに該当する項目についての修復手順をご紹介します。
本記事の対象コントロール
[Cognito.6] Cognito ユーザープールでは削除保護を有効にする必要があります
[Cognito.6] Cognito user pools should have deletion protection enabled
前提条件
本記事はAWS Security Hubで「AWS基礎セキュリティのベストプラクティススタンダード」を利用されている方向けの内容となります。
AWS Security Hubの詳細についてはこちらのブログをご覧ください。
対象コントロールの説明
このコントロールは、Cognitoユーザープールで削除保護が有効になっているかをチェックします。削除保護が無効(DeletionProtectionがINACTIVE)の場合に、このコントロールは失敗します。削除保護を有効(ACTIVE)にすることで、このコントロールは成功します。
削除保護を有効にすると、どのユーザーもユーザープールを削除できなくなります。削除するには、先に削除保護を無効化する必要があります。APIからDeleteUserPoolを実行した場合はInvalidParameterExceptionが返り、削除は失敗します。マネジメントコンソールから削除する場合は、削除保護の無効化と削除を同じ確認ダイアログでまとめて承認できます。
削除保護のデフォルト値は、ユーザープールの作成方法によって異なります。マネジメントコンソールから作成した場合は有効になりますが、CreateUserPool APIで作成した場合は無効になります。AWS CLI、AWS SDK、CloudFormationやCDKなどのIaCツールで作成したユーザープールは、削除保護を明示的に指定していないかぎり無効の状態です。このコントロールが失敗しているユーザープールは、この経路で作成されたものが大半です。
削除保護が無効なままだと、コンソールの誤操作や、IaCのリソース名変更に伴う置き換えによって、ユーザープールが削除されます。ユーザープールを削除すると、登録済みのユーザーアカウントとパスワードは失われ、復元できません。サインインが通らなくなり、そのユーザープールを利用しているアプリケーションの認証機能が停止します。本番環境では対応が必須です。
本番以外の環境では、削除保護を有効にしていると、環境を作り直すたびに無効化の操作が挟まります。検証のためにユーザープールの作成と削除を繰り返す環境や、IaCで日次に環境を破棄・再作成している環境では、対応を見送っても問題ありません。この場合は、対象のコントロールを無効化するか検出結果を抑制することをご検討ください。
修復手順
コントロールの確認方法
- Security Hubコンソールを開く
- 左メニューから「検出結果」を選択
- フィルターで対象のコンプライアンスセキュリティコントロール ID「Cognito.6」を検索

- 検出結果の詳細から、対象のユーザープールARNを確認する

ステークホルダーに確認
削除保護を有効にすると、ユーザープールの削除に無効化の手順が必要になります。修復を行う前に以下の点を確認してください。
- 対象ユーザープールをCloudFormation、CDK、TerraformなどのIaCツールで管理しているか。管理している場合、コンソールで有効にするとテンプレートとの差分が発生するため、テンプレート側で設定する担当者
- ユーザープールの削除と再作成を含む運用があるか。ある場合、削除前に削除保護を無効化する手順を運用手順書に追加する担当者
- CI/CDパイプラインやスクリプトから
DeleteUserPoolを実行する処理があるか。ある場合はInvalidParameterExceptionで失敗するため、削除保護を無効化する処理を先に入れる必要がある
IaCで管理している場合は、コンソールではなくテンプレート側で設定してください。CloudFormationではAWS::Cognito::UserPoolのDeletionProtectionプロパティにACTIVEを指定します。
Type: AWS::Cognito::UserPool
Properties:
UserPoolName: my-user-pool
DeletionProtection: ACTIVE
AWS CDK(TypeScript)ではdeletionProtectionにtrueを指定します。
new cognito.UserPool(this, 'UserPool', {
userPoolName: 'my-user-pool',
deletionProtection: true,
});
修復手順
- Amazon Cognitoコンソールを開く
- 左メニューから「ユーザープール」を選択し、対象のユーザープールを選択する

- 「設定」>「ユーザープールのセキュリティ」を押下し、「削除保護」の「アクティブ化」を押下する(ポップアップが表示されたら、「アクティブ化」を押下する)


※AWS CLIから設定する場合はupdate-user-poolを使用します。ただしUpdateUserPool APIは、リクエストで指定しなかったパラメータをデフォルト値に戻す仕様です。既存のユーザープールに対して--deletion-protection ACTIVEだけを指定すると、他の設定が意図せず変わります。CLIで設定する場合は、describe-user-poolで現在の設定を取得し、その内容に削除保護の指定を加えたうえでリクエストを組み立ててください。
修復確認
設定後、ユーザープールの「設定」メニューで「削除保護」が「アクティブ」になっていることを確認します。
削除保護が「アクティブ」になりました。

AWS CLIでも確認できます。
aws cognito-idp describe-user-pool \
--user-pool-id <ユーザープールID> \
--region <リージョン> \
--query 'UserPool.DeletionProtection'
"ACTIVE"が返れば設定は完了しています。

修復後、Security Hubで検出結果が「PASSED」になることを確認します。

最後に
今回は、AWS Security HubによるAWS環境のセキュリティ状況スコアリングに該当する項目についての修正手順をご紹介しました。
コントロールを修正して、お使いのAWS環境のセキュリティをパワーアップさせましょう!
最後までお読みいただきありがとうございました!どなたかのお役に立てれば幸いです。
以上、みゃんでした!






