🐙

Cognito ユーザープールに削除保護を設定できるようになったので試してみた

2022/11/07に公開

Cognito ユーザープールに削除保護を設定できるようになりました。

https://aws.amazon.com/jp/about-aws/whats-new/2022/10/amazon-cognito-console-user-pool-deletion-protection/

削除保護の設定方法と、削除保護が有効なときに削除しようとしたときの挙動を調べてみました。

削除保護を有効にする手順

Terraform から設定する場合

aws_cognito_user_pool Resource の deletion_protection Argument を ACTIVE に設定することで削除保護を有効にできます。

cognito.tf
resource "aws_cognito_user_pool" "main" {
  # ... 省略
  deletion_protection = "ACTIVE"
}

マネジメントコンソールから設定する場合

削除保護を有効にしたいユーザープールをクリックします。

ユーザープールのプロパティ タブをクリックします。

削除保護 という項目があるので、 アクティブ化 をクリックします。

確認ダイアログが表示されるので、 アクティブ化 をクリックします。

これで削除保護が有効になりました。

削除しようとしてみる

しまった!!手が滑って aws cognito-idp delete-user-pool を実行してしまった!!

$ aws cognito-idp delete-user-pool --user-pool-id <ユーザープールID>
出力
An error occurred (InvalidParameterException) when calling the DeleteUserPool operation: The user pool cannot be deleted because deletion protection is activated. Deletion protection must be inactivated first.

おお〜。

しまった!!足が滑って terraform destroy を実行してしまった!!

$ terraform destroy -auto-approve
出力
# ...省略
aws_cognito_user_pool.main: Destroying... [id=<ユーザープールID>]
╷
│ Error: error deleting Cognito user pool (<ユーザープールID>): InvalidParameterException: The user pool cannot be deleted because deletion protection is activated. Deletion protection must be inactivated first.
│
│
╵

おお〜。

こんな感じで、削除保護を解除しない限りどうあがいても Cognito ユーザープールを削除することはできません。

まとめ

Cognito ユーザープールは作成後に変更できない設定が色々あるので、
Terraform でうっかり replace を実行してしまい「あぁ!ユーザーデータが!」みたいなことがありそうだなぁと思っていたのですが、
削除保護を設定できるようになったことでかなり安心できますね。

参考

https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/user-pool-settings-deletion-protection.html
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cognito_user_pool

Discussion