[アップデート] Amazon Cognito ユーザープールでアプリケーションクライアントのシークレットでカスタムシークレットとローテーションがサポートされました
いわさです。
Amazon Cognito ユーザープールではアプリケーションクライアントを使います。
アプリケーションクライアントを使うことで Cognito にアクセスするクライアントを識別します。
アプリケーションクライアントではさらにオプションのクライアントシークレットを使うことで正規のリクエストであることを認証できます。
シークレットは Cognito へリクエストする際にアプリケーションクライアントのクライアントIDと組み合わせて使います。
これまで、クライアントシークレットはクライアントアプリケーション作成時に有効化することで自動で値が生成されるもので、作成後は変更が出来ませんでした。
先日、クライアントシークレットに2つアップデートがありました。
ひとつはクライアントシークレットを有効化する際に、値を自動生成させるのではなくて任意のカスタム値を設定できるようになりました。
ふたつめは、アプリケーションクライアントに2つまでのシークレットを登録できるようになりました。それによってシークレットのローテーションが可能になります。
ふたつの機能を確認してみたので紹介します。
カスタムシークレットの設定
カスタムシークレットを使ってみましょう。
アプリケーションクライアント作成時にシークレット生成を有効化できますが、自動生成がデフォルトで有効化されています。

これをオフにすると次のように任意の値をシークレット値として設定できるようになりました。任意ではありますが24文字以上64文字以下である必要があります。

従来のクライアントシークレットは次のようにコンソールから値を確認することが出来ました。

一方で、今回追加されたカスタムシークレット値の場合は次のように確認が出来ませんでした。
作成後に再確認が出来ないので注意してください。

シークレットのローテーション
続いてシークレットのローテーションを試してみましょう。
今回のアップデートでコンソールのアプリケーションクライアント詳細画面で次のように「Client secrets」というタブが追加されています。
ここにクライアントシークレットが表示されています。値は確認できません。

「Create secret」ボタンからシークレットの追加ができます。

以下がクライアントシークレットの追加画面です。アプリケーションクライアント作成時と同じでデフォルトは自動生成になっています。

自動生成されたシークレット値の場合はシークレットの作成後にそのまま表示されます。
カスタムシークレットの場合と同じでアプリケーションクライアント画面では確認できないのでここで値を控えるようにしてください。

また、シークレットの追加の場合でもカスタムシークレットに対応しています。任意のシークレット値が設定できます。

複数のクライアントシークレットが追加されている状態がこちらです。
シークレットを登録できるのは最大2つまでです。2つある状態だと「Create secret」ボタンが押せないことがわかります。

で、ローテーションする時ですが一定期間2つのクライアントを使いまわして、切り替えが終わったタイミングで安全にクライアントシークレットを削除することでローテーション完了するような流れが想定されています。
選択して「Delete」ボタンを押すことでシークレットを削除できます。

古いシークレットを削除しました。新しいシークレットのみになりましたね。
そして、1つになったことでまた新たなシークレットが登録できるようにもなりました。

さいごに
本日は Amazon Cognito ユーザープールでアプリケーションクライアントのシークレットでカスタムシークレットとローテーションがサポートされたので使ってみました。
これまでシークレットのローテーションをするためにはアプリケーションクライアントの作り直しが必要だったのですが、今後はシークレットの変更のみで良くなりますね。






