Tailscaleロゴ

デバイスポスチャ

最終検証日:
翻訳: 竹洞 陽一郎

デバイスポスチャは、デバイスのセキュリティ状態と信頼性を測る仕組みです。
デバイスから収集した属性を、接続の可否を決めるルールに利用します。
属性には、OSのバージョンのような基本的なものから、EDR製品が提供するデータまで含まれます。

これにより、セキュリティの強化、状況に応じたアクセス制御、継続的な検証が実現できます。

プランごとの提供範囲

デバイスポスチャの機能とプラン
機能 提供プラン
既定の属性 全プラン
サードパーティ連携の属性(MDM・EDR) Standard、Premium、Enterprise
ジオロケーション Standard、Premium、Enterprise
カスタム属性 Premium、Enterprise

ユースケース

仕組み

デバイス認可API

Authorize device API(英語)を使うと、ポスチャの適合状況に応じて、デバイスの認可と認可の取り消しを行えます。
認可を取り消されたデバイスは、要件を再び満たすまでtailnetへアクセスできません。

デバイスポスチャ属性

ポスチャ属性は、キーと値の組で表され、値の型は文字列、数値、真偽値のいずれかです。
キーは、次の3つの名前空間に分かれています。

ポスチャ属性は、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:countryip:country IN ['CA', 'US', 'GB', 'NL']
ip:publicAddressip:publicAddress IN ['203.0.113.0/24']
node:osnode:os IN ['macos', 'linux']
node:osVersionnode:osVersion == '13.4.0'
node:tsAutoUpdatenode:tsAutoUpdate == true
node:tsReleaseTracknode:tsReleaseTrack == 'stable'
node:tsVersionnode:tsVersion >= '1.42.2'
custom:attrcustom:attr IS SET

デバイスポスチャの条件

ポスチャとポスチャ条件を使うと、デバイスの属性に基づいてアクセス制御を自動的に判定できます。

ポスチャ

ポスチャは、ポスチャ属性に対する条件(アサーション)に名前を付けたものです。
適用されるのは、接続を開始する側のデバイスのみです。
名前はposture:で始め、属性の条件を配列で記述します。

"postures": {
  "posture:latestMac": [
    "node:os IN ['macos', 'linux']",
    "node:tsReleaseTrack == 'stable'",
    "node:tsVersion >= '1.40'"
  ]
}

使用できる演算子は次のとおりです。

バージョンの比較は、数値と非数値の両方を扱えるセマンティックバージョニングの方式で行われます。

ポスチャに記述したすべての属性が一致した場合にのみ、そのポスチャに適合したと判定されます。
属性が設定されていないデバイスは、演算子の種類に関わらず、ポスチャに適合しません。

ポスチャは複数定義できます。

"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へ招待することを検討してください。

デバイスポスチャの状態を確認する

  1. 管理コンソールのMachinesページを開きます。
  2. 検索欄または絞り込み機能で対象のマシンを探します。
  3. マシンを選択します。
  4. マシンのページにあるposturesのセクションを確認します。

盾のアイコンにカーソルを合わせると、どのアサーションを満たしていないかを確認できます。

EDR・MDMとの連携

次の製品との連携に対応しています。

ポスチャ属性のAPI

デバイスのポスチャ属性は、Tailscale APIのGet device posture attributes(英語)から取得できます。
APIの概要については、Tailscale APIを参照してください。

監査ログのイベント

デバイスポスチャの変更は、構成監査ログに記録されます。

デバイスポスチャに関する監査ログのイベント
ターゲット アクション 説明
ノード ノード属性の更新 そのノードのデバイスポスチャ属性が変更されました。

組み込みの属性(nodeとipの名前空間)がログに記録されるのは、有効なポスチャから参照されている場合のみです。
カスタム属性とサードパーティ連携の属性は、常に記録されます。

原文:Device posture management(Tailscale公式ドキュメント)