Carpe Diem

備忘録

HashiCorp VaultのTransit secret engineでデータを暗号化・復号する

概要

HashiCorp VaultにはTransit Secrets Engineという、暗号化・復号をしてくれる機能があります。 このTransit Secrets EngineはKey/Valueのように暗号化データを保存することはなく、暗号化するための暗号化キーを保存&バージョン管理します。
また複数の機能を持っており、AWS KMSのようなデータキーを生成する機能もあります。
今回はこれの使い方を紹介します。

環境

  • Vault 0.10.3

基本的な使い方

暗号化キーの生成

まずはtransitを有効化します。

$ vault secrets enable transit
Success! Enabled the transit secrets engine at: transit/
続きを読む

GoでVaultを操作

概要

これまで紹介したHashiCorp Vaultの使い方はCLIを使うのがメインでしたが、実際はアプリケーション内で秘密情報を扱うケースが多々あります。
VaultはGoのライブラリを提供しているので、様々なログイン方法を紹介しつつ秘密情報にアクセスしてみます。

環境

CLIから秘密情報を登録する

あらかじめKey/Valueに秘密情報を登録しておきます。

$ vault kv put secret/my-secret my-value=s3cr3t
Key              Value
---              -----
created_time     2018-07-13T15:01:30.440745605Z
deletion_time    n/a
destroyed        false
version          2
続きを読む

IAMユーザを持っていたらVaultにログインできるようにする

概要

HashiCorp Vaultのデフォルトのログインはトークンですが、これだと漏れた時など管理しにくいのでAWSのIAMユーザ情報を元にログインできるようにします。

前提

ログインするメンバーはAWSのIAMユーザを持つ

環境

  • Vault 0.10.3
続きを読む

HashiCorp VaultのPolicyを使った運用

概要

HashiCorp VaultはPolicyを使って各APIの権限を設定します。
これによって権限を細かく設定することができますが、実際の運用ではどんな形で進めるのがいいのかがドキュメントでは分かりにくかったのでまとめした。

環境

  • Vault 0.10.3

Policy付与のフロー

以下のようにPolicyを操作できるユーザがVaultに登録し、ユーザなどにマッピングします。

f:id:quoll00:20180711161948p:plain

ref: Policies - Vault by HashiCorp

続きを読む

HashiCorp VaultでSSHをCA認証に

背景

AWSを運用しているとEC2のsshのキーペア管理が難しいです。
GCPであればメタデータにsshキーを登録すれば自動で各VMsshできる仕組みがありますが、AWSは各インスタンスsshのキーペアを1つだけ登録するようになっているため、複数人で運用するにはぱっと以下の方法が浮かびます。

  • 複数人でキーペアの秘密鍵を共有
  • authorized_keysに全員の公開鍵を登録
  • adduserで各メンバーのsshを設定

しかしそれぞれ問題があります。秘密鍵の共有はセキュリティ的に大きな問題がありますし、後の2つは起動時に設定するのが非常に手間です。
仮にLambdaなどで新規サーバに対して設定する処理を自動化しても、あとからジョインしたメンバーは別途対応しなくてはいけません。

そこでsshを公開鍵認証でなく、CA認証を使うことで複数のメンバーでも管理しやすくします。
CA認証は以下の記事で非常に分かりやすく説明されています。

SSH CA認証まとめ

今回このCA認証を、Vaultを使って簡単&セキュアに構築します。

続きを読む

HashiCorp VaultのSeal/Unseal

概要

Hashicorp Vaultは起動時はsealedというステータスになっており、リストを取得したりKey-Valueの値を取得することができません。
Vaultはセキュリティのため、データにアクセスする手段は知っていても起動時は復号の方法を知らないのです。

そこでUnsealというプロセスで復号用のマスターキーを複数の鍵から生成して復号できるようになっています。

f:id:quoll00:20180707083431p:plain

ref: Rekeying & Rotating Vault | Vault - HashiCorp Learn

なぜこのような仕組みを導入しているのかを説明します。

続きを読む

KubernetesでEnvoyを使ったSidecarパターンを実装

概要

前回書いた構成をKubernetesで実装してみます。

christina04.hatenablog.com

環境

成果物

今回のソースです。

github.com

続きを読む