グラント vs. ACL
最終検証日:
翻訳: 竹洞 陽一郎
Tailscaleでは、tailnetのアクセス制御を定義する方法として、アクセス制御リスト(ACL)とグラントの2つを提供しています。
どちらの方法も、デフォルト拒否(deny-by-default)の原則に従い、tailnetポリシーファイル内で宣言的なhuJSON構文を使って記述します。
このドキュメントでは、これら2つの方法を比較し、それぞれの機能、制約、適切な使用場面について解説します。
次の表は、この2つのアクセス制御方式の主な違いを簡潔にまとめたもので、グラントがよりモダンで柔軟なセキュリティ管理手段であることを示しています。
この比較は、後続のセクションで詳しく説明する内容の枠組みとして参照できます。
| 機能 | ACL | グラント |
|---|---|---|
| アクセス制御の方式 | ネットワーク層のみ | ネットワーク層とアプリケーション層 |
| デフォルトのアクション | 明示的な"accept"アクションが常に必要 |
暗黙的にaccept |
| フォーマット | ネットワークの宛先とポートが別々のフィールド | 宛先とプロトコルをよりすっきりと分離 |
| アプリケーションケイパビリティ | 不可 | 可 |
| ルーティングの認識 | 不可 | 可(viaフィールドを使用) |
| デバイスポスチャのサポート | 可 | 可 |
グラントはACLと機能面で完全に同等(feature complete)であり、ACLのすべての機能を備えています。
主な違いは、グラントには今後も新機能や改善が継続的に提供される一方、ACLにはそれがない点です。
比較
ACLからグラントへの進化は、Tailscaleのアクセス制御への取り組み方が変化してきたことを表しています。
このセクションでは、これら2つの方式の思想的・アーキテクチャ的な違いを掘り下げ、Tailscaleのアクセス制御モデルが、従来のネットワーク中心のアプローチから、ネットワークとアプリケーションのセキュリティを橋渡しするより高度なシステムへと成熟してきた経緯をたどります。
これらの概念的な違いを理解することで、グラントが最新のtailnet導入における推奨方式となっている理由をより深く理解できます。
ACL
ACLは、Tailscaleの立ち上げ当初から、アクセス制御方式の基盤となってきました。
ACLは、もっぱらネットワーク層で動作し、どのデバイス同士が、どのポートとプロトコルで通信できるかを制御します。
ACLシステムは、明示的なデフォルト拒否(deny-by-default)の原則に従っており、管理者は各接続の種類を個別に許可する必要があります。
組織がネットワーク接続にとどまらない、より繊細なアクセスポリシーを必要とするようになるにつれ、ACLだけでは最新のアクセス制御要件に対して不十分になる場合があります。
詳しくは、ACLの構文リファレンスを参照してください。
グラント
グラントは、Tailscaleのアクセス制御機能における重要な進化であり、ネットワーク層とアプリケーション層の両方のセキュリティを、統一された柔軟な構文に統合しています。
グラントは、どのデバイス同士が通信できるかのみを制御するモデルから、デバイスやユーザーがアプリケーションやサービスとやり取りする際に行使できる、具体的なケイパビリティを制御するモデルへと、セキュリティモデルを拡張します。
この進化は、ある共通のパターンに気づいたことに端を発しています。それは、ネットワークの権限もアプリケーションの権限も、結局のところ同じ概念モデルに行き着くということです。すなわち、「送信元(source)は、宛先(destination)と通信する際に、ケイパビリティを持つ」という考え方です。
グラントはこの概念を形式化し、権限を簡潔かつ強力に定義する方法を作り出しています。
グラントシステムはデフォルト拒否のセキュリティモデルを維持しつつ、各グラントが暗黙的にacceptアクションを意味するため、必須のactionフィールドのような冗長な要素を排除しています。
また、グラントは、アプリケーション機能へのアクセス管理や、送信元が宛先にアクセスする方法の制御(viaを使用)など、より高度なアクセス制御パラメーターも導入しています。
詳しくは、グラントの構文リファレンスを参照してください。
それぞれの方式をいつ使うか
このセクションでは、さまざまなシナリオにおいてどちらのアクセス制御方式が最も適しているかについてのガイダンスを提供します。
新規導入において通常グラントが選ばれる理由を説明しつつ、ACLが依然として適切な特定の状況についても触れます。
これらの考慮事項を理解しておくことで、将来のセキュリティ要件を見据えながら、tailnetの構成について適切な判断ができるようになります。
グラントを使う(推奨)
グラントは、すべての新規tailnetおよび既存導入の更新において推奨される方式です。次のような場合には、グラントを使うべきです。
- tailnetポリシーをゼロから構築する場合。
- アプリケーションレベルの権限を制御する場合。
- よりすっきりとした、保守しやすいポリシーファイルが必要な場合。
viaフィールドを使ったルートフィルタリングを利用する場合。- デバイスポスチャベースのアクセス制御を実装する場合。
- Kubernetesのなりすまし(impersonation)ルールを作成する場合。
- 認証・認可のためにTailscaleと統合するカスタムアプリケーションを構築する場合。
グラントシステムは活発に開発が進められており、今後も新機能や改善が提供され続けます。
Tailscaleの内部ツールや、TailSQL、Kubernetes Operator、golinkなど、多くのオープンソースプロジェクトが、きめ細かなアクセス制御のためにすでにグラントを活用しています。
ACLを使う
Tailscaleは、アクセス制御ポリシーの最初のバージョンであるACLを、今後も引き続きサポートします。ACLは無期限に使い続けることができます。
ACLを使うべきなのは、次のような場合に限られます。
- ACL構文に大きく依存している既存の導入環境を維持する場合。
- ACL形式を前提としたツールやスクリプトを扱う場合。
- 古い統合との互換性が必要な場合。
このような場合であっても、グラントはより優れた機能とすっきりとした構文を提供するため、Tailscaleは徐々にグラントへ移行することを推奨しています。
移行期間中は、同じポリシーファイル内でグラントとACLを共存させることができ、段階的な移行が可能です。