> For the complete documentation index, see [llms.txt](https://docs.keeper.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.keeper.io/keeperpam/jp/secrets-manager/integrations/terraform-provider-commander.md).

# コマンダー用Terraform Provider

テナント管理のためKeeperコマンダーと連携するTerraformプロバイダー

![](https://762006384-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MJXOXEifAmpyvNVL1to%2F-MkdG6FEOq6NQs-V7faS%2F-MkdGAJXHqUijg8Y1JMq%2Fterraform-plugin-header.jpg?alt=media\&token=cc0461d8-e6d5-40bc-85e8-24f10947ff8d)

## 概要

コマンダー向けTerraformプロバイダーを使用すると、Keeper SecurityのエンタープライズおよびMSPの構成をInfrastructure as Codeとして管理できます。

このプロバイダーはKeeperコマンダーのサービスモードREST APIを利用して、TerraformからKeeperのリソースを管理します。これにより、宣言的な構成管理、バージョン管理、明確な監査証跡を実現しながら、Keeperのゼロ知識インフラストラクチャを維持できます。

## 機能

* **リソース**\
  TerraformからKeeperのリソースを作成および管理できます。
* **インポート**\
  多くのリソースは**インポート状態**に対応しており、`terraform import` を使用して既存のKeeperリソースをTerraform管理下に取り込むことができます。
* **データソース**\
  データソースを使用して既存のリソース情報を取得できます。
* **MSPサポート**\
  エンタープライズリソースおよびデータソースでは、オプションの `managed_company` 属性を使用して、特定の管理対象企業に対して操作の範囲を限定できます。

## 利用可能なリソースとデータソース <a href="#available-resources-and-data-sources" id="available-resources-and-data-sources"></a>

リソースとデータソースの完全なドキュメントについては[Terraform Registry](https://registry.terraform.io/providers/Keeper-Security/commander/latest/docs)をご参照ください。

### リソース

#### **エンタープライズ管理**

| 名前                               | 説明                                                                     |
| -------------------------------- | ---------------------------------------------------------------------- |
| `commander_enterprise_node`      | エンタープライズノードを作成・管理する (MSPまたはエンタープライズアカウント)                              |
| `commander_enterprise_user`      | エンタープライズユーザーを作成・管理する (MSPまたはエンタープライズアカウント)                             |
| `commander_enterprise_role`      | エンタープライズロールとポリシーを作成・管理する (MSPまたはエンタープライズアカウント)                         |
| `commander_enterprise_scim`      | KeeperエンタープライズまたはMSPアカウントでエンタープライズSCIM構成を作成・管理する (MSPまたはエンタープライズアカウント) |
| `commander_enterprise_scim_push` | Keeper SCIMエンドポイントへSCIMデータを一括プッシュする (MSPまたはエンタープライズアカウント)              |
| `commander_enterprise_team`      | エンタープライズチームを作成・管理する (MSPまたはエンタープライズアカウント)                              |
| `commander_enterprise_scim`      | KeeperエンタープライズまたはMSPアカウントでエンタープライズSCIM構成を作成・管理する (MSPまたはエンタープライズアカウント) |
| `commander_enterprise_push`      | JSONファイルからレコードデータをユーザーまたはチームのKeeperボルトへプッシュする (MSPまたはエンタープライズアカウント)    |
| `commander_enterprise_scim_push` | Keeper SCIMエンドポイントへSCIMデータを一括プッシュする (MSPまたはエンタープライズアカウント)              |

#### **MSP管理**

| 名前                          | 説明                     |
| --------------------------- | ---------------------- |
| `commander_managed_company` | 管理対象企業を作成・管理する (MSPのみ) |
| `commander_shared_folder`   | 共有フォルダを作成・管理する         |

#### **従来型フォルダ**

| 名前                            | 説明                 |
| ----------------------------- | ------------------ |
| `commander_non_shared_folder` | 非共有ボルトフォルダを作成・管理する |
| `commander_shared_folder`     | 従来型共有フォルダを作成・管理する  |

#### **階層型共有フォルダ (NSF)**

| 名前                     | 説明                |
| ---------------------- | ----------------- |
| `commander_new_folder` | 階層型共有フォルダを作成・管理する |

#### **KeeperPAM**

| 名前                            | 説明                   |
| ----------------------------- | -------------------- |
| `commander_pam_configuration` | Keeper PAM構成を作成・管理する |

#### **エンドポイント特権マネージャー (EPM)**

| 名前                     | 説明                                                     |
| ---------------------- | ------------------------------------------------------ |
| `commander_epm_policy` | EPM (エンドポイント特権マネージャー) ポリシーの作成・管理 (MSPまたはエンタープライズアカウント) |

#### **シークレットマネージャー**

| 名前                          | 説明                                 |
| --------------------------- | ---------------------------------- |
| `commander_secrets_manager` | Keeperシークレットマネージャーアプリケーションを作成・管理する |

#### **従来型PAMレコード**

| 名前                                     | 説明                                     |
| -------------------------------------- | -------------------------------------- |
| `commander_classic_pam_user`           | ボルト内の従来型PAMユーザーレコードを作成・管理する            |
| `commander_classic_pam_machine`        | ボルト内の従来型PAMマシンレコードを作成・管理する             |
| `commander_classic_pam_database`       | ボルト内の従来型PAMデータベースレコードを作成・管理する          |
| `commander_classic_pam_directory`      | ボルト内の従来型PAMディレクトリレコードを作成・管理する          |
| `commander_classic_pam_remote_browser` | ボルト内の従来型PAMリモートブラウザ (RBI) レコードを作成・管理する |

#### **新規PAMレコード (NSF)**

| 名前                                 | 説明                                      |
| ---------------------------------- | --------------------------------------- |
| `commander_new_pam_user`           | ボルト内のNSF PAMユーザーレコードを作成・管理する            |
| `commander_new_pam_machine`        | ボルト内のNSF PAMマシンレコードを作成・管理する             |
| `commander_new_pam_database`       | ボルト内のNSF PAMデータベースレコードを作成・管理する          |
| `commander_new_pam_directory`      | ボルト内のNSF PAMディレクトリレコードを作成・管理する          |
| `commander_new_pam_remote_browser` | ボルト内のNSF PAMリモートブラウザ (RBI) レコードを作成・管理する |

#### **従来型レコード**

| 名前                                     | 説明                                 |
| -------------------------------------- | ---------------------------------- |
| `commander_classic_login`              | ボルト内の従来型ログインレコードを作成・管理する           |
| `commander_classic_wifi`               | ボルト内の従来型Wi-Fi認証情報レコードを作成・管理する      |
| `commander_classic_contact`            | ボルト内の従来型連絡先レコードを作成・管理する            |
| `commander_classic_address`            | ボルト内の従来型住所レコードを作成・管理する             |
| `commander_classic_payment_card`       | ボルト内の従来型支払いカードレコードを作成・管理する         |
| `commander_classic_bank_account`       | ボルト内の従来型銀行口座レコードを作成・管理する           |
| `commander_classic_membership`         | ボルト内の従来型メンバーシップレコードを作成・管理する        |
| `commander_classic_health_insurance`   | ボルト内の従来型健康保険レコードを作成・管理する           |
| `commander_classic_driver_license`     | ボルト内の従来型運転免許証レコードを作成・管理する          |
| `commander_classic_passport`           | ボルト内の従来型パスポートレコードを作成・管理する          |
| `commander_classic_ssn_card`           | ボルト内の従来型本人確認 (SSN) カードレコードを作成・管理する |
| `commander_classic_birth_certificate`  | ボルト内の従来型出生証明書レコードを作成・管理する          |
| `commander_classic_ssh_keys`           | ボルト内の従来型SSHキーレコードを作成・管理する          |
| `commander_classic_saas_configuration` | ボルト内の従来型SaaS構成レコードを作成・管理する         |
| `commander_classic_server`             | ボルト内の従来型サーバー認証情報レコードを作成・管理する       |
| `commander_classic_database`           | ボルト内の従来型データベース認証情報レコードを作成・管理する     |
| `commander_classic_software_license`   | ボルト内の従来型ソフトウェアライセンスレコードを作成・管理する    |
| `commander_classic_secure_note`        | ボルト内の従来型セキュアノートレコードを作成・管理する        |

#### **新規レコード (NSF)**

| 名前                                 | 説明                                 |
| ---------------------------------- | ---------------------------------- |
| `commander_new_login`              | ボルト内のNSFログインレコードを作成・管理する           |
| `commander_new_wifi`               | ボルト内のNSF Wi-Fi認証情報レコードを作成・管理する     |
| `commander_new_contact`            | ボルト内のNSF連絡先レコードを作成・管理する            |
| `commander_new_address`            | ボルト内のNSF住所レコードを作成・管理する             |
| `commander_new_payment_card`       | ボルト内のNSF支払いカードレコードを作成・管理する         |
| `commander_new_bank_account`       | ボルト内のNSF銀行口座レコードを作成・管理する           |
| `commander_new_membership`         | ボルト内のNSFメンバーシップレコードを作成・管理する        |
| `commander_new_health_insurance`   | ボルト内のNSF健康保険レコードを作成・管理する           |
| `commander_new_driver_license`     | ボルト内のNSF運転免許証レコードを作成・管理する          |
| `commander_new_passport`           | ボルト内のNSFパスポートレコードを作成・管理する          |
| `commander_new_ssn_card`           | ボルト内のNSF本人確認 (SSN) カードレコードを作成・管理する |
| `commander_new_birth_certificate`  | ボルト内のNSF出生証明書レコードを作成・管理する          |
| `commander_new_ssh_keys`           | ボルト内のNSF SSHキーレコードを作成・管理する         |
| `commander_new_saas_configuration` | ボルト内のNSF SaaS構成レコードを作成・管理する        |
| `commander_new_server`             | ボルト内のNSFサーバー認証情報レコードを作成・管理する       |
| `commander_new_database`           | ボルト内のNSFデータベース認証情報レコードを作成・管理する     |
| `commander_new_software_license`   | ボルト内のNSFソフトウェアライセンスレコードを作成・管理する    |
| `commander_new_secure_note`        | ボルト内のNSFセキュアノートレコードを作成・管理する        |

### データソース

#### **エンタープライズ管理**

| 名前                          | 説明                                                                    |
| --------------------------- | --------------------------------------------------------------------- |
| `commander_enterprise_node` | 名前またはIDでエンタープライズノードを参照する (MSPまたはエンタープライズアカウント)                        |
| `commander_enterprise_user` | メールまたはIDでエンタープライズユーザーを参照する (MSPまたはエンタープライズアカウント)                      |
| `commander_enterprise_role` | 名前またはIDでエンタープライズロールを参照する (MSPまたはエンタープライズアカウント)                        |
| `commander_enterprise_scim` | ID / ノードID、または管理対象企業 (MSPのみ) でエンタープライズSCIM構成を参照 (MSPまたはエンタープライズアカウント) |
| `commander_enterprise_team` | 名前またはIDでエンタープライズチームを参照する (MSPまたはエンタープライズアカウント)                        |
| `commander_enterprise_scim` | ID / ノードID、または管理対象企業 (MSPのみ) でエンタープライズSCIM構成を参照 (MSPまたはエンタープライズアカウント) |

#### **MSP管理**

| 名前                          | 説明                          |
| --------------------------- | --------------------------- |
| `commander_managed_company` | 名前またはIDで管理対象企業を参照する (MSPのみ) |
| `commander_shared_folder`   | UIDまたは名前で既存の共有フォルダを参照する     |

#### **従来型フォルダ**

| 名前                            | 説明                 |
| ----------------------------- | ------------------ |
| `commander_non_shared_folder` | UIDで非共有フォルダを参照する   |
| `commander_shared_folder`     | UIDで従来型共有フォルダを参照する |

#### **階層型共有フォルダ (NSF)**

| 名前                     | 説明                 |
| ---------------------- | ------------------ |
| `commander_new_folder` | UIDで階層型共有フォルダを参照する |

#### **KeeperPAM**

| 名前                            | 説明             |
| ----------------------------- | -------------- |
| `commander_pam_configuration` | UIDでPAM構成を参照する |

#### **エンドポイント特権マネージャー (EPM)**

| 名前                     | 説明                                                            |
| ---------------------- | ------------------------------------------------------------- |
| `commander_epm_policy` | ポリシーIDで既存のEPM (エンドポイント特権マネージャー) ポリシーを参照 (MSPまたはエンタープライズアカウント) |

#### **シークレットマネージャー**

| 名前                          | 説明                                 |
| --------------------------- | ---------------------------------- |
| `commander_secrets_manager` | 名前またはUIDでシークレットマネージャーアプリケーションを参照する |

#### **従来型PAMレコード**

| 名前                                     | 説明                              |
| -------------------------------------- | ------------------------------- |
| `commander_classic_pam_user`           | レコードUIDで従来型PAMユーザーレコードを参照する     |
| `commander_classic_pam_machine`        | レコードUIDで従来型PAMマシンレコードを参照する      |
| `commander_classic_pam_database`       | レコードUIDで従来型PAMデータベースレコードを参照する   |
| `commander_classic_pam_directory`      | レコードUIDで従来型PAMディレクトリレコードを参照する   |
| `commander_classic_pam_remote_browser` | レコードUIDで従来型PAMリモートブラウザレコードを参照する |

#### **新規PAMレコード (NSF)**

| 名前                                 | 説明                               |
| ---------------------------------- | -------------------------------- |
| `commander_new_pam_user`           | レコードUIDでNSF PAMユーザーレコードを参照する     |
| `commander_new_pam_machine`        | レコードUIDでNSF PAMマシンレコードを参照する      |
| `commander_new_pam_database`       | レコードUIDでNSF PAMデータベースレコードを参照する   |
| `commander_new_pam_directory`      | レコードUIDでNSF PAMディレクトリレコードを参照する   |
| `commander_new_pam_remote_browser` | レコードUIDでNSF PAMリモートブラウザレコードを参照する |

#### **従来型レコード**

| 名前                                     | 説明                                 |
| -------------------------------------- | ---------------------------------- |
| `commander_classic_login`              | レコードUIDで従来型ログインレコードを参照する           |
| `commander_classic_wifi`               | レコードUIDで従来型Wi-Fi認証情報レコードを参照する      |
| `commander_classic_contact`            | レコードUIDで従来型連絡先レコードを参照する            |
| `commander_classic_address`            | レコードUIDで従来型住所レコードを参照する             |
| `commander_classic_payment_card`       | レコードUIDで従来型支払いカードレコードを参照する         |
| `commander_classic_bank_account`       | レコードUIDで従来型銀行口座レコードを参照する           |
| `commander_classic_membership`         | レコードUIDで従来型メンバーシップレコードを参照する        |
| `commander_classic_health_insurance`   | レコードUIDで従来型健康保険レコードを参照する           |
| `commander_classic_driver_license`     | レコードUIDで従来型運転免許証レコードを参照する          |
| `commander_classic_passport`           | レコードUIDで従来型パスポートレコードを参照する          |
| `commander_classic_ssn_card`           | レコードUIDで従来型本人確認 (SSN) カードレコードを参照する |
| `commander_classic_birth_certificate`  | レコードUIDで従来型出生証明書レコードを参照する          |
| `commander_classic_ssh_keys`           | レコードUIDで従来型SSHキーレコードを参照する          |
| `commander_classic_saas_configuration` | レコードUIDで従来型SaaS構成レコードを参照する         |
| `commander_classic_server`             | レコードUIDで従来型サーバー認証情報レコードを参照する       |
| `commander_classic_database`           | レコードUIDで従来型データベース認証情報レコードを参照する     |
| `commander_classic_software_license`   | レコードUIDで従来型ソフトウェアライセンスレコードを参照する    |
| `commander_classic_secure_note`        | レコードUIDで従来型セキュアノートレコードを参照する        |

#### **新規レコード (NSF)**

| 名前                                 | 説明                                 |
| ---------------------------------- | ---------------------------------- |
| `commander_new_login`              | レコードUIDでNSFログインレコードを参照する           |
| `commander_new_wifi`               | レコードUIDでNSF Wi-Fi認証情報レコードを参照する     |
| `commander_new_contact`            | レコードUIDでNSF連絡先レコードを参照する            |
| `commander_new_address`            | レコードUIDでNSF住所レコードを参照する             |
| `commander_new_payment_card`       | レコードUIDでNSF支払いカードレコードを参照する         |
| `commander_new_bank_account`       | レコードUIDでNSF銀行口座レコードを参照する           |
| `commander_new_membership`         | レコードUIDでNSFメンバーシップレコードを参照する        |
| `commander_new_health_insurance`   | レコードUIDでNSF健康保険レコードを参照する           |
| `commander_new_driver_license`     | レコードUIDでNSF運転免許証レコードを参照する          |
| `commander_new_passport`           | レコードUIDでNSFパスポートレコードを参照する          |
| `commander_new_ssn_card`           | レコードUIDでNSF本人確認 (SSN) カードレコードを参照する |
| `commander_new_birth_certificate`  | レコードUIDでNSF出生証明書レコードを参照する          |
| `commander_new_ssh_keys`           | レコードUIDでNSF SSHキーレコードを参照する         |
| `commander_new_saas_configuration` | レコードUIDでNSF SaaS構成レコードを参照する        |
| `commander_new_server`             | レコードUIDでNSFサーバー認証情報レコードを参照する       |
| `commander_new_database`           | レコードUIDでNSFデータベース認証情報レコードを参照する     |
| `commander_new_software_license`   | レコードUIDでNSFソフトウェアライセンスレコードを参照する    |
| `commander_new_secure_note`        | レコードUIDでNSFセキュアノートレコードを参照する        |

## 要件

* **Keeperコマンダーサービスモード**: `terraform-app-setup` コマンドを使用してコマンダーサービスモードREST APIを実行するサービスアカウント
* **Docker**: コマンダーサービスモードのセットアップに推奨される方法
* [Terraform](https://developer.hashicorp.com/terraform/downloads) 1.0以降

## セットアップとインストール

TerraformとKeeper間で通信を行うには、お客様側で `terraform-app-setup` を使用してKeeperコマンダーのサービスモードインスタンスをホストする必要があります。この構成は、IT要件に応じてさまざまな方法で実現できます。

### 手順1. コマンダーのインストール

[Keeper Commander](/keeperpam/commander-cli/overview.md) CLIをワークステーションにインストールします。

### 手順2. コマンダーのセットアップ

そのアカウントでコマンダーにログインします。

```
keeper shell
login serviceuser@company.com
```

**Terraformセットアップの実行**

```
My Vault> terraform-app-setup
```

このコマンドは、Terraformプロバイダー用に構成された**コマンダー専用**サービスを含む `docker-compose.yml` を書き出します。

**サービスモード / Docker**

共有フォルダ、Docker構成レコード、KSMアプリケーション、クライアント構成を作成し、以下の項目の入力を求められます。

<table data-search="false"><thead><tr><th>項目</th><th>説明</th></tr></thead><tbody><tr><td><strong>ポート</strong></td><td>コマンダーサービスモードのローカルポート。デフォルト: <code>8900</code></td></tr><tr><td><strong>ngrokを有効にする</strong></td><td>ngrok経由の公開URL (任意)。デフォルト: いいえ</td></tr><tr><td><strong>Ngrok Auth Token</strong></td><td>ngrokを有効にした場合は必須</td></tr><tr><td><strong>Ngrokカスタムドメイン</strong></td><td>任意 (例: <code>myapp.ngrok.io</code>)。何も入力せずEnterでスキップ可能</td></tr><tr><td><strong>Cloudflareを有効にする</strong></td><td>ngrokを無効にした場合のみ表示。デフォルト: いいえ</td></tr><tr><td><strong>Cloudflare Tunnel Token</strong></td><td>Cloudflareを有効にした場合は必須</td></tr><tr><td><strong>Cloudflareカスタムドメイン</strong></td><td>Cloudflareを有効にした場合は必須 (例: <code>commander.company.com</code>)</td></tr><tr><td><strong>高度なセキュリティを有効にする</strong></td><td>IP許可 / 拒否リスト、レート制限、レスポンス暗号化、トークン有効期限 (任意)。デフォルト: いいえ</td></tr><tr><td></td><td></td></tr></tbody></table>

{% hint style="warning" %}
**ngrokとCloudflareは併用できません。** サービスモードのURLは、Terraformを実行する環境から到達可能である必要があります。コマンダーがプライベートネットワーク上にある場合は、**ngrok** または **Cloudflare Tunnel** を有効にし、その公開HTTPS URLをプロバイダーの `service_mode_url` (または `COMMANDER_SERVICE_MODE_URL`) として使用してください。
{% endhint %}

キューモード (API v2) は自動的に有効になります。コマンドの許可リストは、Terraformで安全に実行できる操作 (エンタープライズ / MSP、レコード、共有、PAM、シークレットマネージャー、および関連するNSFコマンド) に固定されており、対話的に選択することはできません。

作成されるリソース (デフォルト)

| リソース              | デフォルト名                                             |
| ----------------- | -------------------------------------------------- |
| 共有フォルダ            | `Commander Service Mode - Terraform`               |
| KSMアプリケーション       | `Commander Service Mode - Terraform KSM App`       |
| Docker構成レコード      | `Commander Service Mode Terraform Config`          |
| Dockerサービス / コンテナ | `commander-terraform` / `keeper-service-terraform` |

> セットアップを再実行すると `docker-compose.yml` が上書きされます (手動での変更は失われます)。

**デプロイ**

```
My Vault> quit
rm ~/.keeper/config.json
docker compose up -d
docker ps
docker logs keeper-service-terraform
curl http://localhost:<port>/health
```

Dockerを起動する前にローカルの `config.json` を削除し、同じデバイストークンでコンテナが競合しないようにしてください。Dockerは、KSM経由で独自の構成を読み込みます。

サービスが起動したら、`keeper-service-terraform` のDockerコンテナログに記載されている非同期API (`/api/v2/`) 用のサービスモードURLとAPIキーを、プロバイダー構成で使用できます。

{% hint style="info" icon="pencil-line" %}
コマンダーと `keeper-service-terraform` コンテナを更新するには、サービスを停止し、コンテナを更新してから再起動します。

```
docker compose down
docker compose pull
docker compose up -d
```

{% endhint %}

{% hint style="info" %}
レート制限により429 Too Many Requestsエラーが発生する場合は、**terraform-app-setupコマンド > 高度なセキュリティを有効にする** でサービスモードのレート制限を構成できます。

以下のようにエンドポイントあたり・IPアドレスあたりの許可リクエスト数を設定できます。

* `1000/minute`
* `100000/hour`
* `2000000/day`

想定トラフィックとシステム容量に合わせて上限を調整してください。
{% endhint %}

{% hint style="info" %}
接続を維持するために、コマンダーサービスモードを常時稼働させてください。
{% endhint %}

### **手順3.** プロバイダーのインストール <a href="#step-1.-commander-setup" id="step-1.-commander-setup"></a>

#### **レジストリからのインストール**

このプロバイダーをインストールするには、次のコードをTerraform構成に追加し、`terraform init`を実行します。

```tf
terraform {
  required_providers {
    commander = {
      source = "keeper-security/commander"
    }
  }
}

provider "commander" {
  # Configuration options
}
```

#### 手動インストール

[GitHubリリース](https://github.com/Keeper-Security/terraform-provider-commander/releases)ページからお使いのプラットフォーム向けのTerraformプロバイダーの最新バージョンをダウンロードし、アーカイブをTerraformのプラグインフォルダにコピーします (パス上に不足しているフォルダがある場合は作成してください)。

プロバイダーのソースは、完全なURLで初期化します。\
source = `"github.com/keeper-security/commander"`

{% tabs %}
{% tab title="Windows" %}

```bash
SETLOCAL EnableExtensions && ^
mkdir %APPDATA%\.terraform.d\plugins\github.com\keeper-security\commander && ^
cd %APPDATA%\.terraform.d\plugins\github.com\keeper-security\commander && ^
curl -SfLOJ [ADD RELEASE LINK HERE LATER]
```

{% endtab %}

{% tab title="Mac OS" %}

```bash
mkdir -p ~/.terraform.d/plugins/github.com/keeper-security/commander && \
cd ~/.terraform.d/plugins/github.com/keeper-security/commander && \
curl -SfLOJ [ADD RELEASE LINK HERE LATER]
```

{% endtab %}

{% tab title="Linux" %}

```bash
mkdir -p ~/.terraform.d/plugins/github.com/keeper-security/commander && \
cd ~/.terraform.d/plugins/github.com/keeper-security/commander && \
curl -SfLOJ [ADD RELEASE LINK HERE LATER]
```

{% endtab %}
{% endtabs %}

Terraformプロバイダーの手動インストールについて、詳しくは[Terraform公式ドキュメント](https://www.terraform.io/docs/configuration/providers.html#third-party-plugins)をご参照ください。

## 利用方法

### プロバイダーの構成

プロバイダーを使う前に、コマンダーサービスモードのURLとAPIキーを設定する必要があります。

```tf
terraform {
  required_providers {
    commander = {
      source = "keeper-security/commander"
    }
 }
}

provider "commander" {
  service_mode_url     = "http://localhost:8080/api/v2/"
  service_mode_api_key = "XXXXXXXXXXXXXX"
}
```

{% hint style="info" %}
**管理対象企業の利用 (MSPアカウント)**\
\
多くのリソースとデータソースで、任意の `managed_company` 属性が使えます。アカウントがMSPのとき、`managed_company`に管理対象企業の名前またはIDを指定すると、その企業内のリソースを管理します。省略すると、ログイン中のアカウントコンテキスト (MSPまたはエンタープライズアカウント) で動作します。
{% endhint %}

{% hint style="info" %}
**MSP — 同一構成で管理対象企業とメインアカウントの両方を使う場合**\
\
一部のリソースやデータソースで `managed_company` を指定し (その企業内で実行)、他は指定しない (ログイン中のアカウントコンテキストで実行) と、Terraformはそれらを並列実行することがあります。コマンダーはリクエストをキューで1件ずつ処理するため、誤ったコンテキストでアクションが走り失敗する場合があります (例: 「resource not found」)。\
\
**対処:** それらのリソースまたはデータソースの間に依存関係を追加し (`depends_on` や一方を他方から参照するなど)、並列実行されないようにします。\
\
**例:** メインアカウント側のリソースが管理対象企業側のあとに実行されるよう順序を固定する:

```hcl
# Runs in managed company "Acme"
resource "commander_enterprise_team" "mc_team" {
  name = "MC Team"
  node = "Root"
  managed_company = "Acme"
}

# Runs in logged-in account; depends on mc_team so it doesn't run in parallel
resource "commander_enterprise_team" "main_team" {
  name    = "Main Team"
  node    = "Root"
  # no managed_company = main account
  depends_on = [commander_enterprise_team.mc_team]
}
```

{% endhint %}

### 使用例

#### エンタープライズチームの管理

以下は `commander_enterprise_team` リソースでエンタープライズチームを管理する例です。

このリソースで、MSPまたはエンタープライズアカウント内のチームを作成・管理します。

```tf
terraform {
  required_providers {
    commander = {
      source = "keeper-security/commander"
    }
 }
}

provider "commander" {
  service_mode_url     = "http://localhost:8080/api/v2/"
  service_mode_api_key = "XXXXXXXXXXXXXX"
}

resource "commander_enterprise_team" "example" {
  name                     = "Backend Developers"
  node                     = "Engineering"
  users                    = ["alice@example.com", "bob@example.com"]
  roles                    = ["Developer"]
  restrict_record_edit     = true
  restrict_record_re_share = true
  enable_privacy_screen    = false
  # Optional, MSP Account only
  # managed_company = "Acme Corp"
}
```

#### エンタープライズチームの参照

以下は `commander_enterprise_team` データソースで既存のエンタープライズチームを読み取る例です。

このデータソースで、名前またはIDからエンタープライズチームを参照します。チームのID、名前、ユーザー、ロールを返し、他のリソースから参照できます。

```tf
terraform {
  required_providers {
    commander = {
      source = "keeper-security/commander"
    }
 }
}

provider "commander" {
  service_mode_url     = "http://localhost:8080/api/v2/"
  service_mode_api_key = "XXXXXXXXXXXXXX"
}

data "commander_enterprise_team" "example" {
  team = "Backend Developers"
  # Optional, MSP only
  # managed_company = "Acme Corp"
}

output "team_id" {
  value = data.commander_enterprise_team.example.id
}

output "team_name" {
  value = data.commander_enterprise_team.example.name
}

output "team_users" {
  value = data.commander_enterprise_team.example.users
}

output "team_roles" {
  value = data.commander_enterprise_team.example.roles
}
```

他のリソースやデータソースの例については、プロバイダー提供のドキュメント ([Terraform Registry](https://registry.terraform.io/providers/Keeper-Security/commander/latest/docs)) をご参照ください。

#### Issueの報告

ご要望がある場合は、[GitHubでIssueを作成](https://github.com/Keeper-Security/terraform-provider-commander/issues)してください。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://docs.keeper.io/keeperpam/jp/secrets-manager/integrations/terraform-provider-commander.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
