ダッシュボードのキャッシュアクセスを理解する

RedisBeginner
オンラインで実践に進む

はじめに

サポートダッシュボードは Redis にチケットと処理結果をキャッシュします。この動作を維持しながら、自分のデータだけにアクセスできるアカウントを作成します。

Redis はキーという名前で値を保存します。キャッシュキーはデータ名であり、パスワードではありません。合成チケットと隔離ネットワーク内の実際の Redis を使用します。基本的な端末操作ができれば、Redis やプログラミング経験は不要です。Client と Cache Server は、インスタンスのカーネルを共有する別々のコンテナを開きます。Dashboard が表示するのは実際のリクエストであり、安全性の点数ではありません。

サポートチケットを処理する

このステップでは、通常のアプリ動作を確認します。Redis は名前付きの値を保存してリクエストに応答するサーバーです。ダッシュボードはクライアントとして Redis にチケットを要求し、処理して結果を書き込みます。キャッシュはアプリが使う便利な保存場所です。ここでは合成データを使います。 入力は support:ticket、処理済み出力は support:result に保存されます。

Dashboard を開きます。input と result が表示されます。最初の入力は Ticket 104: password reset、結果は空です。Process ticket を一度クリックすると Processed: Ticket 104: password reset が表示されます。再読み込みでは保存された値を読み直します。これは実際の読み取りに続く書き込みです。

username: default も表示されます。ユーザー名は Redis アカウントを識別し、キャッシュキーとは別です。現在はパスワードなしで自動的に利用できるデフォルトアカウントを使っています。正しい業務出力は可用性を示しますが、そのアカウントが他のどのデータを読めるかは示しません。

接続エラーが出た場合は一度再読み込みします。エラーページを権限拒否と見なさないでください。両方の端末タブを開いたままにし、名前で操作場所を区別します。

必要なアクセスと過剰なアクセスを比べる

このステップでは、使い捨ての値を読み書きしてデフォルトアクセスの広さを調べます。Client を使います。準備済みの端末はアプリコンテナ内にあります。redis-cli は Redis のコマンドラインクライアントです。-h cache-server はプライベートネットワーク名でサーバーを選びます。ここで localhost とするとクライアントコンテナ自身を指します。

GET はキーを読みます。ダッシュボードの入力を読みましょう。

redis-cli -h cache-server GET support:ticket

応答には Ticket 104: password reset が含まれます。コロンはキー名の一部です。support: プレフィックスでアプリのデータをまとめています。

SET は値を書きます。業務入力を保つため、使い捨ての練習キー demo:note を使います。

redis-cli -h cache-server SET demo:note practice

OK は書き込み成功です。読み戻します。

redis-cli -h cache-server GET demo:note

応答は practice です。次に無関係な合成財務データを読みます。

redis-cli -h cache-server GET finance:payroll

Private payroll: synthetic が返ります。サポートダッシュボードが給与を読む業務上の理由はありません。認証は接続者を確認し、認可は使えるコマンドとキーを決めます。現在のデフォルトアカウントは、この無関係な読み取りと不要な管理コマンドの両方を許可しています。

アプリ専用の制限アカウントを作る

このステップでは、名前付きアカウントに必要な操作とキー範囲だけを与えます。Cache Server に切り替えます。cache-admin は別の保守用アカウントで実際の redis-cli を実行する準備済みヘルパーです。管理用であり、アプリの認証設定ではありません。

アクセス制御リスト(ACL)はアカウントごとにコマンドとキーのルールを設定します。ダッシュボードに必要なのは support:* への GET と SET です。星印は support: の後の任意の接尾部を表します。この単純なプレフィックスパターンは正規表現ではありません。

ACL SETUSER はアカウントを作成または変更します。reset は以前のルールを消去し、on は認証を有効化、>... はパスワード、~... はキーパターンを指定します。+get +set はこの 2 コマンドだけを許可します。単一引用符は > と * をシェルから保護します。引用しないと出力リダイレクトやファイル名展開になる場合があります。実行します。

cache-admin ACL SETUSER dashboard reset on '>Dash-Lab-42' '~support:*' +get +set

OK を確認します。パスワード Dash-Lab-42 はアカウント認証用で、Redis のデータキーではありません。訓練用認証情報はローカルの例であり、本番環境の秘密ではありません。

Client に切り替えます。--user はアカウントを選び、--askpass はパスワードをコマンド行に含めず入力要求します。各要求で Dash-Lab-42 を入力します。文字が表示されないことがあります。

redis-cli -h cache-server --user dashboard --askpass GET support:ticket

チケットは引き続き読めます。別の新しい接続で無関係なキーを試します。

redis-cli -h cache-server --user dashboard --askpass GET finance:payroll

NOPERM を期待します。認証には成功しましたが、キーが禁止されています。WRONGPASS はユーザー名かパスワードの誤りなので修正して再試行します。接続エラーはサービスに到達できない状態で、制限成功ではありません。ACL を誤入力した場合は Cache Server で正しい値の完全な reset コマンドを再実行します。

有効な ACL を保存する

このステップでは、将来のサービス起動後も権限が残るようアカウントを永続化します。メモリ内の ACL 変更はすぐに反映されますが、設定ファイルは自動更新されません。Cache Server を使います。

cache-admin ACL SAVE

OK を確認します。Redis はこのサーバーが使う ACL ファイル /data/users.acl に有効なユーザーを書き込みます。cat でファイル内容を表示して確認します。

cat /data/users.acl

dashboard の行には ~support:*、-@all、+get、+set が含まれます。順序は変わることがあります。-@all は最初に全コマンドカテゴリを拒否する意味です。# で始まる値は Redis のパスワードハッシュで、元のパスワードではありません。

有効なアカウントと比較します。

cache-admin ACL GETUSER dashboard

同じキー範囲とコマンド権限を探します。未使用のファイルを編集しても稼働中のアカウントは変わりません。ACL SAVE は実際に有効なルールを保存します。

このラボではデフォルト入口を有効のまま残します。より適切なアカウントを作るだけでは既存アプリの切り替えや旧経路の廃止は行われません。次のラボは独立したスナップショットから始め、その変更を扱います。保守用認証情報をアプリに設定してはいけません。

まとめ

実際のチケット処理、データキーとパスワードの区別、必要なアクセスと過剰なアクセスの比較を行い、support:* に対する GET/SET だけを許可するアカウントを作成・保存しました。アプリ切り替え後には、古いデフォルト経路の廃止が必要です。