tailscale続報 QNAPで動かす&ACLでアクセス制御する&インターネット接続暗号化

アクセス制御機能であるACLを設定する

ACLは、tailscaleを組織で利用したり、外部ユーザーとマシンを共有したりする際に必要となるアクセス制御機能だ。

tailscaleでは、標準設定では同じ組織に所属するマシンの通信が許可されており、クライアントアプリで「Allow Incoming Connections」をオフにする(チェックを外す)ことで、そのマシンへの接続を拒否できる仕組みになっている。

通常はこの機能だけでもアクセス制御が可能だが、ACLを利用することで、さらに細かな制御が可能になる。

例えば、次のようなことが可能だ。

上図は、簡単なACLの設定例だ。左側が社内で右側が社外を示し、それぞれのユーザーに対して異なるアクセス制御設定で「nas01」へのアクセスをコントロールしている。

社内は、「tokyo」という地域と「manager」という職種の2つのグループで構成されており、それぞれに異なるアクセス権が設定されている。

具体的には、上のユーザーはmanagerグループで許可されているように、nas01だけでなく全てマシンの全てのポートに対してアクセス可能だが、下のユーザーはtokyoグループにしか所属していないため、nas01に対して80と5000の2つのポートでしかアクセスできない。

このようなグループごとのアクセス制御に対するACLは、図の同じ色で示された部分のように記述する。

tailscale続報 QNAPで動かす&ACLでアクセス制御する&インターネット接続暗号化

{ "Action": "accept", "Users": ["group:manager"], "Ports": ["*:*"] }, { "Action": "accept", "Users": ["group:tokyo"], "Ports": ["nas01:80,5000"] },

「manager」は「"Ports": ["*:*"]」なのでマシンを問わず、全てのポートにアクセス可能だが、「tokyo」は「"Ports": ["nas01:80,5000"」なので、nas01のポート80とポート5000にしかアクセスできない。

このようにtailscaleのACLでは、ユーザーをグループごとに分けたり、グループごとにアクセスできるマシンやポートを制限したりできる(ユーザーごとに設定することも可能)。

続いて、図の右側の社外ユーザーの制御を見てみよう。

こちらは、上図の青い部分の記述でアクセスが制御される。

{ "Action": "accept", "Users": ["autogroup:shared"], "Ports": ["tag:public:7001"]}

ここでは、オートグループという概念を利用する。文字通り、動的にメンバーを構成可能なグループで、ここで利用している「shared」はtailscale上でマシンを選択して接続を共有した外部ユーザーのアドレスを示す。

このように、マシンを共有するたびに、共有相手となるユーザーが自動的に「shared」グループに登録されるため、共有相手が増える度にACLを書き換えるような手間がかからないことになる。

また、共有するマシンも個別のマシン名ではなく「"Ports": ["tag:public:7001"]」とタグで指定している。

このタグは、マシンごとに設定可能で、マシン側でtailscaleを起動する際に、次のようにタグを付けて起動することで利用できる。

sudo tailscale up --advertise-tags=tag:public

このようにマシンごとにタグを付けて管理することで、社内ユーザーのみが利用可能なマシンと外部に公開してもかまわないマシンを明確に区別することができる。

もちろんタグが乱立すると管理が煩雑になるため、タグにはオーナーが必要だ。それが上図のACL内の赤で記述した「TagOwners」の部分になる。つまり、タグを設定できるのは社内ユーザーの中でも特定のユーザーのみに限られることになる。

"TagOwners": {// manager allowed to tag servers as public "tag:public": [ "group:manager", ],

こうした機能により、tailscaleでは、マシンに対して複雑なアクセス制御をすることができる。具体的には以下のようなアクセス制御が可能で、これらを組み合わせることもできる。

例えば、ウェブサイトの制作時に顧客に対して「443」のみを許可して内容を確認してもらったり、開発者向けのAPIアクセスだけを許可したり、ゲームのポートのみを許可してマルチプレイを楽しんだりと、特定のユーザーに対して限定的に公開されたポートのみを使ってVPN接続を共有できる。こうした柔軟な設定が可能な点も、tailscaleの魅力と言えるだろう。