Slide 1

Slide 1 text

Vault Secrets Operator と HCP Vault を使った AKS のシークレット管理 HashiTalks: Japan 2023 2023/9/14 Taichi Nonoshita

Slide 2

Slide 2 text

氏名 :埜下 太一(ののした たいち) 所属 :株式会社エーピーコミュニケーションズ ロール :クラウドアーキテクト 好きな技術 :自動化、IaC

Slide 3

Slide 3 text

アジェンダ Kubernetes シークレット管理の課題 1 HashiCorp の新しいツール・機能の紹介 2 AKS のシークレット管理 3 まとめ 4

Slide 4

Slide 4 text

HashiCorp Vault とは HashiCorp 提供のシークレット管理ツール • 多様なシークレットに対応 • ポリシー制御によるシークレットアクセス • シークレットアクセスの監査 • Dynamic Secrets

Slide 5

Slide 5 text

Kubernetes シークレット管理の課題 Secret リソースは Base64 エンコードされているだけなので VCS で管理できない Secret リソース username: hoge password: fuga Secret リソースから誰でもシークレットを参照できてしまう デコード apiVersion: v1 kind: Secret metadata: name: secret-sample type: Opaque data: username: aG9nZQ== password: ZnVnYQ==

Slide 6

Slide 6 text

シークレット管理を助けるツール (1) Vault Agent Sidecar Injector • Pod に挿入された Vault Agent コンテナが Vault のシークレットを取得して共有メモリ ボリュームに出力 • Secret リソースは作成されない Pod Agent 共有メモリ ボリューム https://developer.hashicorp.com/vault/docs/platform/k8s/injector App

Slide 7

Slide 7 text

シークレット管理を助けるツール (2) Secret Store CSI Driver • Container Storage Interface (CSI) を使ってシークレットストアから取得した シークレットのボリュームを作成し、Pod にマウント • Secret リソースは作成されない • シークレットを更新しても Pod には反映されない Pod Provider シークレット ボリューム App https://secrets-store-csi-driver.sigs.k8s.io/ Driver

Slide 8

Slide 8 text

Vault Secrets Operator

Slide 9

Slide 9 text

Vault Secrets Operator とは Vault と Kubernetes の間でシークレットを同期する Kubernetes オペレーター • Vault のシークレットを Kubernetes の Secret リソースとして同期 • シークレットの更新を検知して Pod を更新 • HashiCorp Vault の Static Secrets / Dynamic Secrets / PKI に対応 Secret Pod VSO Sync Sync Update Pod は VSO を意識することなく Secret リソースを使用するだけでよい

Slide 10

Slide 10 text

Vault Secrets Operator の使い方 Vault クラスタの準備 Kubernetes に VSO をインストール VSO 用カスタムリソースのデプロイ 1 2 3 • Vault (Community Edition) • Vault Enterprise • HCP Vault • Helm Install コマンドを実行するだけ • 5 種類のカスタムリソース

Slide 11

Slide 11 text

Vault Secrets Operator のカスタムリソース VaultConnection VaultAuth VaultStaticSecret VaultDynamicSecret VaultPKISecret kv-v2 / kv-v1 Azure / AWS / GCP / Database 証明書 Vault クラスタ アドレス情報 認証方法

Slide 12

Slide 12 text

カスタムリソースと Vault の関係 VaultConnection VaultAuth VaultDynamicSecret address vaultConnectionRef vaultAuthRef mount role rolloutRestartTargets destination method mount kubernetes role serviceAccount Kubernetes Auth kubernetes Role dynamic-role Secrets Engines database Role readonly マニフェストを 図で表すと こうなる

Slide 13

Slide 13 text

カスタムリソースと Vault の関係 VaultConnection VaultAuth VaultDynamicSecret address vaultConnectionRef vaultAuthRef mount role rolloutRestartTargets destination method mount kubernetes role serviceAccount Kubernetes Auth kubernetes Role dynamic-role Secrets Engines database Role readonly マニフェストを 図で表すと こうなる

Slide 14

Slide 14 text

Vault Secrets Operator の使い方 Vault クラスタの準備 Kubernetes に VSO をインストール カスタムリソースのデプロイ 1 2 3 • Vault (Community Edition) • Vault Enterprise • HCP Vault • Helm Install コマンドを実行するだけ • 5 種類のカスタムリソース クラウド環境ならHCP Vault がオススメ

