---
title: "インフラストラクチャ"
description: "設定にシークレットを含めず、ログにシークレットを記録しません。Docker、Kubernetes、Terraform、Ansible、CI/CD、その他すべての環境に対応します。"
lang: ja
url: https://clavitor.ai/ja/developers/infrastructure
markdown: https://clavitor.ai/ja/developers/infrastructure.md
translation_of: https://clavitor.ai/en/developers/infrastructure.md
authoritative: false
publisher: Clavitor LLC
---

> This is the Japanese translation of [Infrastructure](https://clavitor.ai/en/developers/infrastructure.md). The original English text is authoritative; where the two differ, the English version prevails.

# インフラストラクチャ: 設定にシークレットを含めず、 ログにシークレットを記録しません。

あらゆるプラットフォーム、あらゆるオーケストレーター、あらゆるCIランナーに対応します。プロキシはHTTP呼び出しを行うすべての環境で動作します。CLIはシェルコマンドを実行できるすべての環境で動作します。お使いのシステムがあなたのキャリアよりも古いものであっても、問題なく動作します。

## プロキシは汎用インテグレーションとして機能します。

ワークロードがHTTPS呼び出しを行う場合、Clavitorプロキシはネットワーク層で資格情報を注入します。コードの変更は不要です。SDKも不要です。環境変数、設定ファイル、ログにシークレットが含まれることはありません。`HTTPS_PROXY`を設定するだけで、既存のコードは変更せずに動作します。プロキシは、リクエストがマシンから送信される前に、リクエストヘッダー内の`clavitor://`参照を解決します。

```
$ export HTTPS_PROXY=http://localhost:1983
$ curl -H "Authorization: Bearer clavitor://Stripe API/key" \
  https://api.stripe.com/v1/charges
# The agent never sees sk_live_... — only clavitor:// appears in logs

```

## コンテナ: DockerとKubernetes

### Docker Compose

ホスト上でClavitorプロキシを実行し、コンテナからそのプロキシを参照するように設定します。資格情報は送信リクエストに透過的に注入されるため、環境変数にシークレットを含めたり、イメージにシークレットを焼き込んだりする必要はありません。

```
# On the Docker host

$ clavitor-proxy serve &
```

```
# docker-compose.yml — containers route through the host-mode proxy

services:
  app:
    environment:
      - HTTPS_PROXY=http://host.docker.internal:1983
    extra_hosts:
      - "host.docker.internal:host-gateway"
```

または、`render`を使用して起動時に設定テンプレートを解決することもできます:

```
$ clavitor-cli render app.config.template.yml | docker compose -f - up
```

### Kubernetes

マニフェストに値をハードコードすることなく、ボールトからシークレットを作成します:

```
$ kubectl create secret generic app-secrets \
  --from-literal=db-pass="$(clavitor-cli get 'Production DB' --field password)" \
  --from-literal=api-key="$(clavitor-cli get 'Stripe API' --field key)"
```

実行時の資格情報注入には、プロキシをサイドカーコンテナとしてPodにデプロイします。アプリケーションコンテナは`HTTPS_PROXY`をサイドカーに設定します。資格情報はリクエストごとに解決され、etcdに保存されることはありません。

## IaC: Terraform、Ansible、Pulumi

### Terraform

`terraform apply`の前に、プロバイダー環境で資格情報を解決します。AWSプロバイダーは標準の環境変数から資格情報を読み取ります。Clavitorがインラインでそれらを設定するため、.tfファイルにシークレットを記述する必要はありません。

```
$ export AWS_ACCESS_KEY_ID=$(clavitor-cli get "AWS Root" --field access_key_id)
$ export AWS_SECRET_ACCESS_KEY=$(clavitor-cli get "AWS Root" --field secret_key)
$ terraform apply
```

コード内の`provider "aws" {}`ブロックは空のままにします。環境変数による資格情報をサポートするTerraformプロバイダー（そのほとんどが該当します）であれば、同じパターンが適用されます。

### Ansible

```
- name: Get database password
  command: clavitor-cli get "Production DB" --field password
  register: db_pass
  no_log: true

- name: Configure app
  template:
    src: app.conf.j2
  vars:
    db_password: "{{ db_pass.stdout }}"
```

### Pulumi

```
import { execSync } from 'child_process';
const dbPass = execSync('clavitor-cli get "Production DB" --field password').toString().trim();
new aws.rds.Instance("db", { masterPassword: new pulumi.secret(dbPass) });
```

## CI/CD: GitHub Actions、GitLab CI、Jenkins

以下のすべての例では、トークンは標準入力経由でパイプ渡しされます。これにより`argv`に含まれることがなく、`/proc/<pid>/cmdline`やビルドログに表示されません。

### GitHub Actions

```
- name: Deploy
  env:
    CLAVITOR_TOKEN: ${{ secrets.CLAVITOR_TOKEN }}
  run: |
    echo "$CLAVITOR_TOKEN" | clavitor-cli init
    kubectl create secret generic app-secrets \
      --from-literal=api-key="$(clavitor-cli get 'Deploy Token' --field key)" \
      --dry-run=client -o yaml | kubectl apply -f -
```

### GitLab CI

```
deploy:
  script:
    - echo "$CLAVITOR_TOKEN" | clavitor-cli init
    - clavitor-cli get "Deploy Key" --field private_key | ssh-add -
    - ssh deploy@production "systemctl restart app"
```

### Jenkins

```
pipeline {
  stages {
    stage('Deploy') {
      steps {
        sh 'echo "$CLAVITOR_TOKEN" | clavitor-cli init'
        sh 'clavitor-cli get "Deploy Key" --field private_key | ssh-add -'
        sh 'ssh deploy@production "systemctl restart app"'
      }
    }
  }
}
```

## SSH: ボールトに保存された鍵

```
$ clavitor-cli get "Deploy Key" --field private_key | ssh-add -
$ ssh deploy@production
```

秘密鍵は`ssh-add`に直接パイプ渡しされます。ディスクに書き込まれることはなく、シェル履歴に表示されることもなく、セッション終了時にエージェントからクリアされます。

## レガシーシステム: HTTP呼び出しを行うものであれば動作します。

プロキシは、リクエストがどの言語で記述されているかを問いません。COBOL、FORTRAN、Perl、Visual Basic、30年前のバッチジョブなど、プロセスがHTTPSリクエストを行うものであれば、プロキシがそれをインターセプトし、`clavitor://`参照を解決して実際の資格情報を注入します。コードの変更は不要です。

HTTP呼び出しを行えないシステムの場合は、プロセス開始前に`clavitor-cli render`を使用して設定テンプレートを解決します。テンプレートはどの場所に保存しても安全です。解決された出力は、標準入力または権限が制限された一時ファイルに送られます。

```
# Resolve credentials before the batch job starts

$ clavitor-cli render db-connect.template.cfg > /tmp/db-connect.cfg
$ chmod 600 /tmp/db-connect.cfg
$ /opt/legacy/batch-job --config /tmp/db-connect.cfg
$ rm /tmp/db-connect.cfg
```

## パターンは常に同じです。

スクリプトとパイプラインにはCLI、HTTPワークロードにはプロキシ、設定ファイルには`render`を使用します。すべてのシークレットは実行時に解決され、保存されることはありません。
[無料で始める](https://clavitor.ai/ja/checkout)
[開発者向け概要 →](https://clavitor.ai/ja/developers)
