GCPのAlways FreeでVaultをHTTPSで起動するまで


やりたいこと

クレデンシャル情報のセキュアな管理がしたい。
HashiCorp Vaultを使ってやってみたい。
とりあえずGCPで無料でやりたい。

事前準備

HTTPS化するためにドメインを1つ取得しておいてください。

GCP

インフラの作成を実施してきます。

GCE

GCEとは、GCPのコンピューティングサービスです。AWSで言うところのEC2。
Always Freeのf1.micro in オレゴンリージョンで作成します。
ストレージも無料枠の30GBで作成します。

VaultのBackend StorageとしてGCSを利用するため、下記で権限を付与しておきます。

GCS

Vaultのbackend strageとしてGCSを利用するため、事前にバケットを作成しておきます。

Docker

環境構築はDockerコンテナで行っていきます。

Dockerのインストール
curl -fsSL https://get.docker.com/ | sh
# sudoersに所属している必要があります
Dockerグループに追加
sudo usermod -aG docker $USER
# 非ルートユーザでdockerが実行できるようになります
DockerComposeのインストール
sudo curl -L "https://github.com/docker/compose/releases/download/1.26.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

ここまできたら一度接続しなおしてください。

コンテナの構築

マシンが作成されたら、本命のVaultを構築します。HTTPS対応1するために、今回はCaddyを利用します。

DNS登録

Caddyで適切にLet's Encryptによる証明書発行をするために、事前にGCEのパブリックIPアドレスを、自分が所有するドメインのA/AAAAレコードに登録する必要があります。

ここは省略します。適宜、Route53やお名前ドットコムなどで設定してください。

VaultとCaddy

下記の定義で、起動しました。

ディレクトリ構成
.
├── caddy
│   └── Caddyfile
├── docker-compose.yml
└── vault
    └── config
        └── vault.json
docker-compose.yml
version: "3"
volumes:
  vault-data:
  caddy-data:
services:
  vault:
    image: vault:1.4.3
    container_name: vault
    restart: unless-stopped
    volumes:
      - ./vault/config:/vault/config
      - ./vault/policies:/vault/policies
      - vault-data:/vault/data
    expose:
      - 8200
    cap_add:
      - IPC_LOCK
    command: vault server -config=/vault/config/vault.json
  caddy:
    image: caddy:2.1.1-alpine
    container_name: caddy
    restart: unless-stopped
    volumes:
      - caddy-data:/data
      - ./caddy:/etc/caddy
    ports:
      - 80:80
      - 443:443
    links:
      - vault
Caddyfile
# 下記を自身のドメイン名を記載してください。
# vault.example.com

# Set this path to your site's directory.
root * /usr/share/caddy

# Enable the static file server.
file_server

# Another common task is to set up a reverse proxy:
# reverse_proxy localhost:8080
reverse_proxy vault:8200
vault.json
{
  "ui": true,
  "listener": {
    "tcp": {
      "address": "0.0.0.0:8200",
      "tls_disable": "true"
    }
  },
  "backend": {
    "gcs": {
      "bucket": "ここにGCSのバケット名を記載"
    }
  },
  "default_lease_ttl": "168h",
  "max_lease_ttl": "0h",
  "api_addr": "http://0.0.0.0:8200"
}

ではコンテナを起動します。

コンテナ起動
docker-compose up -d

ブラウザからアクセスすると無事に画面が表示されました。

マスターキーを生成してダウンロードします。

マスターキーで無事に初回ログインできました。


  1. Feature Request: Support Let's Encrypt secret engine #4950 このissueがMergeされたらいらなくなるかもね!