デバイスポスチャをジャストインタイムアクセスに使用する
最終検証日:
翻訳: 竹洞 陽一郎
ジャストインタイムアクセスは、PremiumプランとEnterpriseプランで利用できます。
ジャストインタイムアクセスで説明したとおり、Tailscaleは、Tailscaleネットワーク(tailnetと呼びます)内のリソースに対してジャストインタイム(JIT)アクセスを提供する方法をいくつか用意しています。
このトピックでは、有効期限付きのカスタムデバイスポスチャ属性をJITに使う方法を説明し、ユーザーがSlackを使って一時的なアクセスを申請できるSlackワークフローの例を紹介します。
デバイス属性には、省略可能なexpiryプロパティがあり、属性が失効する将来の時刻を設定できます。
設定すると、デバイス属性は指定した時刻に自動的に失効します。
これを利用して、custom:prodAccessのような属性を一定時間だけデバイスに割り当てることで、リソースへのジャストインタイムアクセスを提供できます。
Tailscale Slack Accessbot
Tailscale Access(英語)は、Tailscaleが開発したオープンソースのSlackワークフローアプリ(英語)の例です。
ユーザーはSlackを使って、組織内の他の人に、Tailscaleのリソースへの即時かつ期限付きのアクセスを申請できます。
Slack内で、ユーザーは「Request Tailscale Access」ショートカットを使ってTailscale Accessを呼び出せます。
すると、次の項目の入力を求められます。
- 何にアクセスしたいか
- どのデバイスからアクセスしたいか
- どのくらいの時間アクセスが必要か
- 誰がアクセスを承認すべきか
- なぜアクセスが必要か
アクセスを申請したSlackユーザーと一致するメールアドレスを持つユーザーが所有するTailscaleデバイスがある場合は、それらのデバイスの一覧が表示されます。
ユーザーには、tailnet内のすべてのデバイスの一覧も表示されます。
申請が送信されると、選択された承認者に通知が届き、承認者は申請を承認するか拒否するかを選択できます。
承認されると、ワークフローは選択されたデバイスに必要な属性を追加し、選択された時間に合わせて有効期限を設定します。
Accessbotの設定、デプロイ、開発の詳細な手順については、GitHubのtailscale/accessbotリポジトリ(英語)を参照してください。
有効期限付きのポスチャ属性API
Tailscale Slack Accessbotが要件に合わない場合は、有効期限付きのカスタムデバイスポスチャ属性を使って、組織向けに同様のツールを構築できます。
このセクションは、デバイスポスチャのトピックにあるポスチャ属性API(英語)を拡張したもので、属性の有効期限に関する追加情報を含んでいます。
APIでポスチャ属性を取得する
GET /api/v2/device/{deviceID}/attributes
指定したデバイスのすべてのポスチャ属性を取得します。
デバイスのポスチャ属性のキーと値のペアをすべて含むJSONオブジェクトを返します。
パラメータ
deviceID(URLパスで必須)
ポスチャ属性を取得するデバイスのIDです。
リクエストの例
curl "https://api.tailscale.com/api/v2/device/11055/attributes" \ -u "tskey-api-xxxxx:"
レスポンス
成功した場合、レスポンスは200です。
レスポンスボディは、ノードに割り当てられたすべてのポスチャ属性を含むJSONオブジェクトです。
属性の値は、文字列、数値、ブール値のいずれかです。
{
"attributes": {
"custom:myScore": 87,
"custom:diskEncryption": true,
"custom:myAttribute": "my_value",
"node:os": "linux",
"node:osVersion": "5.19.0-42-generic",
"node:tsReleaseTrack": "stable",
"node:tsVersion": "1.40.0",
"node:tsAutoUpdate": false
},
"expiries": {
"custom:myScore": "2024-04-23T18:25:43.511Z",
}
}
attributes:あるノードに関連付けられたすべての属性のキーと値のマップです。値は数値、文字列、ブール値のいずれかです。expiries:有効期限を持つ属性と、その失効時刻のキーと値のマップです。有効期限のない属性は省略されます。有効期限を持つ属性が1つもない場合は、expiriesフィールド全体が省略されます。
APIでカスタムポスチャ属性を設定する
POST /api/v2/device/{deviceID}/attributes/{attributeKey}
指定したデバイスに、カスタムポスチャ属性を作成または更新します。
ユーザーが管理する属性はcustom名前空間に置く必要があり、属性キーの先頭にcustom:を付けてそれを示します。
パラメータ
deviceID(URLパスで必須)
カスタムポスチャ属性を設定するデバイスのIDです。
attributeKey(URLパスで必須)
設定するポスチャ属性の名前です。
先頭にcustom:を付ける必要があります。
キーの最大長は名前空間を含めて128文字で、使用できるのは英字、数字、アンダースコア、コロンのみです。
キーは大文字と小文字を区別します。
キーは一意である必要がありますが、一意性は大文字と小文字を区別せずに確認されます。
例えば、1つのtailnet内でcustom:MyAttributeとcustom:myattributeの両方を設定することはできません。
あるキーのすべての値は同じ型である必要があり、その型はそのキーに最初の値が書き込まれたときに決まります。
例えば、同じtailnet内で、custom:myattributeが、あるノードでは数値(87)、別のノードでは文字列("78")という値を持つことはできません。
ポスチャ属性のvalue(POSTボディで必須)
{
"value": "foo"
}
値は、文字列、数値、ブール値のいずれかです。
文字列の値の最大長は255文字で、使用できるのは英字、数字、アンダースコア、ピリオドのみです。
数値の値は整数で、JSONで安全に扱える数値(最大253 - 1)である必要があります。
ポスチャ属性のexpiry(POSTボディで省略可能)
{
"value": "foo",
"expiry": "2024-04-23T18:25:43.511Z"
}
有効期限には、将来の任意の時刻を、RFC 3339形式の文字列で指定できます。
設定すると、デバイス属性は指定した時刻に自動的に削除されます。
ポスチャ属性のcomment(POSTボディで省略可能)
{
"value": "foo",
"expiry": "2024-04-23T18:25:43.511Z",
"comment": "access needed to inspect logs on prod vm"
}
属性を追加した理由を示すために、コメントを付けられます。
リクエストの例
curl "https://api.tailscale.com/api/v2/device/11055/attributes/custom:my_attribute" \
-u "tskey-api-xxxxx:" \
--data-binary '{"value": "my_value", "expiry": "2024-04-23T18:25:43.511Z"}'
レスポンス
成功した場合、レスポンスは2xxです。
レスポンスボディは、現時点では空のJSONオブジェクトです。
原文:Use device posture for just-in-time access(Tailscale公式ドキュメント)