grasys blog

Vault on k8s

こんにちは。人生折り返しの歳になりました。 今回はVaultを利用してこんな仕組みを作ったよという実例です。

今回説明するのはBitbucketへのUser SSH KeyをVaultを使って安全に管理するサービスです。 処理内容は次の通り。

  • 認証サービスへのアクセスは特定のIPレンジのみ許可
  • 認証サービスへのアクセスはGoogle認証を使う
  • 24時間毎にSSH Keyを再作成
  • SSH KeyとPassphraseはVaultに保管
  • TOTP認証でSSH Keyを取得
  • SSH Key Passphraseは認証サービスから取得

ぱっと見複雑な感じがしますが、要件的には

組織内メンバーが特定の場所からTOTP認証を使って安全にSSH Keyを運用することができる

ということです。

Vault Key Feature

今回利用するVaultのKey Featureです。

Key/Value

Vaultの最もスタンダード(?)な機能です。

KV Secrets Engine – Version 2

SSH KeyおよびPassphraseの保管で利用します。

TOTP(Time-based One-time Password)

AuthenticatorとかAuthyでワンタイムパスワードを設定する時にバーコードが出てくるアレです。 自前で実装しても良いと思いますが、Vaultには便利なSecret Engineがあります。

TOTP Secrets Engine

SSH KeyおよびPassphraseの取得で利用します。

PKI(Public Key Infrastructure)

Vaultで認証局を作成して証明書を発行する仕組みを提供できます。

PKI Secrets Engine

今回はVaultをk8sにデプロイするので、httpsの証明書として利用します。オレオレ

Archtecture

こんな感じになりました。

上記のArchtectureでサーバプログラム書いて、UIをゴニョゴニョすると・・・


TOP

Bootstrap!



Get QR Code


このバーコード、Vaultからはbase64で返ってくるのでView側ではこんな感じで直接的に書けます。

{{define "vault-otp"}}
<!DOCTYPE html>
<html lang="ja">
  {{template "bootstrap-header" .}}
  <body>
    <div class="container">
      <h2>Generated your account barcode.</h2>
        <div class="container">
          <img src="data:image/png;base64,{{.}}"/>
        </div>
      <a class="btn btn-danger btn-sm btn-block" href="?generate=true" role="button">Regenerate</a>
      <a class="btn btn-default btn-sm btn-block" href="/" role="button">Back</a>
    </div>
  </body>
</html>
{{end}}

Bitbucket Passphrase

Google認証をクリアすればPassphraseが見れます。



Register Bitbucket secrets

BitbucketユーザとAppPasswordをVaultに保管するUI



いろいろ端折っていますが・・・

今回お伝えしたかったのは、アイデア次第で小さなシステムを作るぐらいならさくっとできるということです。 では皆さん、良いVaultライフを!


株式会社grasys(グラシス)は、技術が好きで一緒に夢中になれる仲間を募集しています。

grasysは、大規模・高負荷・高集積・高密度なシステムを多く扱っているITインフラの会社です。Google Cloud (GCP)、Amazon Web Services (AWS)、Microsoft Azureの最先端技術を活用してクラウドインフラやデータ分析基盤など、ITシステムの重要な基盤を設計・構築し、改善を続けながら運用しています。

お客様の課題解決をしながら技術を広げたい方、攻めのインフラ技術を習得したい方、とことん技術を追求したい方にとって素晴らしい環境が、grasysにはあります。
お気軽にご連絡ください。


採用情報
お問い合わせ