> 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/about/secrets-manager-configuration.md).

# シークレットマネージャーの構成

## 概要 <a href="#about" id="about"></a>

KeeperシークレットマネージャーSDKおよび各種インテグレーションでは、「構成」を使用して、接続トークン、暗号化キー、識別子、ドメイン情報などを保持します。これらの情報は、KeeperシークレットマネージャーAPIとの認証およびデータ復号に使用されます。

シークレットマネージャーの構成は[ワンタイムアクセストークン](/keeperpam/jp/secrets-manager/about/one-time-token.md)から作成され、[各クライアントデバイス](/keeperpam/jp/secrets-manager/about/terminology.md#client-device)と1対1の関係にあります。

#### 構成フォーマットの統一性 <a href="#configuration-uniformity" id="configuration-uniformity"></a>

すべてのKeeperシークレットマネージャーSDKおよびインテグレーションは、共通の構成フォーマットを使用します。構成の実体はJSON形式ですが、一部のインテグレーションではbase64形式でも受け付けられます。

## シークレットマネージャー構成の作成 <a href="#creating-a-secrets-manager-configuration" id="creating-a-secrets-manager-configuration"></a>

### Keeperボルトで作成する場合 <a href="#in-the-keeper-vault" id="in-the-keeper-vault"></a>

Keeperボルトで新しいシークレットマネージャーデバイスを作成する際に、シークレットマネージャー構成を作成できます。

まず、シークレットマネージャータブに移動し、一覧からアプリケーションを選択します。

<figure><img src="/files/hFrRAbhtddH89rzy3v2m" alt=""><figcaption></figcaption></figure>

次に、右側のアプリケーションペインにある **\[デバイス]** タブを選択し、**\[編集]** をクリックして編集モードに入ります。

<figure><img src="/files/NKra1Iv9NXpmBaO78jJB" alt=""><figcaption></figcaption></figure>

編集ビューから **\[デバイスの追加]** をクリックすると、そのアプリケーションに新しいシークレットマネージャーデバイスを作成できます。

**\[デバイスの追加]** メニューが表示されるので、このデバイスの名前を入力し、方法のドロップダウンから **\[構成ファイル]** を選択します。

<figure><img src="/files/mLXWmkZDfnivS7xRsCrm" alt=""><figcaption></figcaption></figure>

「構成ファイル」を選択すると、構成の受け取り方法を選択できます。Base64形式またはJSON形式で構成を生成し、ファイルとしてダウンロードするか、クリップボードにコピーするかを選択できます。

<figure><img src="/files/93FrwuntjSuCtCYAXzL9" alt=""><figcaption></figcaption></figure>

ほとんどのシークレットマネージャー統合機能ではBase64文字列が使用されますが、状況によってはJSONファイルが必要になる場合もあります。

準備ができたら、**\[ダウンロード]** または **\[コピー]** ボタンをクリックして構成を取得します。なお、初回にこの操作を行った時点でデバイスが作成されます。構成は複数回ダウンロードまたはコピーすることができます。

<figure><img src="/files/PBZcoL36AU69T6iqRgtG" alt=""><figcaption></figcaption></figure>

### SDK・インテグレーションの使用 <a href="#using-a-sdk-integration" id="using-a-sdk-integration"></a>

多くのKeeperシークレットマネージャーSDKおよびインテグレーションでは、独自の構成ファイルを作成できます。ワンタイムアクセストークンを渡すと、構成が自動的に生成されます。

#### SDKの例 <a href="#sdk-example" id="sdk-example"></a>

以下は、[Python SDK](/keeperpam/jp/secrets-manager/developer-sdk-library/python-sdk.md)を使用して構成ファイルを作成する例です。シークレットマネージャーは、ワンタイムアクセストークンを使用して初期化されると、そのタイミングで構成が作成されます。

```python
from keeper_secrets_manager_core import SecretsManager
from keeper_secrets_manager_core.storage import FileKeyValueStorage

secrets_manager = SecretsManager(
    token='<One Time Access Token>',
    config=FileKeyValueStorage('config.json')
)
```

この例では、構成は「config.json」という名前のファイルに保存されています。

{% hint style="info" %}
SDKを使用して構成ファイルを作成する場合、初期化と構成ファイルの作成は一度だけで構いません。構成ファイルが作成された後は、そのファイルを使用してSDKを初期化できるようになり、ワンタイムアクセストークンは削除しても問題ありません。
{% endhint %}

#### 統合の例 <a href="#integration-example" id="integration-example"></a>

以下は、Keeperシークレットマネージャーの[Jenkinsプラグイン](/keeperpam/jp/secrets-manager/integrations/jenkins-plugin.md)を使用する例です。

<figure><img src="/files/wCsDo3bvJx7LsbRfVJay" alt=""><figcaption></figcaption></figure>

Jenkinsプラグインは、ワンタイムアクセストークンを使用して初期化され、構成ファイルが自動的にバックグラウンドで作成されます。この例では、フォームにワンタイムアクセストークンを入力し、**\[OK]** をクリックするだけで完了します。

### CLIツールを使用 <a href="#using-a-cli-tool" id="using-a-cli-tool"></a>

シークレットマネージャーの構成は、シークレットマネージャーCLIやコマンダーCLIツールを使用して、ワンタイムアクセストークンから初期化することも可能です。一部のKeeperシークレットマネージャー統合機能では、事前に初期化された構成が必要となるため、そのような場合にはCLIツールを使用して構成を作成する必要があります。

#### シークレットマネージャーCLI <a href="#secrets-manager-cli" id="secrets-manager-cli"></a>

[シークレットマネージャーCLI (KSM)](/keeperpam/jp/secrets-manager/secrets-manager-command-line-interface.md) は、ワンタイムアクセストークンから構成を初期化し、構成を作成できます。

そのためには `init` コマンドを実行します。

{% tabs %}
{% tab title="形式" %}

```bash
# 構成をJSON形式で初期化して表示
$ ksm init default <One Time Access Token>

# 構成をk8s形式で初期化して表示
$ ksm init k8s <One Time Access Token>

# JSON構成を初期化してファイルに保存
$ ksm init default --plain <One Time Access Token> > <FILENAME>
```

{% endtab %}

{% tab title="例" %}

```bash
# 構成をJSONで初期化して表示
$ ksm init default US:KBChlYeZ15wLzvhLVXmT61euw0DJO0cTVfkD-b-qesw

# 構成をk8s形式で初期化して表示
$ ksm init k8s US:KBChlYeZ15wLzvhLVXmT61euw0DJO0cTVfkD-b-qesw

# 構成を初期化してファイルに保存
$ ksm init default --plain US:KBChlYeZ15wLzvhLVXmT61euw0DJO0cTVfkD-b-qesw > "ksm-config.json"
```

{% endtab %}
{% endtabs %}

#### コマンダーCLI <a href="#commander-cli" id="commander-cli"></a>

[コマンダーCLI](/keeperpam/jp/commander-cli/overview.md)を使用すると、ワンタイムアクセストークンから構成を初期化し、シークレットマネージャーの構成を作成できます。

構成を作成するには、`secrets-manager client add` コマンドに `--config-init` オプションを付けて実行します。構成はJSON形式またはBase64形式で作成できるほか、一部の統合機能では専用形式にも対応しています (各統合機能で使用できる形式については、[統合機能のページ](/keeperpam/jp/secrets-manager/integrations.md)をご参照ください)。

{% tabs %}
{% tab title="形式" %}

```bash
my vault> secrets-manager client add --app <APP NAME> --config-init <FORMAT>
```

{% endtab %}

{% tab title="例" %}

```bash
# json構成を作成
secrets-manager client add --app MyApp --config-init json --unlock-ip

# base64構成を作成
secrets-manager client add --app MyApp --config-init b64 --unlock-ip

# Kubernetes構成を作成
secrets-manager client add --app MyApp --config-init k8s --unlock-ip
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
コマンダーで構成を初期化する際は、通常 `--unlock-ip` オプションをコマンドに含める必要があります。このオプションを指定しない場合、クライアントデバイスはコマンダー実行時のIPアドレスに固定されてしまいます。
{% endhint %}

## バインディングライフサイクル <a href="#binding-lifecycle" id="binding-lifecycle"></a>

構成は3つの状態をたどります。ローカルファイル以外の場所に構成を保存する場合は、最初の成功呼び出し後に内容が変わるため、現在どの状態にあるかを把握することが重要です。

* **初期化済み:** コンストラクターは実行済みですが、ネットワーク呼び出しはまだ行われていません。構成にはワンタイムトークンが持つ情報のみが含まれます。トークンはまだ引き換えられていません。
* **バインド済み:** 最初のAPI呼び出し (例: 最初の `get_secrets`) でワンタイムトークンが引き換えられます。サーバーからの応答が構成に書き戻され、アプリケーションキーとクライアント識別子が追加され、ワンタイムトークンは削除されます。トークンは消費され、再利用できません。
* **再利用:** 以降の呼び出し、およびバインド済み構成を読み込む後続プロセスは、保存されたキーで認証し、引き換え処理を省略します。

{% hint style="info" %}
コンストラクターはKeeperに接続しません。ワンタイムトークンはクライアント作成時ではなく、**最初のAPI呼び出し**で引き換えられます。そのため、「後で使う」構成を生成する場合は、トークンをバインドするために少なくとも1回の読み取り操作が必要です。
{% endhint %}

### 各状態で構成が保持する内容 <a href="#what-the-configuration-holds-in-each-state" id="what-the-configuration-holds-in-each-state"></a>

以下はJSON構成キーです。各キーの暗号化の役割については、[セキュリティおよび暗号化モデル](/keeperpam/jp/secrets-manager/about/security-encryption-model.md)をご参照ください。

<table><thead><tr><th width="186.71484375">構成キー</th><th width="133.30078125">初期化済み</th><th>バインド済み</th><th>備考</th></tr></thead><tbody><tr><td><code>hostname</code></td><td>はい</td><td>はい</td><td>Keeperリージョン。構成作成時に設定</td></tr><tr><td><code>clientKey</code></td><td>はい</td><td>削除</td><td>ワンタイムトークンの秘密値 (コンストラクターに渡すトークンは <code>REGION:clientKey</code>)。最初の呼び出しで <code>clientId</code> の導出と <code>appKey</code> のアンラップに使用され、その後削除</td></tr><tr><td><code>privateKey</code></td><td>はい</td><td>はい</td><td>クライアントデバイスの秘密鍵。すべてのリクエストに署名。削除されない</td></tr><tr><td><code>serverPublicKeyId</code></td><td>任意</td><td>はい</td><td>伝送ラッパーに使用するKeeper公開鍵を識別</td></tr><tr><td><code>clientId</code></td><td>—</td><td>追加</td><td>引き換えられたトークンから導出されるクライアントデバイス識別子</td></tr><tr><td><code>appKey</code></td><td>—</td><td>追加</td><td>シークレットを復号するアプリケーションキー。最初の呼び出しで返却</td></tr><tr><td><code>appOwnerPublicKey</code></td><td>—</td><td>返却時に追加</td><td>レコードの作成および更新に使用する所有者公開鍵</td></tr></tbody></table>

### バインド済み構成の永続化と再構築 <a href="#persisting-and-rebuilding-a-bound-configuration" id="persisting-and-rebuilding-a-bound-configuration"></a>

構成がローカルファイルではなく外部ストア (データベース、クラウドシークレット、KMSでラップしたBlobなど) に保存される場合は、**バインド後**に永続化してください。

1. ワンタイムトークンでクライアントを構築します。
2. 1回呼び出します (例: `get_secrets`) してバインドします。
3. バインド済み構成を読み出し、ストアに保存します。
4. 後続プロセスでは、ストアからバインド済み構成を読み込み、それを使ってクライアントを構築します。トークンは不要です。

{% hint style="danger" %}
初期化済みのままの構成を保存し、そのコピーから2つ目のクライアントを構築すると、両方のクライアントが同じワンタイムトークンの引き換えを試み、成功するのは1つだけです。まず1回成功する呼び出しを行い、バインド後に永続化してください。
{% endhint %}

```python
import json
from keeper_secrets_manager_core import SecretsManager
from keeper_secrets_manager_core.storage import InMemoryKeyValueStorage

# my_store is your external store (database, cloud secret, KMS-wrapped blob)

# First run: redeem the token, then read the bound configuration back out
config = InMemoryKeyValueStorage()
sm = SecretsManager(token="US:ONE_TIME_TOKEN", config=config)
sm.get_secrets()                              # binds; the token is consumed here

bound = config.read_storage()                 # dict keyed by configuration field names
my_store.save("ksm-config", json.dumps(bound))

# Later process: rebuild from the bound configuration, no token required
restored = InMemoryKeyValueStorage(my_store.load("ksm-config"))
sm = SecretsManager(config=restored)
secrets = sm.get_secrets()
```

{% hint style="info" %}
各SDKページにも、同じ永続化と再構築の手順が、言語ごとのストレージクラスを用いて記載されています。
{% endhint %}


---

# 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:

```
GET https://docs.keeper.io/keeperpam/jp/secrets-manager/about/secrets-manager-configuration.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.
