ACLの例
最終検証日:
翻訳: 竹洞 陽一郎
Tailscaleは現在、次世代のアクセス制御ポリシー構文であるグラントを使って、リソースへのアクセスを保護しています。
グラントは、従来のACLのすべての機能に加えて、追加の機能を提供します。
ACLは今後も無期限に動作し続けます。Tailscaleは、この第1世代の構文のサポートを製品から削除することはありません。
ただし、ACLには新機能が追加されないため、Tailscaleはグラントへの移行と、すべての新しいtailnetポリシーファイルの構成でグラントを使用することを推奨しています。
ビジュアルポリシーエディタを使ってtailnetポリシーファイルを管理することもできます。
ビジュアルエディタの使い方については、ビジュアルエディタリファレンスを参照してください。
このトピックでは、よくあるシナリオ向けのアクセス制御(ACL)の例を紹介します。構文について詳しくは、tailnetポリシー構文を参照してください。
| 例 | 説明 | 使用する機能 |
|---|---|---|
| すべて許可する(デフォルトACL) | tailnet内のすべてのデバイスが、tailnet内の他のデバイスにアクセスできる、デフォルトのtailnetポリシーです。 | ACL、SSH |
| すべて拒否する | すべての接続を拒否します。 | ACL |
| ユーザーが自分自身のデバイスにアクセスできるようにする | 他のポリシーで妨げられない限り、すべてのtailnetユーザーが自分の所有するデバイスにアクセスできます。 | ACL、SSH |
| リソースレベルのアクセスポリシー | tailnet内の特定のリソースへのアクセスを、特定のデバイスに許可します。 | ACL、hosts |
| 用途に基づいて制限する(タグ) | タグを使って、tailnet内の特定のリソースへのアクセスを、特定のデバイスに許可します。 | ACL |
| グループに基づいて制限する | オートグループ、カスタムグループ、プロビジョニングされたグループを使って、リソースへのアクセスを管理します。 | ACL、groups |
| 個々のユーザーに基づいて制限する | 特定のユーザーに対して、リソースへのアクセスを管理します。 | ACL |
| Standardプランの ACL | 従業員が自分自身のデバイスと、corpタグの付いたデバイスにアクセスできるようにし、Adminがcorpまたはprodタグの付いたデバイスにアクセスできるようにする、基本的なStandardプランを使用します。 | ACL、タグオーナー |
| 内部アプリケーション(VPN)へのアクセス | 職務上の役割に基づいて、ユーザーのアプリケーションへのアクセスを管理します。 | ACL、groups、タグオーナー |
| 同期グループを使った内部アプリケーション(VPN)へのアクセス | アイデンティティプロバイダーと同期されたグループを使って、内部リソースへのアクセスを管理します。 | ACL、groups、タグオーナー |
| 本番環境へのリモートアクセス | 職務上の役割に基づいて、本番環境へのユーザーアクセスを管理します。 | ACL、groups、タグオーナー、tests |
| VPCへのアクセス(VPCピアリング) | アクセス制御リストを使って、仮想プライベートクラウドへのアクセスを管理します。 | ACL、groups、タグオーナー、自動承認 |
| 契約者とアクセスを共有する | 開発環境の共有リソースへのアクセスを、サードパーティの契約者に許可します。 | ACL、groups、タグオーナー |
| リモート開発 | リモート開発環境へのアクセスを管理します。 | ACL、groups、タグオーナー |
| ペアプログラミング | 複数のエンジニアがSSHで接続できる、ペアプログラミング環境を作成します。 | ACL、タグオーナー |
| CI/CDデプロイパイプライン | 職務上の役割に基づいて、リソースへのアクセスを管理します。 | ACL、groups、タグオーナー |
| アプリケーションへのアクセスを監視する | 監視サーバーが、一般的なポートですべてのアプリケーションにアクセスできるようにします。 | ACL、groups、タグオーナー |
| アプリケーションのピアリング | 複数のクラウドプロバイダーやアプリケーションが互いにアクセスできるようにします。 | ACL、groups、タグオーナー |
| ネットワークのマイクロセグメンテーション | ネットワークのマイクロセグメントへのアクセスを許可しつつ、セグメント間のアクセスを拒否します。 | ACL、groups、タグオーナー、tests |
すべて許可する(デフォルトACL)
| プランごとの利用可否 | 機能 |
|---|---|
| すべてのプラン | ACL、SSH、オートグループ |
Tailscaleネットワーク(tailnetと呼ばれます)を最初に作成すると、Tailscaleはデフォルトの全許可アクセスポリシーで初期化します。
これにより、ネットワーク内のトラフィックを制限することなく、Tailscaleに接続して使用できます。
既存のポリシーファイルの内容を削除し、Reset to defaultを選択することで、ACLポリシーファイルを元のデフォルトにリセットできます。
ポリシーファイルの変更は、管理コンソールのConfiguration logsページから元に戻すこともできます。
デフォルトポリシーが行う内容の詳細です。
- tailnet内のすべてのデバイスが、tailnet内の他のすべてのデバイスにアクセスできるようにします。
- すべてのユーザーが、checkモードを使って、rootまたはroot以外として、自分自身のデバイスへのTailscale SSHセッションを確立できるようにします。
--snat-subnet-routes=falseで初期化されたサブネットルーター(Linuxのみ)がある場合、そのサブネットルーターと同じローカルネットワーク上のデバイスも、tailnet内のすべてのデバイスにアクセスできます。- tailnet内に、他のネットワークから共有されたデバイスがある場合、そのデバイスはtailnet内のどのデバイスにもアクセスできません。そのデバイスは、tailnetからの受信接続にのみ応答できます。
{
"acls": [
{
"action": "accept",
"src": [
"*"
],
"dst": [
"*:*"
]
}
],
"ssh": [
{
"action": "check",
"src": [
"autogroup:member"
],
"dst": [
"autogroup:self"
],
"users": [
"autogroup:nonroot",
"root"
]
}
],
}
tailnetポリシーファイルからaclsフィールドを省略することは、デフォルトの全許可ポリシーと同等です。
すべての接続を拒否するには、ポリシーファイルのaclsフィールドに空のオブジェクトを使用します。
{} // aclsセクションが空の場合、Tailscaleはデフォルトの全許可ポリシーを適用します。
デフォルトのACLでは、sshルールはdstフィールドにautogroup:selfを、usersフィールドにautogroup:nonrootを使用します。
dstフィールドをautogroup:selfから、ACLタグのような別の宛先に変更する場合は、usersフィールドのautogroup:nonrootも置き換えることを検討してください。
usersフィールドからautogroup:nonrootを削除しないと、src設定で許可された誰もが、dstデバイス上の任意のroot以外のユーザーとしてSSH接続できてしまいます。
すべて拒否する
| プランごとの利用可否 | 機能 |
|---|---|
| すべてのプラン | ACL |
ポリシーファイルのaclsフィールドに空の選択肢を使うことで、tailnet内のすべての接続を拒否できます。
この構成では、すべてのデバイスが互いに通信できなくなります。
tailnet内で何も機能しなくなるため、一般的な用途にはこの構成を推奨しません。
{
"acls": []
}
tailnetポリシーファイルからaclsフィールドを省略することは、「すべて拒否」ポリシーと同等ではありません。
代わりに、Tailscaleはデフォルトの全許可ポリシーを適用し、tailnet内のすべてのデバイスが他のデバイスにアクセスできるようにします。
ユーザーが自分自身のデバイスにアクセスできるようにする
| プランごとの利用可否 | 機能 |
|---|---|
| すべてのプラン | ACL、タグ、タグオーナー |
この例は、すべてのユーザーが自分自身のデバイスにアクセスできるようにします。
ユーザーに自分自身のデバイスへのアクセスを許可しつつ、tailnet内の他のデバイスへのアクセスは許可したくない、多くのユースケースに適しています。
{
"acls": [
{
"action": "accept",
"src": [
"autogroup:member"
],
"dst": [
"autogroup:self:*"
]
}
],
}
リソースレベルのアクセスポリシー
| プランごとの利用可否 | 機能 |
|---|---|
| すべてのプラン | ACL、hosts |
IPアドレスを使って、あるデバイスやネットワークから別のデバイスやネットワークへの接続性を有効にできます。
さらに、hostsセクションを使うと、IPアドレスやCIDR範囲に人間が読みやすい名前を定義でき、アクセスルールがより読みやすくなります。
この例が行うことです。
- IPアドレス
100.100.123.124のデバイスは、IPアドレス100.100.123.123のデバイスにアクセスできます。 - IPアドレス
100.100.123.124のデバイスは、サブネットルーター経由で、サブネット192.0.2.0/24内のデバイスにアクセスできます。 - ホスト名
frontend-server-01のデバイスは、サブネット192.0.2.0/24内のデバイスにアクセスできます。 - ホスト名
frontend-server-01のデバイスは、ホスト名dev-network-01のデバイスにアクセスできます。
{
"acls": [
{
"action": "accept",
"src": [
"100.100.123.124"
],
"dst": [
"100.100.123.123:*"
]
},
{
"action": "accept",
"src": [
"100.100.123.124"
],
"dst": [
"192.0.2.0/24:*"
]
},
{
"action": "accept",
"src": [
"frontend-server-01"
],
"dst": [
"192.0.2.0/24:*"
]
},
{
"action": "accept",
"src": [
"frontend-server-01"
],
"dst": [
"dev-network-01:*"
]
}
],
"hosts": {
"frontend-server-01": "100.100.123.123",
"dev-network-01": "203.0.113.0/24"
}
}
4via6サブネットルーターの背後にあるリソースをターゲットにするアクセス制御ルールを記述する際は、宛先としてIPv4アドレスではなく、IPv6のCIDRまたはアドレスを使用してください。
IPv6のCIDRを取得するには、tailscale debug viaを使用します。
用途に基づいて制限する(タグ)
| プランごとの利用可否 | 機能 |
|---|---|
| すべてのプラン | ACL、タグ |
タグを使うと、人間のユーザーとは別に、デバイスにアイデンティティを割り当て、そのアイデンティティをACLの一部として使ってアクセスを制限できます。
Tailscaleネットワークにサーバーを追加する際は、タグを使うべきです。これにより、運用チームの誰が登録したかではなく、用途に基づいてアクセスを決定できます。
この例が行うことです。
tag:frontendタグの付いたデバイスは、tag:backendタグの付いたデバイスにアクセスできます。tag:backendタグの付いたデバイスは、tag:loggingタグの付いたデバイスにアクセスできます。
{
"acls": [
{
"action": "accept",
"src": [
"tag:frontend"
],
"dst": [
"tag:backend:*"
]
},
{
"action": "accept",
"src": [
"tag:backend"
],
"dst": [
"tag:logging:*"
]
}
]
}
グループに基づいて制限する
オートグループ、カスタムグループ、またはサポートされているアイデンティティプロバイダーからプロビジョニングされたグループを使って、tailnet内のリソースへのアクセスを有効にできます。
オートグループを使う
| プランごとの利用可否 | 機能 |
|---|---|
| すべてのプラン | ACL、オートグループ、タグ |
オートグループは、同じプロパティを持つユーザー、宛先、ユーザー名を自動的に含める、組み込みのグループです。
この例が行うことです。
- tailnetのすべてのメンバー(
autogroup:member)は、tag:frontendタグの付いたデバイスにアクセスできます。 - すべてのTailscaleAdmin(
autogroup:admin)は、tag:backendまたはtag:loggingタグの付いたデバイスにアクセスできます。
{
"acls": [
{
"action": "accept",
"src": [
"autogroup:member"
],
"dst": [
"tag:frontend:*"
]
},
{
"action": "accept",
"src": [
"autogroup:admin"
],
"dst": [
"tag:backend:*",
"tag:logging:*"
]
}
]
}
カスタムグループを使う
| プランごとの利用可否 | 機能 |
|---|---|
| Personal、Premium、Enterprise | ACL、groups、オートグループ、タグ |
カスタムグループを使うと、ユーザーのグループの省略表現を定義でき、ユーザーを個別に列挙する代わりに、アクセスルール内で使用できます。
この例が行うことです。
- エンジニアリングチーム(
group:engineering)は、alice@example.comとbob@example.comで構成されます。 - DevOpsチーム(
group:devops)は、amelie@example.comとcarl@example.comで構成されます。 - エンジニアリングチーム(
group:engineering)は、tag:frontendまたはtag:backendタグの付いたデバイスにアクセスできます。 - DevOpsチーム(
group:devops)は、tag:frontend、tag:backend、またはtag:loggingタグの付いたデバイスにアクセスできます。
{
"groups": {
"group:engineering": [
"alice@example.com",
"bob@example.com"
],
"group:devops": [
"amelie@example.com",
"carl@example.com"
]
},
"acls": [
{
"action": "accept",
"src": [
"group:engineering"
],
"dst": [
"tag:frontend:*",
"tag:backend:*"
]
},
{
"action": "accept",
"src": [
"group:devops"
],
"dst": [
"tag:frontend:*",
"tag:backend:*",
"tag:logging:*"
]
}
]
}
プロビジョニングされたグループを使う
サポートされているアイデンティティプロバイダーからのグループプロビジョニングを使うことで、ACL内でカスタムグループを維持する必要がなくなります。
{
"acls": [
{
"action": "accept",
"src": [
"group:engineering@example.com"
],
"dst": [
"tag:frontend:*",
"tag:backend:*"
]
},
{
"action": "accept",
"src": [
"group:devops@example.com"
],
"dst": [
"tag:frontend:*",
"tag:backend:*",
"tag:logging:*"
]
}
]
}
個々のユーザーに基づいて制限する
| プランごとの利用可否 | 機能 |
|---|---|
| Personal、Premium、Enterprise | ACL、タグ |
個々のユーザーに基づいて、リソースへのアクセスを有効にできます。
この例が行うことです。
- ユーザーAmelieは、
tag:frontendタグの付いたデバイスにアクセスできます。 - ユーザーBobは、
tag:backendタグの付いたデバイスにアクセスできます。
{
"acls": [
{
"action": "accept",
"src": [
"amelie@example.com"
],
"dst": [
"tag:frontend:*"
]
},
{
"action": "accept",
"src": [
"bob@example.com"
],
"dst": [
"tag:backend:*"
]
}
]
}
Standardプランの ACL
| プランごとの利用可否 | 機能 |
|---|---|
| すべてのプラン | ACL、オートグループ、タグ、タグオーナー |
この例は、corpおよびprodデバイスへのリモートアクセスを提供します。多くのStandardプランのユースケースに適しています。
チームは、Tailscaleを使ってリモートデバイスにアクセスできます。
このシナリオでは、すべてのユーザーが自分自身のリモートデバイスに加え、タグ付けされたサーバーなどの共通の企業デバイスにアクセスできます。
本番デバイスにアクセスできるのは、Tailscale Adminのみです。
Adminは、どのデバイスにタグを付けるかを構成できます。
企業デバイスや本番デバイス同士は互いにアクセスできず、共有ユーザーもデバイスにアクセスできません。
この例が行うことです。
- すべての従業員は、自分自身のデバイスにアクセスできます。
- すべての従業員は、
tag:corpタグの付いた企業デバイスにアクセスできます。 - すべてのTailscale Admin(
autogroup:admin)は、tag:prodタグの付いたデバイスにアクセスできます。 - すべてのTailscale Adminは、
tag:corpとtag:prodのどのデバイスにタグを付けるかを管理できます。
{
"acls": [
{
"action": "accept",
"src": [
"autogroup:member"
],
"dst": [
"autogroup:self:*"
]
},
{
"action": "accept",
"src": [
"autogroup:member"
],
"dst": [
"tag:corp:*"
]
},
{
"action": "accept",
"src": [
"autogroup:admin"
],
"dst": [
"tag:prod:*"
]
}
],
"tagOwners": {
"tag:corp": [
"autogroup:admin"
],
"tag:prod": [
"autogroup:admin"
]
}
}
内部アプリケーション(VPN)へのアクセス
| プランごとの利用可否 | 機能 |
|---|---|
| Personal、Premium、Enterprise | ACL、groups、タグ、タグオーナー |
Tailscaleを使うと、ユーザーに、カスタムの社内アプリケーションと、社内でホストされているサードパーティアプリケーションの両方を含む、内部アプリケーションへのアクセスを許可できます。
このシナリオでは、tailnet内のユーザーは、職務上の役割に基づいてアプリケーションにアクセスできます。IT部門は、内部アプリケーションをセットアップできます。
この例が行うことです。
- エンジニアリングチーム(
group:engineering)のメンバーは、tag:engineeringタグの付いたデバイスにアクセスできます。 - 財務チーム(
group:finance)のメンバーは、tag:financeタグの付いたデバイスにアクセスできます。 - 法務チーム(
group:legal)のメンバーは、tag:legalタグの付いたデバイスにアクセスできます。 - すべての従業員は、
tag:internalタグの付いたデバイスにアクセスできます。 - すべてのTailscale Admin(
autogroup:admin)(IT部門など)は、tag:engineering、tag:finance、tag:legal、tag:internalのどのデバイスにタグを付けるかを管理できます。
{
"groups": {
"group:engineering": [
"alice@example.com"
],
"group:finance": [
"bob@example.com"
],
"group:legal": [
"carl@example.com"
]
},
"acls": [
{
"action": "accept",
"src": [
"group:engineering"
],
"dst": [
"tag:engineering:*"
]
},
{
"action": "accept",
"src": [
"group:finance"
],
"dst": [
"tag:finance:*"
]
},
{
"action": "accept",
"src": [
"group:legal"
],
"dst": [
"tag:legal:*"
]
},
{
"action": "accept",
"src": [
"autogroup:member"
],
"dst": [
"tag:internal:*"
]
}
],
"tagOwners": {
"tag:engineering": [
"autogroup:admin"
],
"tag:finance": [
"autogroup:admin"
],
"tag:legal": [
"autogroup:admin"
],
"tag:internal": [
"autogroup:admin"
]
}
}
同期グループを使った内部アプリケーション(VPN)へのアクセス
| プランごとの利用可否 | 機能 |
|---|---|
| Enterprise | ACL、groups、オートグループ、タグ、タグオーナー |
ユーザー・グループプロビジョニングを使うと、アイデンティティプロバイダーから同期されたグループを、アクセスルールに含めることができます。
Tailscaleは、同期されたグループ名を小文字として扱います。スペースを含めることはできますが、@記号は含められません。
この例が行うことです。
- 同期グループ
group:engineering@example.com内のエンジニアリングチームのメンバーは、tag:engineeringタグの付いたデバイスにアクセスできます。 - 同期グループ
group:finance team@example.com内の財務チームのメンバーは、tag:financeタグの付いたデバイスにアクセスできます。 - 同期グループ
group:Legal@example.com内の法務チームのメンバーは、tag:legalタグの付いたデバイスにアクセスできます。 - すべての従業員は、
tag:internalタグの付いたデバイスにアクセスできます。 - すべてのTailscale Admin(
autogroup:admin)(IT部門など)は、tag:engineering、tag:finance、tag:legal、tag:internalのどのデバイスにタグを付けるかを管理できます。
{
"groups": {},
"acls": [
{
"action": "accept",
"src": [
"group:engineering@example.com"
],
"dst": [
"tag:engineering:*"
]
},
{
"action": "accept",
"src": [
"group:finance team@example.com"
],
"dst": [
"tag:finance:*"
]
},
{
"action": "accept",
"src": [
"group:legal@example.com"
],
"dst": [
"tag:legal:*"
]
},
{
"action": "accept",
"src": [
"autogroup:member"
],
"dst": [
"tag:internal:*"
]
}
],
"tagOwners": {
"tag:engineering": [
"autogroup:admin"
],
"tag:finance": [
"autogroup:admin"
],
"tag:legal": [
"autogroup:admin"
],
"tag:internal": [
"autogroup:admin"
]
}
}
本番環境へのリモートアクセス
| プランごとの利用可否 | 機能 |
|---|---|
| Personal、Premium、Enterprise | ACL、groups、オートグループ、タグ、タグオーナー、tests |
カスタムグループ(group:dev)の代わりにautogroup:memberを使うことで、この例をStandardプランでも動作するように変更できます。
DevOps、インフラ、またはSREチームは、Tailscaleを使って、機密性が高く厳重に保護された本番環境にアクセスできます。
このシナリオでは、DevOpsチームは本番環境にアクセスできる一方、他の開発者は開発環境内のリソースにのみアクセスできる場合があります。
すべての開発者は、Grafanaのような監視ツールにアクセスできます。
この例が行うことです。
- すべての従業員は、自分自身のデバイス(リモートワークステーションなど)にアクセスできます。
- 開発チーム(
group:dev)のメンバーは、tag:devタグの付いたデバイス(ライセンスサーバーなど)にアクセスできます。 - すべてのTailscale Admin(
autogroup:admin)(DevOpsチームのメンバーなど)は、tag:prodタグの付いたデバイス(本番環境など)にアクセスできます。 - すべての従業員は、
tag:monitoringタグの付いたデバイスに、ポート80と443でアクセスできます(監視ダッシュボードなど)。 - すべてのTailscale Adminは、
tag:dev、tag:prod、tag:monitoringのどのデバイスにタグを付けるかを管理できます。 - テストにより、ACLが変更されても以下が保証されます。
- Carlは引き続き、
tag:prodタグの付いたデバイスにポート80でアクセスできます。 - Aliceは引き続き、
tag:devタグの付いたデバイスにポート80でアクセスできます(tag:prodタグの付いたデバイスにはアクセスできません)。
- Carlは引き続き、
{
"groups": {
"group:dev": [
"alice@example.com",
"bob@example.com"
]
},
"acls": [
{
"action": "accept",
"src": [
"autogroup:member"
],
"dst": [
"autogroup:self:*"
]
},
{
"action": "accept",
"src": [
"group:dev"
],
"dst": [
"tag:dev:*"
]
},
{
"action": "accept",
"src": [
"autogroup:admin"
],
"dst": [
"tag:prod:*"
]
},
{
"action": "accept",
"src": [
"autogroup:member"
],
"dst": [
"tag:monitoring:80,443"
]
}
],
"tagOwners": {
"tag:monitoring": [
"autogroup:admin"
],
"tag:dev": [
"autogroup:admin"
],
"tag:prod": [
"autogroup:admin"
]
},
"tests": [
{
"src": "carl@example.com",
"accept": [
"tag:prod:80"
]
},
{
"src": "alice@example.com",
"accept": [
"tag:dev:80"
],
"deny": [
"tag:prod:80"
]
}
]
}
VPCへのアクセス(VPCピアリング)
| プランごとの利用可否 | 機能 |
|---|---|
| すべてのプラン | ACL、groups、オートグループ、タグ、タグオーナー、自動承認 |
カスタムグループ(group:dev)の代わりにautogroup:memberを使うことで、この例をStandardプランでも動作するように変更できます。
DevOpsチームは、Tailscaleを使って、開発者がプライベートまたはホスト型クラウドプロバイダー上のVirtual Private Cloud(VPC)で稼働している既存の社内アプリケーションにアクセスできるようにできます。
このシナリオでは、開発者はVPC内のリソースにアクセスでき、DevOpsチームはVPCへのアクセスを管理できます。
VPCは、(重複しないIP範囲であれば)互いにピアリングできます。
すべてのデバイスにTailscaleをインストールせずに、既存のサブネットをTailscaleネットワークに接続するには、サブネットルーターを使用できます。
サブネット内でサブネットルーターを実行し、ルートをアドバタイズすることで、Tailscaleがそのサブネット向けのトラフィックを、転送用のデバイスにルーティングできるようにします。
サブネット上のデバイスがtailnet内のデバイスに接続できるようにするには、サブネットルートのマスカレードを無効化してください。
自動承認を使って、ルートを自動的に承認することもできます。
この例が行うことです。
- すべてのTailscale Admin(
autogroup:admin)(IT部門など)は、tag:vpc-peeringタグの付いたデバイスに(メンテナンス目的で)アクセスできます。 - 開発チーム(
group:dev)のメンバーは、サブネット192.0.2.0/24と198.51.100.0/24内のデバイスにアクセスできます。 - サブネット
192.0.2.0/24は(サブネットルートのマスカレードが無効化されている場合)サブネット198.51.100.0/24にアクセスでき、その逆も可能です。 - すべてのTailscale Admin(IT部門など)は、
tag:vpc-peeringのどのデバイスにタグを付けるかを管理できます。 - すべてのTailscale Adminと、
tag:vpc-peeringタグの付いたデバイスは、192.0.2.0/24と198.51.100.0/24のルートを自動承認できます。
{
"groups": {
"group:dev": [
"alice@example.com",
"bob@example.com"
]
},
"acls": [
{
"action": "accept",
"src": [
"autogroup:admin"
],
"dst": [
"tag:vpc-peering:*"
]
},
{
"action": "accept",
"src": [
"group:dev",
"192.0.2.0/24",
"198.51.100.0/24"
],
"dst": [
"192.0.2.0/24:*",
"198.51.100.0/24:*"
]
}
],
"tagOwners": {
"tag:vpc-peering": [
"autogroup:admin"
]
},
"autoApprovers": {
"routes": {
"192.0.2.0/24": [
"tag:vpc-peering",
"autogroup:admin"
],
"198.51.100.0/24": [
"tag:vpc-peering",
"autogroup:admin"
]
}
}
}
契約者とアクセスを共有する
| プランごとの利用可否 | 機能 |
|---|---|
| Personal、Premium、Enterprise | ACL、groups、オートグループ、タグ、タグオーナー |
カスタムグループ(group:dev)の代わりにautogroup:memberを使うことで、この例をStandardプランでも動作するように変更できます。
開発チームは、Tailscaleを使って、データベースやホスト型コードリポジトリなどの特定のリソースへのアクセスを、契約者と共有できます。
このシナリオでは、開発者は社内の開発リソースにアクセスできます。
特定のデバイスは、契約者の業務の一環として共有できます。
この例が行うことです。
- すべての従業員は、自分自身のデバイスにアクセスできます。
- 開発チーム(
group:dev)のメンバーは、tag:devタグの付いたデバイス(パッケージレジストリやデータベースなど)にアクセスできます。 - 共有招待を承諾した契約者は、(自分に共有された)
tag:devタグの付いたデバイスにアクセスできます。
{
"groups": {
"group:dev": [
"alice@example.com",
"bob@example.com"
]
},
"acls": [
{
"action": "accept",
"src": [
"autogroup:member"
],
"dst": [
"autogroup:self:*"
]
},
{
"action": "accept",
"src": [
"group:dev",
"autogroup:shared"
],
"dst": [
"tag:dev:*"
]
}
],
"tagOwners": {
"tag:dev": [
"group:dev"
]
}
}
リモート開発
| プランごとの利用可否 | 機能 |
|---|---|
| Personal、Premium、Enterprise | ACL、groups、オートグループ、タグ、タグオーナー |
カスタムグループ(group:dev)の代わりにautogroup:memberを使うことで、この例をStandardプランでも動作するように変更できます。
開発チームは、リモート開発環境の一部としてTailscaleを使用できます。
このシナリオでは、開発者はノートPCなどのローカルデバイスを持ち、それを使って、クラウド上または自社ネットワーク内の別のデバイス上でホストされているリモートワークステーションにアクセスすることがあります。
これは、機械学習やビルド作業など、より高い処理能力を持つワークステーションにアクセスする場合に役立ちます。
また、GitHub Codespaces、Gitpod、Coderのような、リモートコード環境を使用することもあります。
開発環境からは、ライセンスサーバー、パッケージレジストリ、本番データベース、その他の開発・ビルドリソースにアクセスすることがあります。
また、セルフホストまたはプライベートなコードリポジトリにアクセスすることもあります。
この例が行うことです。
- すべての従業員は、自分自身のデバイスにアクセスできます。
- 開発チーム(
group:dev)のメンバーは、tag:devタグの付いたデバイス(パッケージレジストリやデータベースなど)にアクセスできます。 - 開発チーム(
group:dev)は、tag:devのどのデバイスにタグを付けるかを管理できます。
{
"groups": {
"group:dev": [
"alice@example.com",
"bob@example.com"
]
},
"acls": [
{
"action": "accept",
"src": [
"autogroup:member"
],
"dst": [
"autogroup:self:*"
]
},
{
"action": "accept",
"src": [
"group:dev"
],
"dst": [
"tag:dev:*"
]
}
],
"tagOwners": {
"tag:dev": [
"group:dev"
]
}
}
ペアプログラミング
| プランごとの利用可否 | 機能 |
|---|---|
| Personal、Premium、Enterprise | ACL、タグ、タグオーナー |
名前付きのユーザーの代わりにautogroup:memberとautogroup:adminを使うことで、この例をStandardプランでも動作するように変更できます。
開発チームは、Tailscaleを使って、同じデバイスでリモートからペアプログラミングを行えます。
このシナリオでは、2人以上の開発者がSSHを使って、仮想マシン(VM)などの企業デバイスに接続し、(tmuxセッションなどの)ターミナルを共有できます。
この例が行うことです。
- ユーザーAliceとBobは、
tag:pair-programmingタグの付いた企業デバイスに、(SSH用の)ポート22でアクセスできます。 - Bobは、
tag:pair-programmingのどのデバイスにタグを付けるかを管理できます。
{
"acls": [
{
"action": "accept",
"src": [
"alice@example.com",
"bob@example.com"
],
"dst": [
"tag:pair-programming:22"
]
}
],
"tagOwners": {
"tag:pair-programming": [
"bob@example.com"
]
}
}
CI/CDデプロイパイプライン
| プランごとの利用可否 | 機能 |
|---|---|
| すべてのプラン | ACL、groups、タグ、タグオーナー |
DevOpsまたはインフラチームは、Tailscaleを使って、デプロイパイプラインへのアクセスを制限できます。
このシナリオでは、開発者はコードリポジトリなどの開発ツールにアクセスできます。
その後、自動化されたCI/CDパイプラインが、コードのビルドとデプロイを行います。
DevOpsチームは、デプロイパイプラインと本番環境にアクセスできます。
この例が行うことです。
- 開発チーム(
group:dev)のメンバーは、tag:devタグの付いたデバイス(コードリポジトリやライセンスサーバーなど)にアクセスできます。 - DevOpsチーム(
group:devops)のメンバーは、tag:ciタグの付いたデバイス(ビルドツールなど)と、tag:prodタグの付いたデバイス(本番環境など)にアクセスできます。 - DevOpsチーム(
group:devops)は、tag:dev、tag:ci、tag:prodのどのデバイスにタグを付けるかを管理できます。 tag:ciタグは、(デプロイパイプラインの一部としてタグを適用するために)tag:prodとtag:devのどのデバイスにタグを付けるかを管理できます。
{
"groups": {
"group:dev": [
"alice@example.com",
"bob@example.com"
],
"group:devops": [
"carl@example.com"
]
},
"acls": [
{
"action": "accept",
"src": [
"group:dev"
],
"dst": [
"tag:dev:*"
]
},
{
"action": "accept",
"src": [
"group:devops"
],
"dst": [
"tag:ci:*",
"tag:prod:*"
]
}
],
"tagOwners": {
"tag:ci": [
"group:devops"
],
"tag:dev": [
"group:devops",
"tag:ci"
],
"tag:prod": [
"group:devops",
"tag:ci"
]
}
}
アプリケーションへのアクセスを監視する
| プランごとの利用可否 | 機能 |
|---|---|
| すべてのプラン | ACL、groups、タグ、タグオーナー |
カスタムグループ(group:devops)の代わりにautogroup:memberを使うことで、この例をStandardプランでも動作するように変更できます。
DevOpsチームは、Tailscaleを使って、ネットワーク内のサービスからログを問い合わせ、監視ツールの一部としてレポートできます。
このシナリオでは、監視サーバー(Prometheusなど)は、ネットワーク内のすべてのアプリケーションに、一般的なポートでアクセスできます。
この例が行うことです。
tag:monitoringタグの付いたデバイスは、ポート80、443、9100でサービスにアクセスできます。tag:monitoringタグの付いたデバイスは、tag:loggingタグの付いたサービスにアクセスできます。- DevOpsチーム(
group:devops)は、tag:monitoringとtag:loggingタグの付いたデバイスにアクセスできます。 - DevOpsチーム(
group:devops)は、tag:monitoringとtag:loggingのどのデバイスにタグを付けるかを管理できます。
{
"groups": {
"group:devops": [
"carl@example.com"
]
},
"acls": [
{
"action": "accept",
"src": [
"tag:monitoring"
],
"dst": [
"*:80,443,9100",
"tag:logging:*"
]
},
{
"action": "accept",
"src": [
"group:devops"
],
"dst": [
"tag:monitoring:*",
"tag:logging:*"
]
}
],
"tagOwners": {
"tag:monitoring": [
"group:devops"
],
"tag:logging": [
"group:devops"
]
}
}
アプリケーションのピアリング
| プランごとの利用可否 | 機能 |
|---|---|
| すべてのプラン | ACL、groups、タグ、タグオーナー |
カスタムグループ(group:infra)の代わりにautogroup:memberを使うことで、この例をStandardプランでも動作するように変更できます。
インフラチームは、Tailscaleを使って、複数のクラウドプロバイダーやSaaSアプリケーションで稼働しているアプリケーションやサービスを、互いに接続できます。
このシナリオでは、ある1つのアプリケーションが、ネットワーク内の別のアプリケーションと接続できます。例えば、Materializeのように、あるデータベースから別のデータベースへストリーミングする場合などです。
この例が行うことです。
tag:databaseタグの付いたデバイスは、他のtag:databaseタグの付いたデバイスにアクセスできます。tag:gcpとtag:awsタグの付いたデバイスは、tag:databaseタグの付いたデバイスにアクセスできますが、その逆はできません。- インフラチーム(
group:infra)は、tag:database、tag:gcp、tag:awsのどのデバイスにタグを付けるかを管理できます。
{
"groups": {
"group:infra": [
"carl@example.com"
]
},
"acls": [
{
"action": "accept",
"src": [
"tag:database",
"tag:gcp",
"tag:aws"
],
"dst": [
"tag:database:*"
]
}
],
"tagOwners": {
"tag:database": [
"group:infra"
],
"tag:gcp": [
"group:infra"
],
"tag:aws": [
"group:infra"
]
}
}
ネットワークのマイクロセグメンテーション
| プランごとの利用可否 | 機能 |
|---|---|
| すべてのプラン | ACL、groups、タグ、タグオーナー、tests |
ネットワークのマイクロセグメンテーションは、ネットワークデバイス、アクセス、通信を、独立した論理単位に分割するセキュリティ技術です。
データセンター、仮想ネットワーク、顧客ごとの導入環境などをセグメント化するなど、多くの用途があります。
各マイクロセグメントは、他のマイクロセグメントにアクセスできない論理単位です。
場合によっては、すべてのセグメントにアクセスできるサポートチームやタグ付きデバイスが必要になることもあります。
この例が行うことです。
- サポートチーム(
group:support)のメンバーは、tag:segment-abcとtag:segment-xyzタグの付いたデバイスに、ポート443でアクセスできます。 tag:supportタグの付いたデバイスは、tag:segment-abcとtag:segment-xyzタグの付いたデバイスに、ポート443でアクセスできます。- テストにより、ACLが変更されても以下が保証されます。
- サポートチーム(
group:support)のメンバーは、引き続き、tag:segment-abcとtag:segment-xyzタグの付いたデバイスに、ポート443でアクセスできます。 tag:supportタグの付いたデバイスは、引き続き、tag:segment-abcとtag:segment-xyzタグの付いたデバイスに、ポート443でアクセスできます。tag:segment-abcタグの付いたデバイスは、tag:segment-xyzタグの付いたデバイスへのポート443でのアクセスを拒否されます。tag:segment-xyzタグの付いたデバイスは、tag:segment-abcタグの付いたデバイスへのポート443でのアクセスを拒否されます。
- サポートチーム(
{
"acls": [
{
"action": "accept",
"src": [
"group:support"
],
"dst": [
"tag:segment-abc:443",
"tag:segment-xyz:443"
]
},
{
"action": "accept",
"src": [
"tag:support"
],
"dst": [
"tag:segment-abc:443",
"tag:segment-xyz:443"
]
}
],
"tests": [
{
"src": "group:support",
"accept": [
"tag:segment-abc:443",
"tag:segment-xyz:443"
]
},
{
"src": "tag:support",
"accept": [
"tag:segment-abc:443",
"tag:segment-xyz:443"
]
},
{
"src": "tag:segment-abc",
"deny": [
"tag:segment-xyz:443"
]
},
{
"src": "tag:segment-xyz",
"deny": [
"tag:segment-abc:443"
]
}
],
"groups": {
"group:support": [
"alice@example.com",
"bob@example.com"
]
},
"tagOwners": {
"tag:support": [
"autogroup:admin"
]
}
}