# ワンタイムアクセストークン

## 概説 <a href="#overview" id="overview"></a>

Keeperシークレットマネージャーは、「ワンタイムアクセストークン」を使用して鍵交換を行い、シークレットマネージャーAPIにアクセスする新しいクライアントデバイスを初期化します。各クライアントデバイスは、それぞれ専用のワンタイムアクセストークンを使用して初期化する必要があります。

ワンタイムアクセストークンは、[Keeperコマンダー](#using-commander-to-generate-a-token)または[Keeperボルト](#using-the-keeper-vault-to-generate-a-token)を使用して生成できます。これらのトークンは、クライアントデバイスを作成する際に生成されます。

ワンタイムアクセストークンの目的は、「構成」を作成することにあります。構成は、複数の暗号化キーおよび識別子で構成されており、クライアントデバイス上にローカル保存されるか、対象となるCI/CDプラットフォーム内に保存されます。

## コマンダーを使用したトークンの生成 <a href="#using-commander-to-generate-a-token" id="using-commander-to-generate-a-token"></a>

#### 1. アプリケーションを作成する

{% hint style="info" %}
使用したいアプリケーションが既に存在する場合は、[手順3](#3-create-a-new-client-device)に進みます。
{% endhint %}

`secrets-manager app create` を使用して新しいシークレットマネージャーアプリケーションを作成します

```
My Vault> secrets-manager app create DevOps
Application was successfully added
```

`secrets-manager app list` を使用して、使用できるアプリケーションの一覧を表示できます。

```
My Vault> secrets-manager app list

List all Secrets Manager Applications

Title              UID
-----------------  ----------------------
DevOps             fe6mv_ZBLqca35dBUTdNeQ
Examples           Xym5lhpSidvtk9VlmV_3dQ
Github Actions     L5FqK5DUJhxeCXp50nSkuw
Jenkind            R2jMVW_QwL3FsCJziotpLQ
```

#### 2. アプリケーションを共有フォルダまたはレコードに関連付ける

アプリケーションにボルト内のレコードへのアクセスを許可するには、共有フォルダまたはレコードをアプリケーションに割り当てる必要があります。

コマンダーから、以下のコマンドを使用してアプリケーションと共有します。

`secrets-manager share add --app <アプリケーション名> --secret <フォルダまたはレコードUID>`

`--editable`フラグを指定すると、アプリケーションに編集権限を付与できます。

以下の例では、「XXX」の部分をレコードまたは共有フォルダのUIDに置き換えてください。

```
My Vault> secrets-manager share add --app DevOps --secret XXX --editable

Successfully added secrets to app uid=XXX, editable=True:
        RpdmKFgF5lpsaID3TcHu8A Shared Folder
```

{% hint style="info" %}
レコードUIDやフォルダUIDを確認するには、`ls -l` コマンドを使用します。このコマンドを実行すると、対応するUIDとともに、レコードやフォルダの一覧が表示されます。
{% endhint %}

#### 3. クライアントデバイスを作成する

アプリケーションは、1つ以上のクライアントデバイスで構成されます。ボルト内のレコードにアクセスするには、少なくとも1つのクライアントデバイスが必要です。

新しいクライアントデバイスを作成するには、`secrets-manager client add --app <アプリケーション名>` コマンドを使用します。

オプションとして、`--name <名前>` を指定するとクライアントデバイス名を設定できます。また、`--unlock-ip` を指定すると、認証された任意のデバイスからの接続を許可できます。デフォルトでは、クライアントデバイスの外部IPアドレスに基づいてアクセスが制限されます。

```
My Vault> secrets-manager client add --app DevOps --name server1

Successfully generated Client Device
====================================

One-Time Access Token:US:19-V--cbg8P-o9OVDzMl_hWnrt-QE1eAMQHgSkQMUi0
Name: server1
IP Lock:Enabled
Token Expires On:2021-10-01 11:14:18
App Access Expires on:Never
```

クライアントデバイスの作成時に、ワンタイムアクセストークンが表示されます。

出力結果からワンタイムアクセストークンをコピーし、KeeperシークレットマネージャーSDKまたは各種インテグレーションを使用してデバイスを初期化してください。このトークンは、対象デバイスで一度使用すると再利用できません。

アプリケーションに関連付けられたレコードへアクセスするために、必要な数だけクライアントデバイスを生成できます。

## Keeperボルトを使用したトークンの生成 <a href="#using-the-keeper-vault-to-generate-a-token" id="using-the-keeper-vault-to-generate-a-token"></a>

### 新しいアプリケーションを使用する場合

#### 1. シークレットマネージャーに移動します

Keeperボルトのナビゲーションメニューからシークレットマネージャーを選択します。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FiImHzshHTsX4WrIhQdXZ%2Fimage.png?alt=media&#x26;token=2db4f174-95d2-4125-b80b-68ec8803d782" alt=""><figcaption></figcaption></figure>

#### 2. 新しいアプリケーションを作成します

新しいシークレットマネージャーのアプリケーションを作成し、ワンタイムアクセストークンを生成するには、まずシークレットマネージャーのタブから **\[アプリケーションを作成]** を選択します。

**\[アプリケーションを作成]** ボタンは、ページ右上に表示されます。アプリケーションがまだ作成されていない場合は、ページ中央に表示されます。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FNi31Gib8kIa5XzUqk7B2%2Fimage.png?alt=media&#x26;token=88fc2000-71d1-4ddb-9bef-2f392e091a3e" alt=""><figcaption><p>アプリケーションがまだ存在しない場合のシークレットマネージャータブ</p></figcaption></figure>

「アプリケーションの追加」ウィンドウで、新しいアプリケーションの名前を入力します。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FUtn0jcavl16ZpJJyN5A5%2Fimage.png?alt=media&#x26;token=3b2a1cd3-6cec-4ce6-b9c1-a61c5c551365" alt=""><figcaption><p>アプリケーションの追加フォーム</p></figcaption></figure>

ドロップダウンメニューから、アプリケーションにアクセスを許可する共有フォルダを選択します。複数のフォルダを選択できます。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FFv8JG0bq1dIOUE9jzPzL%2Fimage.png?alt=media&#x26;token=449ed4db-8f55-4c0f-be22-c6a5978ab40d" alt=""><figcaption><p>アプリケーションにレコードへのアクセスを許可する共有フォルダを選択</p></figcaption></figure>

{% hint style="info" %}
アプリケーションを作成後、さらにフォルダとレコードを追加できます。
{% endhint %}

ドロップダウンメニューを使用して、このアプリケーションに読み取り権限や編集権限を与えることもできます。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FbvP45Q8cSb4Z2r1q2QSS%2Fimage.png?alt=media&#x26;token=21486edc-eacc-4bb0-92d5-d544cddd2dce" alt=""><figcaption><p>アクセス権限オプションとIPロックオプションの選択</p></figcaption></figure>

必要に応じて、**\[初回リクエスト時にデバイスの外部WAN IPアドレスをロックする]** にチェックを入れることで、アプリケーションの最初のクライアントデバイスを、最初に接続したIPアドレスに制限できます。

#### 3. ワンタイムアクセストークンを生成する

アプリケーションの設定が完了した後、**\[アクセストークンを生成]** をクリックすると、最初のクライアントデバイスが作成され、ワンタイムアクセストークンを取得できます。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FosBtUcTpJ5ibZWgYEavG%2Fimage.png?alt=media&#x26;token=d2e2e30f-426d-4635-8b82-6ef48a51dc9e" alt=""><figcaption></figcaption></figure>

出力結果からワンタイムアクセストークンをコピーし、KeeperシークレットマネージャーSDKまたは各種インテグレーションを使用してデバイスを初期化します。このトークンは、対象デバイスで一度使用すると再利用できません。

アプリケーションに関連付けられたレコードへアクセスするために、必要な数だけクライアントデバイスを生成できます。

### 既存のアプリケーションを使用 <a href="#with-an-existing-application" id="with-an-existing-application"></a>

#### 1. シークレットマネージャーに移動します

Keeperボルトのナビゲーションメニューからシークレットマネージャーを選択します。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2F2QXXNwXsrdZMRhVEn5sf%2Fimage.png?alt=media&#x26;token=f6dd9521-32de-4048-94d7-5593b3cbad89" alt=""><figcaption></figcaption></figure>

#### 2. 既存のアプリケーションに新しいクライアントデバイスを作成する

既存のシークレットマネージャーアプリケーションで新しいクライアントデバイスを作成し、新しいワンタイムアクセストークンを生成するには、まずシークレットマネージャーのタブに表示されている一覧から使用するアプリケーションを選択します。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FjHROxeKsjJJd1VH3Ejjh%2Fimage.png?alt=media&#x26;token=19543c7d-e4c7-477a-bca8-4c5216244e99" alt=""><figcaption><p>アプリケーションがすでに存在する場合のシークレットマネージャータブ</p></figcaption></figure>

アプリケーションを選択すると詳細画面が開き、このアプリケーションがアクセスできるフォルダやレコードが表示されます。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FlHjcCKyMBoeOiAb5CMwo%2Fimage.png?alt=media&#x26;token=6dc77c71-56fb-4ed9-b5f0-310f143f04dd" alt=""><figcaption><p>アプリケーションがアクセスできる共有フォルダとレコードの一覧</p></figcaption></figure>

新しいクライアントデバイスを作成するには、まず **\[デバイス]** タブに移動し、**\[編集]** をクリックした後、**\[＋ デバイス]** ボタンをクリックします。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FIvwVqRaWLOuVzMofTOdX%2Fimage.png?alt=media&#x26;token=bc396227-ad44-4c27-860c-5942740c67f8" alt=""><figcaption><p>このアプリケーションに関連付けられたすべてのデバイスが表示されたデバイスタブ</p></figcaption></figure>

**\[デバイスを追加]** フォームで、新しいデバイスの名前を選択します。必要に応じて **\[初回リクエスト時にデバイスの外部WAN IPアドレスをロックする]** にチェックを入れることで、クライアントデバイスを最初に接続したIPアドレスに制限できます。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FCY4Qcu4wesMpnODKteKf%2Fimage.png?alt=media&#x26;token=f8e9b8d5-a72c-4e7f-8a49-cf8cf605726b" alt=""><figcaption><p>デバイスの追加フォーム</p></figcaption></figure>

#### 3. ワンタイムアクセストークンを生成する

**\[アクセストークンを生成]** をクリックすると、クライアントデバイスが作成され、ワンタイムアクセストークンが表示されます。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FKfPvfoBf3Fo4CTaoBNFC%2Fimage.png?alt=media&#x26;token=3321917e-f342-4243-8eba-ee7204023d22" alt=""><figcaption></figcaption></figure>

この画面に表示されるワンタイムアクセストークンをコピーし、KeeperシークレットマネージャーSDKや各種インテグレーションで使用します。このトークンは後から再表示できないため、必ずこの時点で控えてください (追加のクライアントデバイスを作成することで、新たなトークンを生成することは可能です)。

## 構成を生成

一部のサードパーティ製Keeperシークレットマネージャー連携では、ワンタイムアクセストークンから構成を作成するのではなく、あらかじめ用意された構成を使用する必要があります。

次のページでは、シークレットマネージャーの構成を作成する方法について取り扱います。
