Tailscaleロゴ

グラントのトラブルシューティング

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

グラントは、Tailscaleネットワーク(tailnetと呼ばれます)における、ネットワーク層とアプリケーション層の両方のアクセス制御を定義する、Tailscaleの統一されたアプローチです。
このガイドでは、基本的な確認手法から複雑な認可シナリオの解決まで、グラントに関するよくある問題を診断・解決する方法を説明します。

グラントの問題を診断する

このセクションでは、グラントポリシーを検査し、ポリシーのコンパイルを確認し、Tailscaleのポリシーエンジンが特定のデバイスやユーザーにどのように権限を適用するかを調べるためのツールと方法について説明します。
これらの診断手法を使うことで、グラントに関するほとんどの問題の根本原因を特定できます。

tailnetポリシーファイルを保存する際、Tailscaleはgrantsセクションを含む構文を検証する点に注意してください。
構文エラーがある場合、保存できません。これは、管理コンソールのエディタ、GitOpsTerraform、およびAPIのいずれにも当てはまります。
また、定義されていないターゲット(グループなど)を参照している場合も、tailnetポリシーファイルを保存できません。

グラント設定を確認する

トラブルシューティングの最初のステップは、グラントがtailnetポリシーファイル内で正しく定義されていることを確認することです。
管理コンソールのAccess controlsページにあるPreview rulesタブを使うと、特定のユーザーやタグに対してルールがどのように適用されるかを確認できます。
これにより、ポリシー構成が意図したとおりに機能することを確認しやすくなります。

whoisでケイパビリティを検査する

特定のデバイスやユーザーに付与されたアプリケーション層のケイパビリティに関する問題を診断するには、tailscale whoisコマンドが非常に役立ちます。
このコマンドは、tailnetポリシーを通じて付与されたすべてのケイパビリティを含む、ノードに関する詳細情報を提供します。

ユーザーまたはデバイスのケイパビリティを検査するには、そのTailscale IPアドレスを使用します。

tailscale whois 100.100.123.123

出力には、以下が含まれます。

出力のCapabilitiesセクションには特に注意してください。ここには、デバイスに付与されたすべてのアプリケーションケイパビリティが詳しく記載されています。
各ケイパビリティのリストには、完全な名前とパラメーターが含まれており、正しい権限が適用されているかを確認できます。

よくある問題を解決する

グラントに関する問題の多くは、基本的な構成の誤りや、グラントの仕組みに関する誤解に起因します。
このセクションでは、グラントを扱う際によく遭遇する問題について説明します。

セレクターの一致に関する問題

セレクターが、意図したターゲットに一致しない場合があります。
これは、グラント内のセレクターが、許可しようとしているデバイスやユーザーを正しく識別していない場合に発生します。

セレクターの一致に関するよくある問題には、以下があります。

セレクターの一致に関する問題をトラブルシューティングするには、以下を行います。

  1. グラントで参照しているタグが、適切なデバイスに適用されていることを確認する。
  2. 特に特定のユーザーへのアクセスを許可している場合は、メールアドレスの誤字がないかを確認する。
  3. tailscale statusを使って、デバイスに適用されているタグを確認する。このコマンドは、確認対象の各デバイス上で実行する必要があります。

autogroup:memberのようなオートグループを使用している場合は、各オートグループに含まれるデバイスを理解しておいてください。
例えば、autogroup:memberには、tailnetのメンバーであるすべてのユーザーが含まれますが、他のtailnetから共有されたデバイスは含まれません。

あまり一般的ではない、複雑な問題

基本的な構成の問題を超えて、特に高度なアクセス制御ポリシー(ポスチャチェック、ルートフィルタリング、カスタムのアプリケーションケイパビリティなど)を実装する場合、グラントに関するより複雑な問題に直面することがあります。
これらの問題を解決するには、多くの場合、Tailscaleのポリシーエンジンがグラントをどのように処理・適用するかについて、より深い理解が必要です。

viaフィールドのルーティングに関する問題

グラントのviaフィールドを使うと、特定の条件に基づいて、異なるルーター経由でリソースアクセスをセグメント化できます。
ただし、構成が誤っていると、ルーティングの失敗や予期しないトラフィックパスにつながることがあります。

viaルーティングに関するよくある問題には、以下があります。

viaルーティングの問題をトラブルシューティングするには、以下を行います。

  1. tailscale statusを使って、viaフィールドで指定したデバイスが存在し、オンラインであることを確認する。
  2. viaデバイスが適切に構成されていることを確認する。
  3. サブネットルーターの場合は、tailscale status --routesを使ってサブネットルートがアドバタイズされていることを確認する。
  4. アプリコネクタの場合は、アプリコネクタが正しく構成されていることを確認する。
  5. Exit Nodeの場合は、そのExit Nodeが管理コンソールで承認されていることを確認する。
  6. tailscale pingを使って、送信元デバイスからviaデバイスに到達できることを確認する。
  7. viaデバイス上のログを調べて、そのデバイス経由で宛先に到達できることを確認する。

