> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreweave.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ポリシーの例

> データサイエンス、エージェント、CI、バックグラウンドワーカー向けの、5つの一般的なクラスターポスチャーに対応する完全なポリシードキュメント。

このページでは、一般的なクラスターのポスチャーに対応する5つの完全なポリシーをまとめています。そのため、ゼロから作成するのではなく、機能するドキュメントから開始できます。

クラスターにはポリシーが1つだけ存在するため、これらのサンプルは組み合わせて使用するものではなく、代替となるものです。クラスターの目的に合ったポスチャーを選択し、調整してください。各サンプルは完全なポリシードキュメントです。`cwic sandbox runner policy edit [RUNNER-ID] -f policy.json` を使用して適用するか、ランナー更新の `policy` フィールドとして送信します。`[RUNNER-ID]` をポリシーを編集したいランナーの ID に置き換え、イメージレジストリのサンプルの `[GITHUB-ORG]` を GitHub Container Registry の組織名またはユーザー名に置き換えてください。

フィールドごとの詳細な手順については、[サンドボックスポリシーを設定する](/ja/products/sandboxes/profiles/configure)を参照してください。

<h2 id="gpu-data-science-cluster">
  GPU データサイエンスクラスター
</h2>

ユーザーごとの長期的な作業向けのクラスターです。十分なコンピュート、GPU Node に加え、データセットやパッケージをプルするためのインターネットアクセスを備えています。ただし、インスタンスメタデータエンドポイントへのアクセスは除外されています。

```json title="policy.json" theme={"system"}
{
  "displayName": "Data science, GPU",
  "constraints": {
    "resources": {
      "defaultCpu": "4",
      "defaultMemory": "16Gi",
      "maxCpu": "16",
      "maxMemory": "128Gi",
      "maxGpuCount": "2",
      "requireLimits": true
    },
    "instance": { "allowedInstanceTypes": ["h100"] },
    "image": { "allowedRegistries": ["ghcr.io/[GITHUB-ORG]"] },
    "network": {
      "allowedEgress": [
        { "cidr": { "cidr": "0.0.0.0/0", "except": ["169.254.169.254/32"] } }
      ],
      "defaultEgress": [
        { "cidr": { "cidr": "0.0.0.0/0", "except": ["169.254.169.254/32"] } }
      ]
    },
    "security": {
      "allowPrivileged": false,
      "allowedRuntimeClasses": ["kata-qemu", "cw-kata-nvidia-gpu"],
      "defaultCpuRuntimeClass": "kata-qemu",
      "defaultGpuRuntimeClass": "cw-kata-nvidia-gpu",
      "allowedSeccompProfiles": ["RuntimeDefault"]
    },
    "lifecycle": { "defaultLifetimeSeconds": 86400 }
  }
}
```

`allowedRuntimeClasses` はフェイルクローズで動作するため、両方のランタイムクラスを列挙しています。サンドボックスが固定できるのは明示的に指定したクラスのみで、クラスを固定しない場合にどのクラスが割り当てられるかは、2 つのデフォルトによって決まります。

<h2 id="shared-agent-cluster-with-allowlisted-egress">
  許可リスト付き外向き通信を備えた共有エージェントクラスター
</h2>

組織内のエージェントワークロード向けのマルチテナントクラスターです。エージェントは組織内の固定された上流のセットと相互に到達可能で、それ以外には到達できません。

```json title="policy.json" theme={"system"}
{
  "displayName": "Agents, allowlisted egress",
  "constraints": {
    "resources": {
      "defaultCpu": "1",
      "defaultMemory": "2Gi",
      "maxCpu": "4",
      "maxMemory": "8Gi",
      "requireLimits": true
    },
    "network": {
      "allowedEgress": [
        { "cidr": { "cidr": "140.82.112.0/20" }, "ports": [{ "port": 443 }] },
        { "cidr": { "cidr": "151.101.0.0/16" }, "ports": [{ "port": 443 }] },
        { "tenant": "TENANT_SCOPE_SAME_ORG" }
      ],
      "defaultEgress": [
        { "cidr": { "cidr": "140.82.112.0/20" }, "ports": [{ "port": 443 }] }
      ]
    },
    "security": {
      "allowPrivileged": false,
      "allowedRuntimeClasses": ["kata-qemu"],
      "defaultCpuRuntimeClass": "kata-qemu",
      "allowedSeccompProfiles": ["RuntimeDefault"]
    },
    "lifecycle": { "defaultLifetimeSeconds": 3600 }
  }
}
```

何も宣言しないサンドボックスには、最初の CIDR のみが許可されます。組織内の他のサンドボックスと通信する必要があるサンドボックスは、テナントルールを自ら宣言します。このルールはポリシーの範囲内に収まるため、ポリシーによって許可されます。

<h2 id="ephemeral-ci-cluster">
  エフェメラル CI クラスター
</h2>

短命で、小規模かつ狭いものです。サンドボックスは test run の期間だけ存在します。

