# Google Cloud Secret Managerとの同期

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FeUWOAuByTxMbnIQVWe5X%2Fimage.png?alt=media&#x26;token=edf491c0-da56-4e0c-80b0-f154429dfd97" alt=""><figcaption></figcaption></figure>

## 概説

KeeperシークレットマネージャーCLIツールの[`sync`コマンド](/keeperpam/jp/secrets-manager/secrets-manager-command-line-interface/sync-command.md)を使用すると、Keeperボルトにあるシークレットを、対象の**GCP Secret Manager**プロジェクトへ上書きして転送できます。これにより、GCP上のサービスやスクリプトで使用するシークレットの信頼できる唯一の情報源としてKeeperボルトを利用できます。

## 機能

* KeeperボルトのシークレットをGCP Secret Managerの信頼できる情報源として利用
* GCP で使用中のスクリプトやサービスに、Keeperボルトのシークレットをシームレスに統合

## 要件

* Keeperシークレットマネージャーへのアクセス (詳細は、[クイックスタートガイド](/keeperpam/jp/secrets-manager/quick-start-guide.md)をご参照ください)
  * Keeperサブスクリプションでシークレットマネージャーアドオンが有効化されていること
  * シークレットマネージャー関連ポリシーが有効化されたロールを割り当てられたメンバーシップ
* シークレットが共有されたKeeper[シークレットマネージャーアプリケーション](/keeperpam/jp/secrets-manager/about/terminology.md)
  * アプリケーションの作成手順については、[クイックスタートガイド](/keeperpam/jp/secrets-manager/quick-start-guide.md)をご参照ください
* GCP Secret Managerを使用するGCPアカウント、オプションでIAMサービスアカウントの認証情報を作成する権限

## セットアップ

### 1. KeeperシークレットマネージャーCLIを設定

{% hint style="info" %}
KSM CLIがすでにマシンに設定済みの場合は、この手順を省略します。
{% endhint %}

KSM CLIツールを構成するには、Keeperシークレットマネージャーのワンタイムアクセストークンを使用してプロファイルを作成します。

以下のコマンドでデフォルトプロファイルを初期化できます。

```
ksm profile init <TOKEN>
```

複数のプロファイルの作成およびその他のオプションについては、[プロファイルのドキュメント](/keeperpam/jp/secrets-manager/secrets-manager-command-line-interface/profile-command.md)をご参照ください。

### 2. GCPのアクセス権限を設定

