# コマンダー用Terraform Provider

![](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_role` | エンタープライズロールとポリシーを作成・管理する (MSPまたはエンタープライズアカウント) |
| `commander_enterprise_team` | エンタープライズチームを作成・管理する (MSPまたはエンタープライズアカウント)      |
| `commander_enterprise_user` | エンタープライズユーザーを作成・管理する (MSPまたはエンタープライズアカウント)     |
| `commander_managed_company` | 管理対象企業を作成・管理する (MSPのみ)                         |

#### データソース

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

## 要件

* **Keeperコマンダーサービスモード**: コマンダーサービスモードREST APIを実行するサービスアカウント
* [Terraform](https://developer.hashicorp.com/terraform/downloads) 1.0以降

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

TerraformとKeeper間で通信を行うには、お客様側でKeeperコマンダーのサービスモードインスタンスをホストする必要があります。

この構成は、IT要件に応じてさまざまな方法で実現できます。コマンダーのサービスモードは、任意のマシン上でフォアグラウンドサービスとして実行することも、ローカルまたはリモートのサーバー上でDockerコンテナとして実行することも可能です。

### **手順1.** コマンダーのセットアップ <a href="#step-1.-commander-setup" id="step-1.-commander-setup"></a>

[コマンダーサービスモードREST API](/keeperpam/jp/commander-cli/service-mode-rest-api.md)のページに記載されているセットアップ手順に従い、Keeperコマンダーをインストールしてサービスを開始します。

コマンダーのサービスモードは、CLIで直接実行するほか、ローカルマシンでバックグラウンド実行したり、リモートサーバー上でサービスとして実行したり、Dockerコンテナとして実行することも可能です。Dockerの使用を推奨します。

**以下の重要事項をご確認ください。**

1. リクエストキューシステム (API v2) を有効にする必要があります (例: `-q=y`)
2. 以下のコマンドがリストに含まれていることを確認してください

{% code overflow="wrap" %}

```
this-device,sync-down,switch-to-mc,switch-to-msp,msp-add,msp-down,msp-info,msp-remove,msp-update,enterprise-info,enterprise-node,enterprise-user,enterprise-role,enterprise-team,enterprise-down,enterprise-push,team-approve,record-add,record-update,rm,get,list,record-type-info
```

{% endcode %}

{% hint style="info" %}
レート制限により**429 Too Many Requests**エラーが発生する場合は、`-rl` または `--ratelimit` フラグでサービスモードのレート制限を構成できます。

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

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

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

サービス作成後、APIキーがコンソール出力に表示されます。必ずコピーして安全に保管してください。Dockerを使う場合は、次のコマンドでログからAPIキーを取得できます。

```
docker compose logs | grep -i "generated api key"
```

コマンダーサービスが起動したら、以下のようにエンドポイントにcurlでリクエストを送れる状態になっているはずです。

```bash
curl -X POST 'https://localhost:8080/api/v2/executecommand-async' \
--header 'Content-Type: application/json' \
    --header 'api-key: <your-api-key>' \
    --data '{"command": "this-device"}'
```

トンネルが動作しAPIキーが正しければ、次のような応答が返ります。

```json
{
    "success": true,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "status": "queued",
    "message": "Request queued successfully..."
}
```

サービスが稼働したら、プロバイダー構成にサービスモードのURLとAPIキーを指定できます。

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

### **手順2.** プロバイダーのインストール <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)) をご参照ください。

#### リリース予定とロードマップ

コマンダー向けTerraformプロバイダーでは、計画中の機能についてロードマップを公開しています。以下は現在実装を進めている主な機能です。

* フォルダの共有
* レコードの共有
* SCIM
* SCIM Push
* レコードタイプ
* SSOクラウド連携
* Keeperゲートウェイ

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


---

# 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/secrets-manager/integrations/terraform-provider-commander.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.
