既存のElastiCache(Redis)で AUTH トークンを設定する場合は、ROTATE してから SET する必要がある

Redis AUTH トークン戦略である ROTATE と SET について理解しましょう。
2024.01.30

AUTH トークンを設定できない。

こんにちは!AWS事業本部のおつまみです。

みなさん、既存のElastiCache(Redis)で AUTH トークンを設定したいと思ったことはありますか?私はあります。
先日構築した既存のElastiCache(Redis)に対して、追加でAUTH トークンを設定する必要が出てきました。

設定しようと思って少しハマったので、内容を共有します!

いきなり結論

  • まず、トークンをROTATEで追加する。
  • その後、同じトークンをSETで設定する。

やりたかったこと

  • 認証が有効化されていない既存のElastiCache(Redis)で、AUTHトークンを設定したい。

ハマったこと

マネジメントコンソールより、トークンを設定で新しいパスワードを設定しようとしても、以下のエラーメッセージにより変更できませんでした。

There is no AUTH token to SET. Please rotate in an AUTH token first.

「SET する AUTH トークンがありません。 最初に AUTH トークンをローテーションしてください。」となってますね。

ここでRedis AUTH トークン戦略であるROTATESETについて理解していなかったので、まとめます。

ROTATE と SET について

公式ドキュメントを読むと以下の記述がありました。

認証トークンの変更は、ROTATE と SET の 2 つの戦略をサポートしています。ROTATE 戦略では、以前のトークンを保持しながら、サーバーに別の AUTH トークンを追加します。SET 戦略では、1 つの AUTH トークンのみをサポートするように、サーバーを更新します。変更をすぐに適用するには、これらの変更の呼び出しで --apply-immediately パラメータを指定します。

つまり、こういうことです。

  • ROTATE
    • 既存トークンを保持しながら、新しいトークンを追加する。新規と合わせて最大2つまで保持される。
  • SET
    • 1つのトークンのみ有効にし、片方を無効にする。

今回やろうとしていたのは以下の操作でした。

SET は新規トークンのみの設定はできないため、エラーになったということですね。

やってみた

マネジメントコンソールで設定を行います。

[変更]画面のセキュリティから、[アクセスコントロール]で以下を設定します。
なお転送中の暗号化必須に設定されていないとトークンを設定できないため注意して下さい。

  • アクセスコントロール:Redis認証デフォルトユーザーアクセス
  • Redis AUTH トークン戦略:トークンをローテーション
  • Redis 認証トークン:任意の値を入力

確認画面で変更内容を確認し、[変更]を選択します。

クラスターが変更中から使用可能になったのを確認してから、再度[変更]画面のセキュリティから、[アクセスコントロール]で以下を設定します。

  • アクセスコントロール:Redis認証デフォルトユーザーアクセス
  • Redis AUTH トークン戦略:トークンを設定
  • Redis 認証トークン:ローション時に指定した値と同じ値

確認画面で変更内容を確認し、[変更]を選択します。

設定は以上です。

この状態でトークンが設定されたか確認してみます。
今回はEC2(Amazon Linux 2)からredis-cliを用いて、接続しました。

redis-cli -h ${HOSTNAME} --tls -p 6379
${HOSTNAME}:6379> auth <設定したRedis AUTHのトークン>
OK

問題なく設定したトークンで接続できました!

さいごに

今回は、既存のElastiCache(Redis)にAUTH トークンを設定する方法をご紹介しました。

最後までお読みいただきありがとうございました!
どなたかのお役に立てれば幸いです。

以上、おつまみ(@AWS11077)でした!

参考

Redis AUTH コマンドによる認証 - Amazon ElastiCache for Redis

ElastiCacheをセキュアに運用できてますか?Redis認証トークンの変更をサポートしましたよ! #reinvent | DevelopersIO