正しいvia構成の例:

"grants": [
  {
    "src": ["group:eng"],
    "dst": ["192.0.2.0/24"],
    "ip":  ["*"],
    "via": ["tag:subnet-router"]
  }
]

ビジュアルポリシーエディタを使ってtailnetポリシーファイルを管理することもできます。
ビジュアルエディタの使い方については、ビジュアルエディタリファレンスを参照してください。

この例では、tag:subnet-routerタグの付いたデバイスが存在し、オンラインであり、192.0.2.0/24サブネットルートをアドバタイズしていることを確認してください。

デバイスポスチャ検証の失敗

srcPostureフィールドを使うと、デバイスポスチャの条件に基づいてアクセスを制限できます。

デバイスポスチャに関するよくある問題には、以下があります。

デバイスポスチャの問題をトラブルシューティングするには、以下を行います。

  1. すべてのデバイスが最新バージョンのTailscaleクライアントを実行していることを確認する。1.52.0より前のバージョンは、ポスチャチェックをサポートしていません。
  2. tailnetポリシーファイル内のポスチャ条件が正しいかを見直す。
  3. tailscale status --selfを使って、ポスチャ検証でチェックされるデバイス属性を取得する。
  4. まずは制限の緩いポスチャ条件でテストし、徐々に制限を厳しくしていく。

デバイスポスチャ検証の例:

"postures": {
  "posture:latest": [
    "node:tsVersion >= '1.42.0'",
    "node:os == 'linux'"
  ]
},
"grants": [
  {
    "src": ["group:eng"],
    "dst": ["tag:prod"],
    "ip":  ["*"]
    "srcPosture": ["posture:latest"]
  }
]

ビジュアルポリシーエディタを使ってtailnetポリシーファイルを管理することもできます。
ビジュアルエディタの使い方については、ビジュアルエディタリファレンスを参照してください。

デバイスがポスチャチェックに失敗する場合は、一時的にsrcPostureフィールドを削除して、ポスチャ条件なしでグラントが機能することを確認し、その後、条件を1つずつ戻して、問題のある条件を特定してください。

アプリケーションケイパビリティの統合に関する問題

アプリケーションケイパビリティをグラントと統合する際、アプリケーションがTailscaleクライアントから提供されるケイパビリティを正しく解釈しないと、問題が生じることがあります。

アプリケーションケイパビリティに関するよくある問題には、以下があります。

アプリケーションケイパビリティの問題をトラブルシューティングするには、以下を行います。

  1. アプリケーションがLocalAPIを使って、Tailscaleクライアントに正しくケイパビリティを問い合わせていることを確認する。これは、アプリケーションがtsnetライブラリを使用していない場合にのみ必要です。
  2. ケイパビリティ名が、アプリケーションが期待する名前と完全に一致しているかを確認する。
  3. グラント内のパラメーターが、アプリケーションが期待するスキーマと一致しているかを確認する。
  4. まずは簡略化したケイパビリティパラメーターでテストし、その後、複雑さを加えていく。

正しいアプリケーションケイパビリティのグラントの例:

"grants": [
  {
    "src": ["group:eng"],
    "dst": ["tag:tailsql"],
    "ip":  ["tcp:443"],
    "app": {
      "tailscale.com/cap/tailsql": [
        {
          "dataSrc": ["prod", "staging"]
        }
      ]
    }
  }
]

ビジュアルポリシーエディタを使ってtailnetポリシーファイルを管理することもできます。
ビジュアルエディタの使い方については、ビジュアルエディタリファレンスを参照してください。

この例では、tag:tailsqlタグの付いたデバイス上で動作するアプリケーションが、tailscale.com/cap/tailsqlケイパビリティを正しくチェックし、dataSrcパラメーターを適切に解釈していることを確認してください。

予防策

このセクションでは、tailnetポリシーにおけるグラントの設計、実装、保守に関するベストプラクティスをまとめます。
これらの推奨事項に従うことで、問題を最小限に抑え、問題が発生した際のトラブルシューティングを効率化できます。

効果的なグラントの設計原則

これらの原則に従うことで、問題が発生しにくく、問題が起きた際にもトラブルシューティングしやすい、より保守しやすいポリシーファイルになります。

テスト戦略

グラントへの変更をデプロイする前に、以下のテスト戦略の利用を検討してください。

デプロイ前に変更を十分にテストし、デプロイ後も問題を監視することで、ユーザーに影響が及ぶ前に問題を特定・解決できます。