Carpe Diem

備忘録

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

続きを読む

マイクロサービスでのSidecarパターンとは何か

概要

マイクロサービス化したシステムを運用する上で出てくる課題を解決するパターンとしてService Meshというものがあります。
このService Meshというものは以下の2つのコンポーネントで構成されます。

  • Data plane
  • Control plane
    • Data planeの管理

このData planeのproxyはSidecarパターンという形で構築します。
今回はそれが生まれた背景などをEnvoyを用いて説明していこうと思います。

Sidecarパターンは何が嬉しいの?

そもそもどういった問題背景から生まれたのかを考えます。

モノリス

最初はシンプルな機能であったため、モノリシックなAPIで十分でした。 f:id:quoll00:20180701011333p:plain

しかし機能が増え、チーム人数も増えたためドメイン毎に機能を分けてマイクロサービス化する事を考えます。
また通信のレイテンシを下げるため、gRPCの導入も考えます。

続きを読む