Slide 15

Slide 15 text

HCP Vault

Slide 16

Slide 16 text

HashiCorp Cloud Platform (HCP) で提供されるマネージド Vault • セルフマネージドな Vault とほぼ同機能(一部違いあり) • パブリックアクセス/プライベートアクセス可能 • AWS または Azure (2023 年 2 月~) 上に構築可能 HCP Vault とは ― 以前は Azure – HCP Vault 間のプライベートアクセスはできなかった

Slide 17

Slide 17 text

HCP Vault on Azure の構成 HVN と Azure VNet をピアリングすることでプライベートアクセス可能になる • HVN = HashiCorp Virtual Network • HCP リソースは HVN 内に配置される • ピアリング設定は HCP ポータル上の案内に沿って Azure を操作するだけ HVN VNet ピアリング プライベートアクセス https://vault-private-vault-00000000.00000000.z1.hashicorp.cloud:8200/

Slide 18

Slide 18 text

Vault Secrets Operator と HCP Vault を組み合わせて AKS のシークレット管理を考えよう

Slide 19

Slide 19 text

既存の AKS シークレット管理 Secret Store CSI Driver で Azure Key Vault と連携 • Azure Key Vault のシークレット更新を同期可能 • シークレットボリュームと連携した Secret リソースを作成可能 • Secret リソースを環境変数で使用する場合でもボリュームマウントは必要 Azure Portal の AKS 作成画面 マニフェスト apiVersion: v1 kind: Pod metadata: name: pod-sample spec: containers: - name: hoge image : nginx:latest volumeMounts: - name: secret-store mountPath: “/mnt/secret” readOnly: true env: - name: SECRET_USERNAME valueFrom: secretKeyRef: name: foosecret key: username volumes: - name: secret-store csi: driver: secrets-store.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: “azure-sync” Secret リソースを 参照して環境変数を設定 シークレットボリューム をマウント Provider を呼び出して シークレットボリューム 作成

Slide 20

Slide 20 text

VSO と HCP Vault を使った AKS シークレット管理 HVN VNet HCP に HVN、Azure に VNet を作成

Slide 21

Slide 21 text

VSO と HCP Vault を使った AKS シークレット管理 HVN VNet ピアリング HVN と VNet をピアリング

Slide 22

Slide 22 text

VSO と HCP Vault を使った AKS シークレット管理 HVN VNet ピアリング HCP Vault on Azure を作成

Slide 23

Slide 23 text

VSO と HCP Vault を使った AKS シークレット管理 HVN VNet ピアリング Secret Policy Kubernetes Auth Role HCP Vault にシークレット作成、認証/ポリシーを設定

Slide 24

Slide 24 text

VSO と HCP Vault を使った AKS シークレット管理 HVN VNet ピアリング Secret Policy Kubernetes Auth Role AKS を作成

Slide 25

Slide 25 text

VSO と HCP Vault を使った AKS シークレット管理 HVN VNet ピアリング Secret VSO Policy Kubernetes Auth Role VSO をインストール

Slide 26

Slide 26 text

VSO と HCP Vault を使った AKS シークレット管理 HVN VNet ピアリング Secret VSO Vault StaticSecret VaultAuth Vault Connection Policy Kubernetes Auth Role カスタムリソースをデプロイ

Slide 27

Slide 27 text

VSO と HCP Vault を使った AKS シークレット管理 HVN VNet ピアリング Secret Secret VSO Vault StaticSecret VaultAuth Vault Connection Policy Kubernetes Auth Role VSO が Secret リソースを作成する

Slide 28

Slide 28 text

VSO と HCP Vault を使った AKS シークレット管理 HVN VNet ピアリング Secret Secret Pod VSO Deployment Vault StaticSecret VaultAuth Vault Connection Policy Kubernetes Auth Role Deployment リソースをデプロイ

Slide 29

Slide 29 text

まとめ Vault Secrets Operator が提供されました 1 マネージドサービス HCP Vault が Azure 上に 構築可能になりました 2 VSO と HCP Vault を組み合わせた AKS のシークレット管理を紹介しました 3

Slide 30

Slide 30 text

© AP Communications Co., Ltd.