KSMとGCPを同期するには、GCP [Secret Manager](https://console.cloud.google.com/security/secret-manager)側で、`Secret Manager Admin`ロールが割り当てられたIAM認証情報が必要です (プロジェクトまたはサービスアカウント単位)。

アクセス制御の詳細

{% embed url="<https://cloud.google.com/secret-manager/docs/access-control?hl=ja>" %}

サービスアカウント認証情報の作成方法 (任意)

{% embed url="<https://developers.google.com/workspace/guides/create-credentials?hl=ja#service-account>" %}

### 3. GCP認証情報レコードの作成

KSM CLIは、シークレットの設定に使用するGCPサービスアカウントの認証情報を必要とします。\
これらの認証情報はKeeperレコードに保存され、CLIからSecrets Manager経由で参照されます。

必要なフィールドラベル

* `Google Cloud Project ID`
* `Google Application Credentials` (オプション)

{% hint style="info" %}
`Google Application Credentials`フィールドはオプションで、サービスアカウントのクレデンシャルを使用する場合にのみ必要です。デフォルトでは、GCPクライアントは[gcloud CLI](https://cloud.google.com/sdk/docs/install)を使用して作成できる[アプリケーションのデフォルト認証情報](https://cloud.google.com/docs/authentication/provide-credentials-adc)を使用します。

```
gcloud auth application-default login
```

これらの認証情報が不要になった場合は、取り消すことができます。

```
gcloud auth application-default revoke
```

{% endhint %}

#### 方法 1: GCP認証情報カスタムレコードタイプの作成

必要なフィールドを使用してカスタムのレコードタイプを作成できるため、レコードの作成が簡単かつシンプルになります。

Keeperボルトで **\[カスタムレコードタイプ]** タブに移動して、**\[タイプの作成]** をクリックします。 正しいフィールドラベルを持つ伏せ字項目を使用して新しいレコードタイプを作成し、**\[発行]** をクリックします。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FprGoGjAxGR3NsQ8gZD7G%2Fimage.png?alt=media&#x26;token=9f773b4a-677f-4490-89a2-5adbf10895b1" alt=""><figcaption><p>GCP認証情報レコードタイプの定義</p></figcaption></figure>

GCP認証情報タイプのレコードを新規作成し、対応するフィールドに詳細情報を入力します。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FklWppLXyiMwz8AymU7ie%2Fimage.png?alt=media&#x26;token=2329f982-9ed5-4b94-bb5e-74503e82787d" alt=""><figcaption><p>GCP認証情報レコードの作成</p></figcaption></figure>

この新しいレコードを、シークレットマネージャーアプリケーションに関連付けられた共有フォルダに入れます。

#### 方法 2: カスタムフィールドを追加

新しいレコードタイプを作成せずに認証情報レコードを作成するには、必要なフィールドをカスタムフィールドとして標準レコードに追加します。

任意のタイプの新しいレコードを作成し、必要なGCPフィールドごとに **\[伏せ字項目]** タイプのカスタムフィールドを追加します。**\[ラベルの編集]** をクリックして、対応するフィールド名のラベルを変更します。

{% hint style="info" %}
どのレコードタイプでも利用できますが、**\[添付ファイル]** の標準レコードタイプにはフィールドがないため、カスタムフィールドを追加したときの見た目がすっきりします。
{% endhint %}

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FSyuZBx4DGePHpari53aB%2Fimage.png?alt=media&#x26;token=926f4a80-deae-42e5-83a0-de535bbea985" alt=""><figcaption><p>カスタムフィールドとしてのGCP認証情報フィールド</p></figcaption></figure>

次に、各カスタムフィールドに入力し、**\[保存]** をクリックしてレコードを保存します。

### 4. 値のマッピングを作成

KSM CLI の`sync`コマンドでは、コマンドに指定したマッピングをもとに、どのシークレットをどの名前でGCPに登録するかを判断します。マッピングごとに、Keeperボルトにある値が対応する名前でGCP Secret Managerに設定されます。

これらのマッピングは次の形式に従っています。

```
--map "VALUE KEY" "KEEPER NOTATION"
```

* `VALUE KEY`: GCP Secret Managerで値が割り当てられるキー名
* `KEEPER NOTATION`: Keeperレコードから値を取得するための記法

Keeper表記法は、Keeperシークレットマネージャーが特定のレコードの値を指定するために使う記述方法です。 基本形式は以下のようになります。

```
UID/[field または custom_field]/フィールド名
```

以下の例では、指定されたUIDのレコード内にある「password」という名前の標準フィールドの値を参照しています。

```
ae3d[...]d22e/field/password
```

詳細については、[Keeper表記法](/keeperpam/jp/secrets-manager/about/keeper-notation.md)のページをご参照ください。

{% hint style="info" %}
例では、完全なUIDレコードが指定されていません。
{% endhint %}

完全なマッピング例

```
--map "MySQL_PWD" "jd3[...]i-fd/field/password"
```

複数のマッピングを1つの`sync`コマンドに追加できます。

```
--map "MySQL_PWD" "jd3[...]i-fd/field/password" --map "MySQL_Login" "jd3[...]i-fd/field/login"
```

{% hint style="warning" %}
Keeper記法で参照するレコードは、シークレットマネージャーアプリケーションと共有されている**共有フォルダ**内にある必要があります。正しく動作させるために、対象のレコードが必ず共有フォルダに配置されていることを確認してください。
{% endhint %}

{% hint style="success" %}
これで、KSM同期を実行する準備ができました。
{% endhint %}

## 同期の実行

同期を実行するには、クレデンシャルレコードと値のマッピングを指定して、KSM CLIの`sync`コマンドを使用します。

### 1. コマンドを構成

KSM syncコマンドをGCPタイプと組み合わせます。 以下のような形式になります。

```
ksm sync --type gcp --credentials [UID] --map [...] --map [...]
```

### 2. ドライランを実行

`sync`コマンドはドライラン (dry-run) に対応しており、GCP Secret Manager に対して実際の値を反映させずに、どの値が変更されるかを事前に確認できます。マッピングの記述が正しくできているかを確認するために、まずはドライランを実行することをおすすめします。

```
ksm sync --type gcp --credentials [UID] --map [...] --map [...] --dry-run
```

### 3. 同期を実行

準備ができたら、dry-runオプションを指定せずに`sync`コマンドを実行します。 これにより、KeeperボルトからGCPシークレットマネージャーに値がプッシュされます

{% hint style="info" %}
`--map`の短縮形として、`-m`を使用できます。
{% endhint %}

```
ksm sync --type gcp --credentials [UID] -m [...] -m [...]
```


---

# 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/gcp-secret-manager.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.
