Carpe Diem

備忘録

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の導入も考えます。

続きを読む

EnvoyのFrontProxyを用意してgRPCの負荷分散をする

概要

gRPCはHTTP/2プロトコルをベースとしたRPCです。
なのでコネクションが永続化され、その中で複数のストリームがリクエスト・レスポンスを取り扱うため負荷分散に注意する必要があります。
今回はEnvoyというgRPCに向いたproxyを使うことでそれを実現します。

環境

  • envoy 1.7.0

成果物

今回のソースはこちらにあります。

github.com

続きを読む

curlのresolvオプションで名前解決

背景

ドメイン移管の関係でCloudFrontのDNSレコードをDNSimpleからRoute53へ移そうとしていたのですが、完全な移管手続前にRoute53側のレコードでエッジサーバにちゃんとアクセスできるか確認する必要がありました。
digのNS指定を使えばエッジサーバのIPは確認できますが、CloudFrontを直IP指定でアクセスしても403が返るだけです。
そこでcurlresolvオプションを使うことで、IPを指定しつつドメイン名でアクセスするようにしました。

環境

手順

エッジサーバのIPを取得

まずCloudFrontのエッジサーバを見つけます。

続きを読む