```json title="policy.json" theme={"system"}
{
  "displayName": "CI",
  "constraints": {
    "resources": {
      "defaultCpu": "250m",
      "defaultMemory": "512Mi",
      "maxCpu": "2",
      "maxMemory": "4Gi",
      "requireLimits": true
    },
    "image": { "allowedRegistries": ["ghcr.io/[GITHUB-ORG]"] },
    "network": {
      "allowedEgress": [
        { "cidr": { "cidr": "140.82.112.0/20" }, "ports": [{ "port": 443 }] }
      ],
      "defaultEgress": [
        { "cidr": { "cidr": "140.82.112.0/20" }, "ports": [{ "port": 443 }] }
      ]
    },
    "security": {
      "allowPrivileged": false,
      "allowedRuntimeClasses": ["gvisor"],
      "defaultCpuRuntimeClass": "gvisor",
      "allowedSeccompProfiles": ["RuntimeDefault"]
    },
    "lifecycle": { "defaultLifetimeSeconds": 900 },
    "volumes": { "allowedMedia": ["STORAGE_MEDIUM_DISK"], "maxSize": "10Gi" }
  }
}
```

15 分のデフォルトが有用な部分です。何も宣言しない CI ジョブはすぐに自己終了します。ポリシーに有効期間の上限はありません。プラットフォームの最大値である 30 日を超えるリクエストは作成時に拒否され、それ以下のものは許可されます。そのため、ハードなジョブごとの上限が必要な場合は、作成リクエストで `max_lifetime_seconds` を設定してください。

<h2 id="vm-isolated-execution-with-no-default-egress">
  デフォルトの外向き通信がない VM 分離実行
</h2>

このポリシーは VM 分離を必須とし、デフォルトの外向き通信ルールを定義しません。UDP/TCP ポート 53 宛ての外向き DNS トラフィックはブロックしますが、`allowedEgress` が空であるため、サンドボックスはその他の外向き通信を宣言できます。

```json title="policy.json" theme={"system"}
{
  "displayName": "VM-isolated execution",
  "constraints": {
    "resources": {
      "defaultCpu": "500m",
      "defaultMemory": "512Mi",
      "maxCpu": "2",
      "maxMemory": "2Gi",
      "requireLimits": true
    },
    "image": { "allowedImages": ["ghcr.io/[GITHUB-ORG]/sandbox-base:pinned"] },
    "network": {
      "allowedEgress": [],
      "defaultEgress": [],
      "dnsEgress": "DNS_EGRESS_MODE_DENY"
    },
    "security": {
      "allowPrivileged": false,
      "allowedCapabilities": [],
      "allowedRuntimeClasses": ["kata-qemu"],
      "defaultCpuRuntimeClass": "kata-qemu",
      "allowedSeccompProfiles": ["RuntimeDefault"]
    },
    "lifecycle": { "defaultLifetimeSeconds": 300 },
    "metadata": { "maxAnnotationCount": 0 },
    "volumes": { "allowedMedia": ["STORAGE_MEDIUM_DISK"], "maxSize": "5Gi" }
  }
}
```

<Warning>
  このポリシーは、完全なネットワーク分離を強制するものではありません。`allowedEgress` リストが空でも明示的な送信先ルールは許可されます。また、プラットフォームのストレージへのアクセスは別途付与されます。`dnsEgress` は外向きのポート 53 をブロックしますが、HTTPS など、許可されている他のトランスポートを経由した DNS はブロックしません。
</Warning>

`allowedImages` はレジストリ単位ではなく 1 つのイメージを固定するため、サンドボックスが信頼済みレジストリから任意のイメージを選択することはできません。

<h2 id="internal-worker-cluster">
  内部ワーカークラスター
</h2>

組織内の他のサンドボックスからサービス経由でアクセスできる、長時間稼働するバックグラウンドワーカーです。サードパーティ API の呼び出し用に外部へのアクセスを備えています。

```json title="policy.json" theme={"system"}
{
  "displayName": "Internal workers",
  "constraints": {
    "resources": {
      "defaultCpu": "1",
      "defaultMemory": "2Gi",
      "maxCpu": "8",
      "maxMemory": "16Gi",
      "requireLimits": true
    },
    "image": { "allowedRegistries": ["ghcr.io/[GITHUB-ORG]"] },
    "network": {
      "allowedEgress": [
        { "cidr": { "cidr": "0.0.0.0/0", "except": ["10.0.0.0/8", "169.254.169.254/32"] } },
        { "tenant": "TENANT_SCOPE_SAME_ORG" }
      ],
      "defaultEgress": [{ "tenant": "TENANT_SCOPE_SAME_ORG" }]
    },
    "security": {
      "allowPrivileged": false,
      "allowedRuntimeClasses": ["kata-qemu"],
      "defaultCpuRuntimeClass": "kata-qemu",
      "allowedSeccompProfiles": ["RuntimeDefault"]
    },
    "lifecycle": { "defaultLifetimeSeconds": 604800 }
  }
}
```

