HashiCorpのWebinarで登壇した際の資料です。 Webinar動画はこちらから! https://www.hashicorp.com/events/webinars/how-to-get-vault-secrets-into-kubernetes-jp
Copyright © 2021 HashiCorpVaultに格納したシークレットをKubernetesから活用する方法
View Slide
Copyright © 2021 HashiCorp草間一人Sr. Solutions Engineer@jacopenKazutoKusama
Kubernetesのシークレット管理どうやってますか?
Kubernetesでアプリを作るときPodAppPodDBCloudServices
Kubernetesでアプリを作るときPodAppPodDBCloudServicesAccess KeySecret Access KeyUsernamePasswordSecretAccess KeySecret Access KeyUsernamePassword
KubernetesのSecretkind: SecretapiVersion: v1data:username: YWRtaW4=password: MWYyZDFlMmU2N2Rmmetadata:annotations:kubectl.kubernetes.io/last-applied-configuration: { ... }creationTimestamp: 2016-01-22T18:41:56Zname: mysecretnamespace: defaultresourceVersion: "164619"uid: cfee02d6-c137-11e5-8d73-42010af00002type: Opaque
KubernetesのSecretkind: SecretapiVersion: v1data:username: YWRtaW4=password: MWYyZDFlMmU2N2Rmmetadata:annotations:kubectl.kubernetes.io/last-applied-configuration: { ... }creationTimestamp: 2016-01-22T18:41:56Zname: mysecretnamespace: defaultresourceVersion: "164619"uid: cfee02d6-c137-11e5-8d73-42010af00002type: Opaque“admin” “1f2d1e2e67df”取扱注意!! Base64エンコードされているだけ。
せっかくGitOpsにしたのにSecretSecretDeploymentServicePVCここは自動化Secret入れるのは手動
せっかくGitOpsにしたのにSecretSecret間違えてgitにコミットしちゃった!あの鍵って誰が管理してるの?
Secret sprawlバラバラに保管アプリごと/チームごとバラバラのアクセスフローアクセスのコントロールができない
Secretのジレンマ▪ Secretが大事なことは誰もが分かってる▪ だから既存の自動化フローには載せず、特別対応– 一部の人だけが手元で厳重に管理– 権限を絞ったプライベートリポジトリで管理– 権限を絞ったSpreadsheetで管理▪ しかしこの特別対応こそが、Secret Sprawlを生みセキュリティを低下させる– 人間が把握できる範囲には限界がある– 人間はミスをする
解決策
アイデンティティベースのシークレットと暗号化の管理システムKey Valueのような静的なシークレットだけでなく、データベースや各クラウドプロバイダーのキーを動的に生成したり、PKIとして使えたり、SSH鍵の署名ができたり、暗号化ができたり。どの環境でも使えますが、Kubernetesと組み合わせても、とても便利!
やりたいことPod格納取得このフローを、安全に、手間がかからない形で実現したい
DEMO
やりたいことPod格納取得どうやってVaultから値を取得するかどうやってPodに値を渡すか
Kubernetes Auth Method
Kubernetes Auth MethodServiceAccountauth/kubernetes/login+ service account tokenTokenReview APIstatus.authenticated: trueauth.client_token/v1/secret/fooReturn secret
Kubernetes & Vaultアプリから直接VaultVault agentinit containerVault agentsidecarVault CSIProviderExternalSecret公式 コミュニティ
Vault Agent InjectorVault Agent InjectorをKubernetes上にセットアップ。Helmでインストール可能Mutating webhookでPodにInitcontainerやSidecarを追加してくれる
Vault CSI ProviderKubernetes Secrets Store CSI DriverSecretを、KubernetesのCSI (Container Storage Interface)を使って、ボリュームとしてPodにマウントする仕組み。Vault CSI Provider↑をHashiCorp Vaultで使うためのProviderHelmでインストール可能
Sidecar or CSI?https://www.hashicorp.com/blog/kubernetes-vault-integration-via-sidecar-agent-injector-vs-csi-provider
Kubernetes External Secretshttps://github.com/external-secrets/external-secretsExternal SecretsControllerSecretsfoo=barfoo=barkube-apiserverExternalSecrets
Thank You[email protected]www.hashicorp.com