Azure Redis EnterpriseでACL SETUSERが使えない原因とRBAC代替策(ERR command ‘acl|setuser’ is not allowed / Data Access Configuration)

Azure Redis Enterprise(EnterpriseCluster/Balanced_B0 など)で ACL SETUSER を実行すると「ERR command ‘acl|setuser’ is not allowed」が出て困ることがあります。本記事では、ACL が使えない理由と、代替でロール分離を実現する設計・運用の落とし所を整理します。

目次

発生するエラーと状況(再現コマンド)

典型的には、Azure の Redis Enterprise 系インスタンス(例:SKU が Balanced_B0、Clustering Policy が EnterpriseCluster)で、ACL を使って新しいユーザーを作成しようとしたときに発生します。

ACL SETUSER demo-svc on >DemoPass123! +@read +set ~demo*

このとき、次のようなエラーが返ってきます。

(error) ERR command 'acl|setuser' is not allowed

ポイントは、「Redis の ACL 機能を使った RBAC(ロール分離)を、サービス側がコマンドとして許可していない」という点です。クライアントの打ち間違い、権限不足、TLS 設定などの“よくあるミス”ではないケースが多いです。

確認項目この事象の典型切り分けのヒント
実行コマンドACL SETUSER / ACL LIST など ACL 系ACL 関連だけが拒否されるなら“仕様でブロック”の可能性が高い
エラーメッセージERR command 'acl|setuser' is not allowed「allowed ではない」=そのコマンド自体が提供されていない/無効化されている
構成Enterprise/Enterprise Flash、または Azure Managed Redis の Enterprise 系同じ “Redis” でも SKU/サービスで管理機能が大きく異なる

結論:Azure Redis Enterprise では ACL コマンドを有効化できない

まず結論から言うと、Azure Redis Enterprise(Enterprise/Enterprise Flash、EnterpriseCluster 構成を含む)では ACL SETUSER などの ACL コマンドはサポートされていません。そのため、ERR command 'acl|setuser' is not allowed は設定ミスではなくサービス仕様に沿ったエラーです。

また、「権限を付与すれば動く」「フラグを有効化すれば使える」というタイプの機能ではなく、現時点ではユーザー側で ACL コマンドを許可する手段がありません。

「Data Access Configuration(データ アクセス構成)」が見つからない理由

ドキュメントやブログで「Data Access Configuration(データ アクセス構成)」というメニューや、+@read +set ~demo* のようなカスタムポリシー設定が出てくることがあります。しかしこの UI はどの Redis を使っているか(SKU/サービス)で表示可否が変わります。

Azure ポータルの「Data Access Configuration」メニューは Basic/Standard/Premium で提供され、Enterprise/Enterprise Flash には表示されません。そのため、Enterprise 系を使っていると、同じ手順を探しても“メニューが存在しない”状態になります。

さらに、Microsoft Learn の RBAC(データ アクセス ポリシー)関連ドキュメントでも、データアクセス ポリシーの構成は Enterprise/Enterprise Flash では未サポートであることが明記されています。

「+@read +set ~demo*」は何を表しているのか(ACL 構文の意味)

ドキュメントに出てくる +@read +set ~demo* のような文字列は、Redis の ACL(Access Control List)機能で使う権限文字列です。Redis 6 以降の ACL では、ユーザーごとに「許可するコマンドカテゴリ」「許可するコマンド」「アクセスできるキーのパターン」などを指定できます。

例意味よくある用途
+@read読み取り系コマンドカテゴリを許可読み取り専用 API / 集計処理
+setSET コマンドを個別に許可限定的に書き込みを許可したい
~demo*demo で始まるキーだけアクセス許可(キー・パターン)プレフィックスでテナント分離
on / offユーザーの有効/無効緊急停止、棚卸し
>passwordユーザーのパスワード設定ユーザー追加/ローテーション

重要なのは、この ACL 構文自体は Redis の標準機能である一方、Azure の “管理された Redis” では、SKU/サービスにより ACL コマンドの実行が制限されることがある点です(今回の “not allowed” がまさにそれです)。

まず整理したい:Azure の Redis は「名前が似ていて別物」が多い

「Azure Redis」「Azure Cache for Redis」「Azure Redis Enterprise」「Azure Managed Redis」など、呼び方が似ていて混乱しやすいのですが、実際には機能差がかなり大きいです。特にアクセス制御(ACL/RBAC/Entra 連携)を考えるときは、次の観点で整理すると判断が早くなります。

観点Basic/Standard/Premium(Azure Cache for Redis)Enterprise/Enterprise Flash(Azure Cache for Redis Enterprise)Azure Managed Redis
ACL コマンド(ACL SETUSER 等)“直接叩く”運用ではなく、Entra 連携+ポリシー管理が中心コマンド自体がブロックされる現時点では ACL 未サポート
Data Access Configuration(データ アクセス構成)表示される(カスタム ポリシー作成可能)表示されない現時点では Data Access Policy 未サポート(UI で見つからないことが多い)
Microsoft Entra 認証サポート(RBAC と連動)サポート外サポート(ただし権限は Access Keys と同等=実質フルアクセス)
注意点全 SKU のリタイアが告知されており移行計画が重要ACL による細粒度制御ができないEntra は使えるが “認証” の置換が主で “認可” は限定的

