redis-security について
redis-securityは、本番環境のRedisを扱う運用者やアプリケーション開発者向けのセキュリティ強化スキルです。認証、ACLによる権限制御、ネットワーク公開の制限をまとめて扱います。
主な機能
- 01パスワード認証とTLSの設定
- 02最小権限のACLユーザー設定
- 03Redisのネットワークアクセス制限
- 04危険なコマンドの無効化や改名
活用シーン
- 01本番用Redisインスタンスの強化
- 02アプリケーションごとの認証情報設定
- 03Redisデプロイのセキュリティ確認
- 04スキャナーによる公開指摘への対応
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ redis/ agent-skills --skill redis-securityインストール後、Claude Code で/redis-securityを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/acls.mdauth.mdnetwork.md詳細
Redis のセキュリティ
Redis の本番環境向けセキュリティ強化:認証、ACL ベースのアクセス制御、ネットワークへの公開範囲。これら 3 つすべてを組み合わせてください。どれか 1 つだけでは、悪用可能な隙間が残ります。
適用するタイミング
- 本番環境に配置する Redis インスタンスをデプロイまたはレビューするとき。
- 共有パスワード以外のアプリケーション認証情報を設定するとき。
- セキュリティチェックリストに照らして Redis のデプロイを監査するとき。
- スキャナーから「Redis がインターネットに公開されている」という指摘を受けたとき。
1. 必ず認証を行う(TLS も使用する)
本番環境でパスワードなしの Redis を実行しないでください。認証と TLS を組み合わせ、認証情報やデータが平文で送信されないようにします。
# redis.conf
requirepass your-strong-password
tls-port 6380
tls-cert-file /path/to/redis.crt
tls-key-file /path/to/redis.key
r = redis.Redis(
host="localhost",
port=6380,
password="your-strong-password",
ssl=True,
ssl_cert_reqs="required",
)
単一の requirepass の代わりに ACL ユーザー(次のセクション)を使用できる場合は、そうしてください。requirepass は実質的に、従来の「default ユーザー」向けの簡易設定です。
references/auth.md を参照してください。
2. 最小権限アクセスのための ACL
共有パスワードを設定した default ユーザーは、開発環境では問題ありません。本番環境では、各アプリケーションに専用の ACL ユーザーを割り当て、実際に必要なコマンドとキーのパターンだけを許可してください。
# Cache-only reader
ACL SETUSER app_readonly on >password ~cache:* +get +mget +scan
# Writer that can't run dangerous ops
ACL SETUSER app_writer on >password ~* +@all -@dangerous
# Admin (use sparingly, never for application traffic)
ACL SETUSER admin on >strong-password ~* +@all
便利なコマンドカテゴリ:
| カテゴリ | 対象 |
|---|---|
@read | 読み取りコマンド(GET、MGET、HGET、...) |
@write | 書き込みコマンド(SET、DEL、XADD、...) |
@dangerous | FLUSHALL、DEBUG、KEYS など |
@admin | 管理コマンド |
アプリケーションの認証情報が漏えいしても、厳格な ACL によって被害範囲を限定できます。攻撃者がキャッシュ読み取りユーザーのパスワードを入手しただけで、DB に対して FLUSHALL を実行できるようなことはありません。
references/acls.md を参照してください。
3. ネットワークアクセスを制限する
Redis の侵害で最もよくあるのは、認証なしでパブリックインターネットに公開された Redis です。次の 3 層でこれを防ぎます。
# redis.conf — bind to specific interfaces, keep protected-mode on
bind 127.0.0.1 192.168.1.100
protected-mode yes
# Firewall — allow only application subnets
iptables -A INPUT -p tcp --dport 6379 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 6379 -j DROP
アンチパターン:bind 0.0.0.0 + protected-mode no — 保護なしで Redis をネットワーク全体に公開します。
任意ですが、推奨:侵害されたクライアントが DB を破壊できないよう、破壊的なコマンドの名前を変更するか、無効にします。
rename-command FLUSHALL ""
rename-command DEBUG ""
rename-command CONFIG ""
references/network.md を参照してください。