# PAM Projectインポート/エクスポート

## PAM Projectインポートおよびエクスポート

コマンダーでは、PAMプロジェクト構成をJSONで往復インポートおよびエクスポートできます。既存プロジェクトの取得には `pam project export`、同一テナントまたは別テナントへの適用には `pam project import` を使用します。

{% hint style="info" %}
**対象バージョン:** Keeperコマンダー17.3以降 (エクスポート: PR #2006、インポート重複UIDガード: PR #2005、2026-04-30マージ)
{% endhint %}

***

### コマンド

| コマンド                 | 説明                      |
| -------------------- | ----------------------- |
| `pam project export` | PAMプロジェクト構成をJSONにエクスポート |
| `pam project import` | JSONからPAMプロジェクト構成をインポート |

***

### pam project exportコマンド

指定したPAMプロジェクト構成UIDのボルトグラフを走査し、 `pam project import` でそのまま再インポート可能なJSONドキュメントを出力します。

#### 構文

```
pam project export -p <config-uid> [--output <file>]
```

#### パラメータ

| パラメータ             | 必須  | 説明                         |
| ----------------- | --- | -------------------------- |
| `-p <config-uid>` | はい  | エクスポートするPAMプロジェクト構成のUID    |
| `--output <file>` | いいえ | JSONの出力先ファイルパス。省略時は標準出力に表示 |

#### 出力スキーマ

エクスポートされるJSONは `PROJECT_IMPORT_JSON_TEMPLATE` と完全に一致し、変更なしで再インポート可能です。

```json
{
  "tool_version": "commander-export-1.0",
  "project": { ... },
  "shared_folder_users": [ ... ],
  "shared_folder_resources": [ ... ],
  "pam_configuration": { ... },
  "pam_data": {
    "resources": [ ... ],
    "users": [ ... ]
  }
}
```

| フィールド                     | 説明                                 |
| ------------------------- | ---------------------------------- |
| `tool_version`            | エクスポート生成元の識別。ジェネレーター対応のインポート経路を有効化 |
| `project`                 | PAMプロジェクトのメタデータ (名前、ノード、共有フォルダUID) |
| `shared_folder_users`     | 共有フォルダへアクセスできるユーザー                 |
| `shared_folder_resources` | 共有フォルダにリンクされたリソース                  |
| `pam_configuration`       | PAM構成全体 (ゲートウェイ、ローテーションポリシーなど)     |
| `pam_data.resources`      | PAM管理リソース (マシン、データベース、ディレクトリ)      |
| `pam_data.users`          | PAM管理ユーザー (リソース横断で重複排除)            |

#### 設計上の性質

* **決定的な出力** — `sort_keys=True` により、git diffやドリフト検出に適した安定したJSONを生成
* **べき等な再インポート** — リソースUIDはKeeperレコードUIDから導出され、エクスポート間で安定
* **ユーザーの重複排除** — 複数リソースで共有されるユーザーは `pam_data.users` に1回だけ出現

#### 例

標準出力へエクスポートする例。

```
My Vault> pam project export -p f6e5d4c3
{
  "tool_version": "commander-export-1.0",
  "project": { ... },
  ...
}
```

後続のインポートやバージョン管理用にファイルへ保存する例。

```
My Vault> pam project export -p f6e5d4c3 --output project-backup.json
```

往復 — あるテナントからエクスポートし、別テナントへインポートする例。

```bash
keeper pam project export -p f6e5d4c3 --output project.json
# ターゲットテナント側:
keeper pam project import --filepath project.json
```

***

### pam project importコマンド

JSONファイルからPAMプロジェクトをインポートします。 `pam project export` のエクスポート結果の再インポート、または手動で作成したインポートドキュメントの両方に対応します。

#### 構文

```
pam project import --filepath <file> [--dry-run]
```

#### パラメータ

| パラメータ               | 必須  | 説明                 |
| ------------------- | --- | ------------------ |
| `--filepath <file>` | はい  | JSONインポートドキュメントのパス |
| `--dry-run`         | いいえ | 変更を加えずに検証およびプレビュー  |

#### 重複UIDガード (PR #2005)

`pam project import` は、レコード作成前にインポートドキュメント内の重複 `uid` 値を拒否します。

**修正前:** 重複UIDが黙って保持され、あいまいな依存グラフとレコード作成時の誤ったDAGリンクが発生していました。

**修正後:** `pam_data.resources` と `pam_data.users` を横断して同一 `uid` が2回以上出現する場合、重複を列挙する明確なエラーメッセージとともにインポートが中止されます。レコードは1件も作成されません。

```
My Vault> pam project import --filepath bad-project.json
ERROR: Duplicate uid values found in import document: ['abc123', 'def456']
Import aborted. No records were created.
```

UIDが一意の有効なインポートは、従来どおり変更なく動作します。

#### インポートドキュメント形式

インポートドキュメントは `pam project export` の出力と同じスキーマに従う必要があります。主なルールは以下のとおりです。

* `pam_data.resources` と `pam_data.users` 内のすべての `uid` 値は一意であること
* `tool_version` は任意。存在するとジェネレーター対応のインポート動作が有効になる
* UIDは安定したbase64-URLエンコード16バイト値とする。省略時はインポーターが生成

#### 例

```
My Vault> pam project import --filepath project.json
Importing PAM project from project.json...
  Created PAM configuration: prod-web (uid: f6e5d4c3)
  Created resource: web-server-01 (uid: a1b2c3d4)
  Created user: svc-deploy (uid: 9a8b7c6d)
Import complete: 1 configuration, 1 resource, 1 user.
```

***

### ワークフロー: 環境の昇格

ステージングテナントから本番へPAMプロジェクトを昇格させるのが一般的な活用事例です。

```bash
# 1. ステージングからエクスポート
keeper --config ~/.keeper/staging.json \
  pam project export -p <staging-config-uid> --output staging-project.json

# 2. エクスポート内容の確認 (安定した JSON のため diff が明瞭)
git diff HEAD staging-project.json

# 3. 監査証跡としてコミット
git add staging-project.json && git commit -m "snapshot: PAM project pre-promotion"

# 4. 本番へインポート
keeper --config ~/.keeper/production.json \
  pam project import --filepath staging-project.json
```

***

### 注記

* `pam project export` には、PAM構成および共有フォルダに対する管理者アクセス権を持つ認証済みユーザーが必要です。
* エクスポートはボルトグラフをライブで走査します。エクスポート前にコマンダーでボルト同期が最新であることを確認してください (`sync` コマンド)。
* エクスポートファイル内の `tool_version: "commander-export-1.0"` は、コマンダーが生成したUIDを扱う専用インポート分岐を有効にします。 `tool_version` のない手動作成ファイルは標準のインポート経路を使用します。
* `pam project import` の重複UIDガードはUID正規化パスの後に実行されるため、外部から与えた有効な一意UIDは従来どおり変更なく利用できます。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.keeper.io/keeperpam/jp/commander-cli/command-reference/keeperpam-commands/pam-project-import-export.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
