Carpe Diem

備忘録

protocの使い方

概要

christina04.hatenablog.com

で紹介したprotoeasyがリンクごと消えて使えなくなったので、protocの使い方を整理するために書きます。

環境

  • libprotoc 3.9.1

使い方

Goを例に基本的な使い方を説明します。

SRC_DIRディレクトリに.protoファイルがある場合、基本的には以下のようにコンパイルを実行します。

$ protoc -I./SRC_DIR --go_out=./OUT_DIR ./SRC_DIR/*.proto

各オプションをそれぞれ説明していきます。

続きを読む

機密情報の管理で大切なこと

概要

機密情報の管理はいつも悩みのタネです。
その管理に僕はHashiCorp Vaultを推してますが、その理由を含めて説明します。

管理方法の課題

機密情報の管理で考えなければいけないことはたくさんあります。

  • データの暗号化
  • どこに保存するか
  • 認証
  • アクセス権限
  • ローテーション
  • 鍵の共有自体を防ぐ仕組み
  • デプロイ時などの鍵配送
  • Audit(監査)ログ
  • 漏洩の検知
  • 漏洩時のインシデントインパクトの最小化

最初の2つはすぐ浮かぶと思いますが、残りは多くのケースで十分な対応がされてないです。

続きを読む

VaultのCubbyhole Response Wrapping

概要

HashiCorp VaultにはCubbyhole Response Wrappingという仕組みが用意されています。
これによってトークンや秘密情報の受け渡し時の漏洩リスクを最小限にします。

課題・背景

人やマシンにトークンを渡す場合、

  • 発行した人から漏洩する可能性
  • 渡す際に盗聴されて漏洩する可能性
  • 同じトークンの使い回し(別の人にも同じトークンをシェアしてしまう)
    • =漏洩経路の拡大

などの問題点を考慮する必要があります。
また仮に漏洩した場合に

  • 漏洩したトークンが不正に利用された

ということを検知する仕組みが必要になります。

Cubbyhole Response Wrappingはそれらを解決する手段です。

環境

  • Vault 1.2.2
続きを読む

HashiCorp VaultのDynamic Secrets

概要

HashiCorp VaultにはDynamic Secretsという期限の付いた認証情報を動的に生成してパブリッククラウドやDBへのアクセスをセキュアに保つ仕組みが用意されています。

課題・背景

秘密情報とその周辺の認証を一元化し、適切な暗号化・Auditなどをしっかりしたとしても以下の課題が残っています。

  • 鍵情報を用意してもローテーション運用が大変
    • 退職者が出るたびにローテーションしなきゃいけない
  • 鍵の共有化
    • 影響範囲が分からず削除できない
    • 漏洩しても誰が使ったのか分からない
  • 起動時だけ秘密情報が必要なのに永続的にどこかに残すのがセキュアでない
    • ログやクラッシュレポートに秘密情報が吐き出されてしまったり

ref: https://www.hashicorp.com/blog/why-we-need-dynamic-secrets

Dynamic Secretsはそれを解決するための手段です。

環境

  • Vault 1.2.1
続きを読む

VaultのTokenとLease

概要

HashiCorp VaultのTokenにはLeaseという概念があります。
この概念によってよりローテーションを強制し、秘密情報のセキュアな管理をすることが可能です。

環境

  • Vault 1.2.1

default_lease_ttlmax_lease_ttl

root tokenを除く全てのtokenにはdefault_lease_ttlmax_lease_ttlの2つのTTLがあります。

$ vault read sys/auth/token/tune
Key                  Value
---                  -----
default_lease_ttl    768h
force_no_cache       false
max_lease_ttl        768h
token_type           default-service

説明すると以下です。

TTL 説明
default_lease_ttl tokenをcreate, renewした時のTTL
max_lease_ttl renewの上限値
expire_time>issue_time+max_lease_ttlとなるrenewはNG
デフォルト32日

このように2つの期限でvaultのtokenは管理されています。

続きを読む

Kubernetes の Ingress を理解する

概要

KubernetesにはL4ロードバランサのServiceとL7のIngressがあります。
IngressはControllerによって挙動が大きく変わるので実際に手を動かして学んでみます。

環境

Ingress Controller

Ingress ControllerはIngressリソースを動かすためのものです。

例えば以下のようなIngress Controllerがあります。

Ingress Controllers | Kubernetes

続きを読む

Helm の基本的な使い方

概要

Kubernetesの問題の1つに、マニフェストファイルがたくさんできるYAMLの壁と呼ばれるものがあります。

  • image
  • mountするファイル
  • label
  • リソース割当

といった一部の要素だけ変えたい時、ほとんど構成は同じで似たようなマニフェストファイルが大量に出てしまいます。
そしてそういったファイルは往々にして管理されず負債となっていきます。

それを解決するのがHelmというKubernetesのパッケージマネージャです。
共通部分をテンプレート化し、可変部分を変数で扱えるようになります。

今回はそのHelmの基本的な使い方を説明します。

環境

システム図

Helmをシステムアーキテクチャは以下です。

f:id:quoll00:20190806154207p:plain

ref: Simplifying App Deployment in Kubernetes with Helm Charts

図からわかるようにTillerと呼ばれるサーバがKubernetes Cluster内で起動し、api-serverをコールしてデプロイを行います。

続きを読む