# Docker Writerイメージ

## 概要

Docker Writer Image for KSMは、シークレットファイルをダウンロードし、シークレットを含むファイルを生成できるイメージです。

このイメージは、次のコマンドで取得できます。

```
$ docker pull keeper/keeper-secrets-manager-writer
```

実行すると、そのパラメータが環境変数で渡されます。

```
$ docker run \
    -v $PWD:/wd --workdir /wd \
    -e "KSM_CONIFG=BASE64 CONFIG" \
    -e "SECRETS=JfXpSQ2nZG6lkdl1rxB0dg/file/example.crt > file:example.crt"
    keeper/keeper-secrets-manager-writer
```

{% hint style="info" %}
このライターは、ボルトからファイルをコピーし、シークレットを含むファイルを作成するために使用されます。情報をディスクに書き込むため、漏洩のリスクが常にあります。別の手段としては、[Dockerコンテナ](/keeperpam/jp/secrets-manager/secrets-manager-command-line-interface/docker-container.md)イメージと`exec`コマンドがあります。
{% endhint %}

## パラメータ

パラメータは、コンテナに環境変数を渡すことによって処理されます。

| パラメータ               | 説明                                                                        |
| ------------------- | ------------------------------------------------------------------------- |
| `KSM_CONFIG`        | Base64でエンコードされた設定ファイル。                                                    |
| `SECRETS`           | Keeper表記法と代入先の改行区切りのリスト。                                                  |
| `SECRETS_FILE`      | ファイル以外のシークレットを書き込むファイル名。                                                  |
| `SECRETS_FILE_TYPE` | シークレットファイルの形式。有効な形式は、export、setenv、set、JSONです。デフォルトはJSONです。               |
| `CLEANUP_FILE`      | 設定すると、作成されたファイルがすべてシェルファイルに追加され、実行時に削除されます。このファイルを実行すると、作成されたファイルを削除できます。 |

## Secretsリスト

`SECRETS`は、Keeper表記法と代入先のリストです。値は改行で区切られています。以下に例を示します。

```
fXpSQ2nZG6lkdl1rxB0dg/file/example.crt > file:example.crt
cl9a9k0DWP-Iy227rBo5gQ/field/login > MY_LOGIN
gpsBL343CVYMFgOKZ-L2hQ/custom_field/Ip Address > IP_ADDR
```

各行は、「[Keeper表記法](/keeperpam/jp/secrets-manager/about/keeper-notation.md) > 代入先」になっています。代入先には、環境変数/JSONキーまたはファイルのパスと名前を指定できます。ファイルの場合、パスの先頭に`file:`テキストが付きます。文字列エンコーディングが不明なため、バイナリデータを環境変数に格納しないことをお勧めします。

### Secret File Type

secretsファイルには、環境変数`SECRETS`の値が格納されます。ファイル形式は、`SECRETS_FILE_TYPE`の値に基づいています。タイプには以下の値を指定できます。

* **json** - JSON形式で格納される値。
* **export** - BASHシェルで一般的に使用されるエクスポートコマンドとして格納される値。
* **setenv** - Cシェルで一般的に使用されるsetenvコマンドとして格納される値。
* **set** - Cシェルで一般的に使用されるsetコマンドとして格納される値。

シェルに関連するタイプを読み込んで、シークレットを環境変数に格納できます。

## 例

Docker Writer Image for KSMは、多くのアプリケーションで使用できます。いくつかの例を紹介します。

### Kubernetes

ライターイメージは、[Initコンテナ](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/)で使用するのが最適です。

```
 initContainers:
    - name: my_app
      image: keeper/keeper-secrets-manager-writer:latest
      env:
        - name:SECRETS
          value: |
            qCAw9dMQgr3Hs7EdfFpfkA/field/password > my_password
            qCAw9dMQgr3Hs7EdfFpfkA/file/exmaple.crt > file:/etc/keys/example.crt
            qCAw9dMQgr3Hs7EdfFpfkA/file/exmaple.key > file:/etc/keys/example.key
```

このコンテナでは、ライターイメージを使用してファイルを保存し、メインコンテナがアクセスできるシークレットファイルを作成します。これを行うには、ボリュームをマウントし、ファイルを書き込み、メインコンテナに同じ値をマウントさせます。PodのemptyDirがお勧めです。

### Docker Compose

**main**サービスで`depends_on`オプションを使用すると、Docker Writer Image for KSMを初期化サービスで使用できます。以下の例では、Docker Writerはボルトからシークレットを取得し、ボリュームマウントでmainイメージと共有します。

```
---
version:"2"
services:
  init:
    image: keeper/keeper-secrets-manager-writer:latest
    environment:
      KSM_CONFIG:R2VwWTVDS ... dmVyUHVibGljS2V5SWQiOiAiMTAiCn0=
      SECRETS: |
        qCAw9dMQgr3Hs7EdfFpfkA/field/password > file:/etc/keys/global.pass
        qCAw9dMQgr3Hs7EdfFpfkA/file/myserver.crt > file:/etc/keys/myserver.crt
        qCAw9dMQgr3Hs7EdfFpfkA/file/myserver.key > file:/etc/keys/myserver.key
    volumes:
      - keys-volume:/etc/keys
  main:
    image: nginx
    restart: always
    volumes:
     - ./config:/etc/nginx/conf.d
     - keys-volume:/etc/keys
    ports:
     - "80:80"
     - "443:443"
    environment:
     - NGINX_HOST=example.com
    depends_on:
      init:
        condition: service_completed_successfully
volumes:
  keys-volume:
```

通常、サービスは同時に開始されますが、`depends_on`オプションを使用すると、サービスの開始を制御できます。上記では、**main** サービスは、**init**サービスに依存します。

**init**サービスが開始し、ファイルを取得してkeys-volumeに保存した後、終了します。`service_completed_successfully`条件を使用すると、**init**サービスが正常終了した後、**main**サービスが開始されます。また、**main**サービスは`keys-volume`をマウントし、格納された鍵を使用します。

### Dockerコマンドライン

ライターイメージは、`docker run`を使用してコマンドラインで実行できます。

```
docker run \
    -v $PWD:/wd --workdir /wd \
    -e "KSM_CONIFG=BASE64 CONFIG" \
    -e "SECRETS=JfXpSQ2nZG6lkdl1rxB0dg/file/example.crt > file:example.crt"
    keeper/keeper-secrets-manager-writer
```

`SECRETS`に複数のシークレットが設定されている場合、改行文字（\n）を表記するのは困難です。解決策は、`--env,-e`値を$"で囲むことです。以下に例を示します。

```
-e $'SECRETS=V8lFbio0Bs0LuvaSD5DDHA/file/IMG_0036.png > file:my.png\nIumwT1QYRr8TTCtY8rqzhw/custom_field/S3_BUCKET > s3'
```

**file:my.png**と次のUID記録の間に「\n」があります。値全体を$''で囲まない場合、my.pngファイル名に改行コードと次のUID記録が含まれてしまいます。


---

# 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/docker-writer-image.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.