Basic/Standard/Premium の「カスタム データ アクセス ポリシー」は Enterprise/Enterprise Flash では提供されないこと、そして Azure Managed Redis では現時点で ACL/Data Access Policy が未サポートであることが、混乱の根本原因になりがちです。

なお、Azure Cache for Redis は全 SKU のリタイアが告知され、Azure Managed Redis への移行が推奨されています(最新状況は公式ドキュメントを確認してください)。

なぜ Enterprise で ACL が使えないと困るのか(現場で起きやすいこと)

ACL が使えないと、次のような “Redis 側で止めたい事故” を、Redis だけでは止めにくくなります。

  • 読み取り専用にしたいサービスが、誤って更新系コマンドを叩いてしまう
  • テナント A の処理が、テナント B のキーを読めてしまう(プレフィックス分離が守られない)
  • 運用・デバッグ目的の接続が、想定外のコマンドを実行してしまう
  • 「誰が何をしたか」を Redis のユーザー単位で追えず、原因調査が難航する

この “困りごと” に対して、Enterprise では「Redis 自体に細粒度権限を持たせる」のではなく、設計・運用の層で代替するのが現実的な解になります。

代替となるロールベースアクセス(RBAC)の現実解

Azure Redis Enterprise で ACL が使えない場合、よく採られる代替案は大きく 3 つです。どれが正解というより、要件(セキュリティ粒度・運用コスト・性能・予算)で最適解が変わります。

代替案概要向いているケース注意点
アプリケーション側でアクセス制御Redis は “単一の接続” で使い、誰がどのキーを触れるかはアプリで判定権限設計が複雑/頻繁に変わる、ロールをビジネスロジックと同期したいRedis へ直結できる人/システムが増えると破綻しやすい(ネットワーク設計が重要)
用途・権限ごとに Redis を分割読み取り専用、管理用、バッチ用などで Redis インスタンス(またはデータベース)を分ける役割が少数で明確(read-only / read-write / admin など)インスタンス数が増えるとコスト・監視・運用が増える
SKU/サービスの見直し(または別基盤)Redis 側で細粒度制御が必須なら、対応している環境へ移す監査要件が厳格、Redis 側での “強制” が必要移行コスト、接続方式、サポート機能の差分に注意

アプリケーション側でアクセス制御する設計のコツ

アプリ側で RBAC を持つ場合、実務では「キー設計」と「接続経路の固定化」が成否を分けます。特にクラスタ構成(EnterpriseCluster/Redis Cluster 相当)では、データベース番号での分離(SELECT で DB を切り替える)に頼れません。Redis Cluster は DB0 のみで、SELECT は使えない仕様です。

キー命名で “権限の境界線” を作る

キーのプレフィックス(または名前空間)を、認可の単位に合わせて設計します。

要件キー設計例解説
テナント分離tenant:{tenantId}:*アプリ側で tenantId を必ず付与。ログ/監査も tenantId を軸に集約しやすい
機能別分離feature:cart:{tenantId}:{userId}「どの機能が触るデータか」をキーで明確化。運用時の棚卸しにも強い
環境分離(dev/stg/prod)prod:tenant:{tenantId}:*環境跨ぎの誤接続事故を減らす(接続先分離が理想だが、キーでも保険をかける)

Redis 直結を減らす(“正しい入口” を 1 つにする)

アプリ側認可のモデルでは、Redis に直接接続できる人/プロセスが増えるほど、RBAC は崩れます。運用としては次が有効です。

  • Redis への接続情報(アクセスキー/接続文字列)を配布する先を最小化する
  • 開発者が “便利ツールから直結” できるネットワーク経路を作らない(必要なら踏み台/承認を挟む)
  • アプリ経由の操作に寄せ、Redis への操作ログ(誰が何を要求したか)をアプリ側で残す

実装パターン:Redis クライアントを “権限付き” でラップする

アプリ側で RBAC を実装するなら、散らばった if 文で守るよりも、Redis 呼び出し口を 1 箇所に集約し、ロールごとに許可 API を分ける方が事故が減ります。

// 擬似コード例(考え方)
// - 直接キーを受け取らず、「テナント/機能/ID」からキーを組み立てる
// - ロール(Reader/Writer/Admin)ごとに公開メソッドを分ける

class TenantCache {
  getUserProfile(tenantId, userId) { /* GET only */ }
  setUserProfile(tenantId, userId, data) { /* Writer only */ }
  purgeTenant(tenantId) { /* Admin only / そもそも本番では公開しない */ }
}

この形にすると、コードレビューの段階で「この操作は Reader から呼ばれないよね?」を追いやすくなり、運用でも “権限逸脱” を検知しやすくなります。

用途・権限ごとに Redis インスタンスを分ける(実質的なロール分離)

