デバイスポスチャ
最終検証日:
翻訳: 竹洞 陽一郎
デバイスポスチャは、デバイスのセキュリティ状態と信頼性を測る仕組みです。
デバイスから収集した属性を、接続の可否を決めるルールに利用します。
属性には、OSのバージョンのような基本的なものから、EDR製品が提供するデータまで含まれます。
これにより、セキュリティの強化、状況に応じたアクセス制御、継続的な検証が実現できます。
プランごとの提供範囲
| 機能 | 提供プラン |
|---|---|
| 既定の属性 | 全プラン |
| サードパーティ連携の属性(MDM・EDR) | Standard、Premium、Enterprise |
| ジオロケーション | Standard、Premium、Enterprise |
| カスタム属性 | Premium、Enterprise |
ユースケース
- リモートワークのセキュリティ: 従業員のデバイスが要件を満たしているかを確認したうえで、リソースへのアクセスを許可します。
- BYOD(私物デバイスの業務利用): 管理下のデバイスと管理外のデバイスとで、アクセスできる範囲を段階的に分けます。
- ゼロトラストの実装: マイクロセグメンテーションと最小権限のアクセスを実現します。
仕組み
デバイス認可API
Authorize device API(英語)を使うと、ポスチャの適合状況に応じて、デバイスの認可と認可の取り消しを行えます。
認可を取り消されたデバイスは、要件を再び満たすまでtailnetへアクセスできません。
デバイスポスチャ属性
ポスチャ属性は、キーと値の組で表され、値の型は文字列、数値、真偽値のいずれかです。
キーは、次の3つの名前空間に分かれています。
node: ホストが報告するデータ。ip: Tailscaleのコントロールプレーンが判定するジオロケーション情報。custom: 利用者が定義する属性、またはOAuthで設定される属性。
ポスチャ属性は、tailnetポリシーファイルのnodeAttrs(ノード属性)とは別の仕組みです。
既定の属性
| 属性キー | 説明 | 値 |
|---|---|---|
node:os |
オペレーティングシステム | macos、windows、linux、ios、android、freebsd、openbsd、illumos、js |
node:osVersion |
OSのバージョン | 引用符で囲んだバージョン文字列 |
node:tsAutoUpdate |
自動更新が有効かどうか | true、false |
node:tsReleaseTrack |
Tailscaleのリリーストラック | stable、unstable |
node:tsStateEncrypted |
クライアントの状態が保存時に暗号化されているか | true、false |
node:tsVersion |
Tailscaleクライアントのバージョン | 引用符で囲んだバージョン文字列 |
node:tsAutoUpdateがtrueになるのは、Tailscaleの組み込みの自動更新を使っている場合だけです。
App StoreやPlay Storeなど、外部の仕組みで更新している場合はfalseになります。
ジオロケーション属性
| 属性キー | 説明 | 値 |
|---|---|---|
ip:country |
パブリックIPアドレスから判定した国 | ISO 3166-1の2文字の国コード(大文字) |
ip:publicAddress |
ノードのパブリックIPアドレス | IPv4またはIPv6のアドレス |
ip:publicAddressは、現在ベータ段階です。
使用できる演算子はIN、NOT IN、==、!=で、値には単一のIPv4・IPv6アドレス、CIDRのサブネット、またはIPセットを指定できます。
各デバイスの属性は、管理コンソールのMachine Detailsのページで確認できます。
記述例
| 属性キー | 記述例 |
|---|---|
ip:country | ip:country IN ['CA', 'US', 'GB', 'NL'] |
ip:publicAddress | ip:publicAddress IN ['203.0.113.0/24'] |
node:os | node:os IN ['macos', 'linux'] |
node:osVersion | node:osVersion == '13.4.0' |
node:tsAutoUpdate | node:tsAutoUpdate == true |
node:tsReleaseTrack | node:tsReleaseTrack == 'stable' |
node:tsVersion | node:tsVersion >= '1.42.2' |
custom:attr | custom:attr IS SET |
デバイスポスチャの条件
ポスチャとポスチャ条件を使うと、デバイスの属性に基づいてアクセス制御を自動的に判定できます。
ポスチャ
ポスチャは、ポスチャ属性に対する条件(アサーション)に名前を付けたものです。
適用されるのは、接続を開始する側のデバイスのみです。
名前はposture:で始め、属性の条件を配列で記述します。
"postures": {
"posture:latestMac": [
"node:os IN ['macos', 'linux']",
"node:tsReleaseTrack == 'stable'",
"node:tsVersion >= '1.40'"
]
}
使用できる演算子は次のとおりです。
==、!=IN、NOT INIS SET、NOT SET<、<=、>=、>(数値やバージョンを扱うnode:osVersion、node:tsVersionで使用します)
バージョンの比較は、数値と非数値の両方を扱えるセマンティックバージョニングの方式で行われます。
ポスチャに記述したすべての属性が一致した場合にのみ、そのポスチャに適合したと判定されます。
属性が設定されていないデバイスは、演算子の種類に関わらず、ポスチャに適合しません。
ポスチャは複数定義できます。
"postures": {
"posture:latestMac": [
"node:os == 'macos'",
"node:osVersion == '13.4.0'",
"node:tsReleaseTrack == 'stable'"
],
"posture:anyMac": [
"node:os == 'macos'",
"node:tsReleaseTrack == 'stable'"
]
}
ビジュアルポリシーエディタを使って管理することもできます。
操作方法については、ビジュアルエディタリファレンスを参照してください。
ポスチャ条件
ポスチャ条件を使うと、アクセスルールの適用をデバイスのポスチャに応じて切り替えられます。
グラントでは、srcPostureに適用するポスチャを指定します。
"grants": [
{
"src": ["autogroup:member"],
"dst": ["tag:development"],
"ip": ["*"],
"srcPosture": ["posture:anyMac"]
},
{
"src": ["group:dev"],
"dst": ["tag:production"],
"ip": ["*"],
"srcPosture": ["posture:latestMac"]
}
]
複数のポスチャを指定した場合は、いずれか1つを満たせばアクセスが許可されます。
"grants": [
{
"src": ["group:dev"],
"dst": ["tag:production"],
"ip": ["*"],
"srcPosture": ["posture:approvedMacs", "posture:approvedWindows", "posture:approvedLinux"]
}
]
srcPostureが適用されるのは、同じtailnet内のTailscaleノードだけです。
共有されたノードや、サブネットルーターの背後にあるデバイスでは、ポスチャのチェックは行われません。この場合はIPアドレスに基づく条件が適用されます。
既定の送信元ポスチャ
defaultSrcPostureを使うと、すべてのアクセスルールに共通の基準となるポスチャを設定できます。
"defaultSrcPosture": [ "posture:basicWindows", "posture:basicMac", "posture:basicLinux" ]
指定したポスチャのいずれかを満たせば、アクセスが許可されます。
この設定は加算されるものではなく、個々のルールでsrcPostureを指定すると、そのルールでは既定の設定を上書きします。
そのため、特定のルールだけをより緩い条件にすることもできます。
"grants": [
{
"src": ["autogroup:member"],
"dst": ["tag:intranet"],
"ip": ["*"]
// defaultSrcPostureが適用される
},
{
"src": ["group:dev", "group:sre"],
"dst": ["tag:production"],
"ip": ["*"],
"srcPosture": ["posture:prodWin", "posture:prodMac"]
// defaultSrcPostureを上書きする
}
]
defaultSrcPostureも、適用されるのは同じtailnet内のTailscaleノードだけです。
共有されたノードやサブネットルーターの背後にあるデバイスでは、ポスチャのチェックは行われません。
Tailscale SSHとポスチャ条件
Tailscale SSHのSSH Consoleからの接続も、ポスチャ条件の対象になります。
SSH Consoleからの接続を許可する場合は、node:os == 'js'を条件に含めてください。
共有ノードとポスチャ条件
srcPostureとdefaultSrcPostureが適用されるのは、tailnet内のデバイスが送信元となる場合だけです。
ノード共有によって外部のユーザーが共有デバイスへアクセスする場合、ポスチャによる制限は適用されません。
外部のユーザーにもポスチャ条件を適用したい場合は、共有ではなく、tailnetへ招待することを検討してください。
デバイスポスチャの状態を確認する
- 管理コンソールのMachinesページを開きます。
- 検索欄または絞り込み機能で対象のマシンを探します。
- マシンを選択します。
- マシンのページにあるposturesのセクションを確認します。
盾のアイコンにカーソルを合わせると、どのアサーションを満たしていないかを確認できます。
EDR・MDMとの連携
次の製品との連携に対応しています。
- CrowdStrike Falcon
- SentinelOne(英語)
- 1Password XAM(英語)
- Fleet(英語)
- Huntress(英語)
- Iru(旧Kandji)(英語)
- Jamf Pro(英語)
- Microsoft Intune(英語)
ポスチャ属性のAPI
デバイスのポスチャ属性は、Tailscale APIのGet device posture attributes(英語)から取得できます。
APIの概要については、Tailscale APIを参照してください。
監査ログのイベント
デバイスポスチャの変更は、構成監査ログに記録されます。
| ターゲット | アクション | 説明 |
|---|---|---|
| ノード | ノード属性の更新 | そのノードのデバイスポスチャ属性が変更されました。 |
組み込みの属性(nodeとipの名前空間)がログに記録されるのは、有効なポスチャから参照されている場合のみです。
カスタム属性とサードパーティ連携の属性は、常に記録されます。