---
title: "Vault on k8s | grasys blog"
url: "https://blog.grasys.io/post/dokuma/vaultonk8s/"
description: "こんにちは。人生折り返しの歳になりました。 今回はVaultを利用してこんな仕組みを作ったよという実例です。 今回説明するのはBitbucketへのUser SSH KeyをVaultを使って安全に管理するサービスです。 処理内容は次の通り。 - 認証サービスへのアクセスは特定のIPレンジのみ許可 - 認証サービスへ…"
---

# Vault on k8s

-   ![](/_astro/noicon.CTHOhNiB_1HMs6A.webp)[dokuma](/authors/dokuma/)
-   公開日：2019年11月1日
-   カテゴリー：[Tech](/categories/tech/)
-   タグ：[#Kubernetes](/tags/kubernetes/)[#HashiCorp Vault](/tags/hashicorp-vault/)

![Vault on k8s](/_astro/og-image.DDSiu2Ny_XHpDd.webp)

こんにちは。人生折り返しの歳になりました。 今回は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](https://www.vaultproject.io/docs/secrets/kv/kv-v2.html)

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

### TOTP(Time-based One-time Password)

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

[TOTP Secrets Engine](https://www.vaultproject.io/docs/secrets/totp/index.html)

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

### PKI(Public Key Infrastructure)

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

[PKI Secrets Engine](https://www.vaultproject.io/docs/secrets/pki/index.html)

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

## Archtecture

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

![Archtectureの画面](/_astro/01-11-6-1024x725-de336f30.BDSjTxwD_Z1xGp0y.webp)

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

* * *

#### TOP

Bootstrap!

* * *

![Bootstrapの画面](/_astro/02-12-5-1024x383-3f29182c.C9MZf1RA_14GDDk.webp)

* * *

Get QR Code

* * *

![Get QR Codeの画面](/_astro/03-13-5-1024x306-f32e16b4.DlVhV6Dw_Z1zUOE9.webp)

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

Plain textcontent\_copy

```
{{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が見れます。

* * *

![Google認証後にVaultからBitbucketのパスフレーズを表示した画面](/_astro/04-14-4-1024x157-4deb29a9.IYqHGrSi_Z1tKPhE.webp)

* * *

#### Register Bitbucket secrets

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

* * *

![Bitbucketのユーザー名とApp PasswordをVaultへ登録する画面](/_astro/05-15-4-1024x246-3325b580.Cb-2sODM_a6Hvg.webp)

* * *

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

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

## この記事を書いた人

[![](/_astro/noicon.CTHOhNiB_Z24aAgM.webp)](/authors/dokuma/)

### [dokuma](/authors/dokuma/)

dokumaのプロフィールと執筆記事をご覧いただけます。

[プロフィールと記事一覧](/authors/dokuma/)