既存のElastiCache(Redis)で AUTH トークンを設定する場合は、ROTATE してから SET する必要がある
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 トークン戦略であるROTATE
とSET
について理解していなかったので、まとめます。
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