ロールが少数で、役割境界が明確なら、Redis を分割するのが一番わかりやすい解になります。Enterprise では ACL が効かない以上、ネットワーク・接続先・秘密情報の配布ポリシーで境界線を作る発想です。

よくある分割例

  • read-cache:参照専用 API が使う(TTL 長め、容量大きめ)
  • write-cache:更新処理・バッチが使う(書き込み頻度高い)
  • admin-cache:運用ツールや一時調査用(本番では接続できる人を最小限に)
分割の軸メリットデメリット現場のコツ
読み取り/書き込み事故(誤更新)の確率を下げられるデータ二重化や同期が必要な場合がある読み取り側は “生成元は DB/ストレージ” に寄せ、Redis 同期を必須にしない
環境(dev/stg/prod)誤接続が激減コスト増少なくとも prod は必ず分離(同一 Redis に prod/dev が混在は危険)
テナント強い隔離(法令/契約要件に対応しやすい)インスタンス数が増えると運用が大変“大口テナントだけ分離” のハイブリッドが現実的

「SKU を変えれば RBAC できる?」を正しく判断する

ここが一番迷いがちなポイントです。結論としては、「やりたい RBAC が何か」で答えが変わります。

Redis 側で “コマンド/キー単位” の制御が必要なら

Redis の ACL 構文(例:+@read +set ~demo*)で “キーやコマンドを絞る” という意味の RBAC をやりたいなら、Data Access Configuration(データ アクセス構成)でデータアクセス ポリシーを作れる層が必要になります。これは Basic/Standard/Premium で提供され、Enterprise/Enterprise Flash では提供されません。

一方で、Azure Managed Redis は Microsoft Entra 認証自体は使えますが、現時点では ACL/Data Access Policy が未サポートで、細粒度の許可・拒否を作る仕組みは用意されていない状況です。

“認証を強くする” だけなら(パスワードレス化したいなら)

「アクセスキー(固定シークレット)を配りたくない」「Managed Identity やサービスプリンシパルで接続したい」という意味なら、Azure Managed Redis の Microsoft Entra 認証が役立ちます。ただし、公式ドキュメント上は Entra で接続しても権限は Access Keys と同等(≒フルアクセス)として扱われるため、“認証の置き換え” と “認可(RBAC)” を混同しないことが重要です。

判断に迷ったときのチェックリスト

「Enterprise で ACL が使えない」と分かった後に、次の質問に答えると方針が固まります。

質問Yes の場合の有力案No の場合の有力案
Redis 側で “キー/コマンド単位” の強制が必須?データアクセス ポリシー対応の層へ移行、または別基盤(自前 Redis/Redis Cloud 等)アプリ側制御+ネットワーク分離で十分なことが多い
ロールは 3 種類以内(read/write/admin など)で固定?インスタンス分割がシンプルで強いアプリ側 RBAC の方が変更に強い
開発者・運用者が Redis に直結する運用が避けられない?直結用の専用インスタンス(admin-cache)を用意し、本番データとは分離直結経路を閉じ、アプリ経由に統一
近い将来に移行計画(Azure Managed Redis など)がある?“いまだけの最適化” を避け、アプリ側制御・分割方針を先に固める現行 SKU の機能で最短に寄せる

よくある質問(FAQ)

設定や権限で ACL SETUSER を有効化できますか?

できません。Azure Redis Enterprise では ACL コマンド自体がサポートされておらず、設定で解決するタイプの問題ではありません。

なぜドキュメントの手順どおりに進められないのですか?

その手順は Basic/Standard/Premium の “Data Access Configuration” を前提にしている場合があります。Enterprise/Enterprise Flash(および Azure Managed Redis の現行仕様)では同じメニューが存在しない/同等機能が未提供のためです。

Azure Managed Redis なら ACL で RBAC できますか?

現時点では ACL(および Data Access Policy)が未サポートで、細粒度 RBAC の実現は難しい状況です。公式にも「現時点で未サポート」「いつ/提供されるかは不明」といった趣旨の回答が出ています。

それでも “安全に” 運用するための最低ラインは?

  • Redis へ到達できるネットワーク経路を最小化する(誰でも到達できる状態にしない)
  • 接続情報(アクセスキー等)の配布先を絞り、ローテーション運用を前提にする
  • アプリ側で「誰が何のキーを触ったか」をログに残し、監査できる形にする
  • 役割が明確ならインスタンス分割で境界線を作る

まとめ

  • Azure Redis Enterprise では ACL SETUSER を含む ACL コマンドがサポートされず、エラーは仕様によるものです。
  • 「Data Access Configuration(データ アクセス構成)」は Basic/Standard/Premium の機能であり、Enterprise/Enterprise Flash には表示されません。
  • Azure Managed Redis は Entra 認証が利用できる一方、現時点で ACL/Data Access Policy は未サポートで、細粒度 RBAC の代替は設計で補う必要があります。
  • 代替策は「アプリ側で制御」「インスタンス分割」「基盤の見直し」の 3 つ。要件に合わせて組み合わせるのが現実的です。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次