外向き通信の範囲は、ワーカーがパブリックインターネットと組織内の同階層のサンドボックスに到達できるように設定されており、プライベートアドレス空間とメタデータアドレスは除外されています。

<Note>
  この例では外向き通信のみを設定します。可視性が `CUSTOM` のポートへの受信アクセスを制限するには、`allowedIngress` を追加し、必要に応じて `defaultIngress` も追加します。詳しくは、[ネットワークアクセスを制限する](/ja/products/sandboxes/profiles/configure#constrain-network-access)を参照してください。
</Note>

<h2 id="pin-admin-defaults-with-the-base-layer">
  ベースレイヤーで管理者デフォルトを固定する
</h2>

上記のどのポリシーにも `base` フラグメントを含めることができます。これは管理者が設定するアタッチメントで、サンドボックスが何を要求するかにかかわらず、ランナー上のすべてのサンドボックスに適用されます。次に示す内部ワーカーポリシーのバリエーションでは、ノードの選択、プライベートレジストリ用のイメージプルシークレット、コスト配分ラベルをすべてのサンドボックスに固定しています。

```json title="policy.json" theme={"system"}
{
  "displayName": "Internal workers, pinned scheduling",
  "base": {
    "spec": {
      "nodeSelector": { "workload": "sandbox" },
      "tolerations": [
        { "key": "sandbox-only", "operator": "Exists", "effect": "NoSchedule" }
      ],
      "imagePullSecrets": [{ "name": "regcred" }]
    },
    "metadata": {
      "labels": { "cost-center": "sandboxes" }
    }
  },
  "constraints": {
    "resources": {
      "defaultCpu": "1",
      "defaultMemory": "2Gi",
      "maxCpu": "8",
      "maxMemory": "16Gi",
      "requireLimits": true
    },
    "image": { "allowedRegistries": ["ghcr.io/[GITHUB-ORG]"] },
    "security": {
      "allowPrivileged": false,
      "allowedRuntimeClasses": ["kata-qemu"],
      "defaultCpuRuntimeClass": "kata-qemu",
      "allowedSeccompProfiles": ["RuntimeDefault"]
    },
    "lifecycle": { "defaultLifetimeSeconds": 604800 }
  }
}
```

`base` フラグメントは、周辺の制約フィールドとは異なり、camelCase キーを使用した Kubernetes の Pod 仕様のサブセットであり、不明なキーは拒否されます。受け入れるのはスケジューリングとランタイムの接続のみです: `nodeSelector`、`tolerations`、`imagePullSecrets`、`volumes`、`topologySpreadConstraints`、`hostAliases`、DNS 設定、`name`、`env`、`envFrom`、`volumeMounts`、`volumeDevices` に限定された単一の `containers` エントリ、および Pod のラベルとアノテーションです。セキュリティ上重要なフィールドは拒否されます: `securityContext`、`runtimeClassName`、`initContainers`、`affinity`、ホスト namespace、`hostPath` ボリューム、デフォルト以外のサービスアカウント、およびランナーが所有する `namespace` です。有効期間、イメージ、外向き通信などの型指定された項目は `constraints` に属し、`base` には属しません。

CKS クラスターでは、[template attachments](/ja/products/sandboxes/profiles/templates#cks-only-pod-attachments) がテンプレートごとにこのフラグメントを特化します: `imagePullSecrets` と `tolerations` は結合され、重複排除され、他のリストは追加され、マップキーはキーごとに上書きされ、同じ名前の競合は作成を拒否します。`base` の現在の適用ステータスについては、[ベースレイヤー](/ja/products/sandboxes/profiles/configure#the-base-layer) を参照してください。

<h2 id="vary-the-posture-across-clusters">
  クラスター間でポスチャーを変える
</h2>

ポリシーはクラスターに属するため、異なるポスチャーは1つのクラスター上の異なるドキュメントではなく、異なるクラスターとなります。オープンなデータサイエンス環境とロックダウンされた実行環境の両方を必要とするチームは、2つのクラスターを実行し、それぞれに一致するポリシーを割り当てます。

リージョンごとに1つのディメンションを変えるには、リージョン固有の値を変更した同じポリシーを各クラスターに適用します。共有または継承されたポリシードキュメントはないため、信頼できるソースをバージョン管理に保持し、クラスターごとに適用します。

<h2 id="see-also">
  関連項目
</h2>

* [サンドボックスポリシーを設定する](/ja/products/sandboxes/profiles/configure): これらのサンプルで使用されるフィールドを持つ、すべての制約グループ。
* [ポリシーの概要](/ja/products/sandboxes/profiles/profiles): サンドボックスがポリシーに対してどのように解決されるか。
* [エージェント型 RL トレーニング](/ja/products/sandboxes/client/guides/rl-training): 報酬関数とマルチターンエージェントのロールアウト、動作する Python コード付き。
* [ランナーのデプロイと管理](/ja/products/sandboxes/operations/managed-runners): ランナー設定の残りの部分。
