Slide 1

Slide 1 text

2019/07/30 ANSIBLE NIGHT LT ANSIBLE VAULT FOR CIOPS Keke Twitter: @_k_e_k_e

Slide 2

Slide 2 text

$ WHOIAM KEISUKE YAMASHITA TWITTER: @_k_e_k_e 新卒で Merpay.inc SRE Team Chaos Engineering, Cashless are my main interest

Slide 3

Slide 3 text

ANSIBLE VAULT シークレットを Encrypt ・Decrypt できるCLI ツール

Slide 4

Slide 4 text

PRESENTATION AGENDA 皆さんに伝えたいこと CIOps というContinuous Delivery のパターン Ansible Vault を使ったCIOps 運⽤のTips

Slide 5

Slide 5 text

場所に応じた最⼩限の権限をつけよう どこになんの権限が必要であるかを考えて権限付与 万が⼀のケースを考えよう 例: VM に⼊られるとprintenv などを使って簡単にパスワー ドを取れる CLI ツールとしてAnsible Vault は便利 CI とローカルでEncrypt ・Decrypt するには使い勝⼿がいい TAKEAWAY FOR CIOPS

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

CIOPS って?

Slide 9

Slide 9 text

継続的デリバリーの主なPOINT AUTOMATION リリース作業をなくす。 ヒューマンエラーを防ぐ。 GET FEEDBACK すぐデプロイをして、ユーザーに価値を届ける。 バグを⾒つけるまでの時間を短縮。 ACCERATE WITH MICROSERVICE マイクロサービス アーキテクチャに伴い、デプロイ数の急増するので スケールさせるには継続的デリバリーが必要。

Slide 10

Slide 10 text

WHATS CIOPS?

Slide 11

Slide 11 text

WHATS CIOPS? CD の⼀つのパターン deploy trigger push

Slide 12

Slide 12 text

WHATS CIOPS? CD の⼀つのパターン deploy trigger push Deploy by CI

Slide 13

Slide 13 text

WHATS CIOPS? CD の⼀つのパターン deploy trigger push Some secrets Deploy by CI

Slide 14

Slide 14 text

どうやってCIOPS のために SECRET 管理するの?

Slide 15

Slide 15 text

$ cat .env DB_USER: root DB_PASS: tsuyoi_password_ni_sitene DB_NAME: master EXTERNAL_ACCESS_TOKEN: gaibu_ni_access_suru_token

Slide 16

Slide 16 text

1. RAW SECRETS 管理

Slide 17

Slide 17 text

RAW SECRETS 管理 1. $ git push deploy trigger push

Slide 18

Slide 18 text

RAW SECRETS 管理 1. $ git push deploy trigger push

Slide 19

Slide 19 text

RAW SECRETS ON GITHUB PROS & CONS SECRET へ 誰でもアクセスできる Github が漏出したら 終わり コミットに永遠に残り Revoke するのが難しい

Slide 20

Slide 20 text

2. CI でSERECT 管理

Slide 21

Slide 21 text

2. CI でSERECT 管理

Slide 22

Slide 22 text

2. CI 上でSERECT 管理 Git にはSerect は載せない $ echo ".env" >> .gitignore

Slide 23

Slide 23 text

2. CI 上でSERECT 管理 config deploy trigger push

Slide 24

Slide 24 text

2. CI 上でSERECT 管理 CI に設定 ( この例ではCircleCI)

Slide 25

Slide 25 text

SEALED SECRETS ON CI PROS & CONS 何かしらの⽅法で Dev にPassword を 渡さないといけない CI にPassword の 漏洩リスクあり Git には Secret はない Password 変更があると CI も変更しないといけない

Slide 26

Slide 26 text

3. SEALED SECRECT によるCIOPS secrets write Admin Dev Dev Dev Dev Dev Read

Slide 27

Slide 27 text

3. SEALED SECRECT によるCIOPS

Slide 28

Slide 28 text

3. SEALED SECRECT によるCIOPS

Slide 29

Slide 29 text

3. SEALED SECRECT によるCIOPS deploy trigger push deploy trigger Encrypt Decrypt config password password password

Slide 30

Slide 30 text

SECRETS ON CI PROS & CONS 何かしらの⽅法で Sercet を共有しないといけない CI に漏洩リスクあり Git に漏洩リスクはなく デプロイできる

Slide 31

Slide 31 text

3. SEALED SECRECT によるCIOPS password write Admin Dev Dev Dev Dev Dev Read

Slide 32

Slide 32 text

ANSIBLE VAULT

Slide 33

Slide 33 text

ANSIBLE VAULT シークレットを Encrypt ・Decrypt できるCLI ツール

Slide 34

Slide 34 text

$ cat .env DB_USER: root DB_PASS: tsuyoi_password_ni_sitene DB_NAME: master EXTERNAL_ACCESS_TOKEN: gaibu_ni_access_suru_token

Slide 35

Slide 35 text

Encrypt 1. $ ansible-vault encrypt .env.yml => New Vault password: [ パスワード⼊れる] => Confirm Vault password: [ 再度パスワード⼊れる] $ANSIBLE_VAULT;1.1;AES256 62663931376163656235343237376235636664303733643139346565326633336664643938333164 6635393466386336383133316262343033363838373939380a343339346136353935303938373937 38386664323865633431313430666532303731346361346331656565643236386435366535346239 ....

Slide 36

Slide 36 text

2. Decrypt $ ansible-vault decrypt .env.yml => New Vault password: [ パスワード⼊れる] => Confirm Vault password: [ 再度パスワード⼊れる] DB_USER: root DB_PASS: tsuyoi_password_ni_sitene DB_NAME: master EXTERNAL_ACCESS_TOKEN: gaibu_ni_access_suru_token

Slide 37

Slide 37 text

3. SEALED SECRECT によるCIOPS Encrypt password $ ansible-vault encrypt .env.yml

Slide 38

Slide 38 text

3. SEALED SECRECT によるCIOPS push Encrypt password

Slide 39

Slide 39 text

3. SEALED SECRECT によるCIOPS trigger push trigger Encrypt Decrypt config password password password $ ansible-vault decrypt .env.yml

Slide 40

Slide 40 text

3. SEALED SECRECT によるCIOPS deploy trigger push deploy trigger Encrypt Decrypt config password password password

Slide 41

Slide 41 text

$ ssh -p 64535 100.xxx.yyy.zzz <= ノードに⼊る $ printenv DB_NAME=master DB_PASSWORD=tsuyoi_password_ni_sitene DB_USER=root EXTERNAL_ACCESS_TOKEN=gaibu_ni_access_suru_token

Slide 42

Slide 42 text

4. DECRYPT IN APPLICATION

Slide 43

Slide 43 text

4. DECRYPT IN APPLICATION deploy trigger push deploy trigger IAM secrets IAM secrets secrets IAM secrets Authn/z keys

Slide 44

Slide 44 text

3. SEALED SECRECT によるCIOPS deploy trigger push deploy trigger IAM secrets IAM secrets secrets IAM secrets Authn/z keys Deploy KMS

Slide 45

Slide 45 text

$ cat .env.dev.yml $ ansible-vault encrypt .env.dev.yml --out .env.dev.yml.enc . --vault-password-file=<(echo "password")

Slide 46

Slide 46 text

$ STAGE="prod" $ ansible-vault encrypt .env.$STAGE.yml --out .env.$STAGE.yml.enc - -vault-password-file=<(echo $PASSWORD)

Slide 47

Slide 47 text

HASHICORP VAULT Secret を管理するためのソフ トウェア。最近、 Kubernetes と合わせて使わ れるケースが多い。 GOOGLE BERGLAS Google Cloud Storage と Cloud KMS での SealedSecret BITNAME SEALED SECRETS Kubernetes 上でDecrypt で きるSealedSecret を実現する コントローラー Compare

Slide 48

Slide 48 text

場所に応じた最⼩限の権限をつけよう どこになんの権限が必要であるかを考えて権限付与 万が⼀のケースを考えよう 例: VM に⼊られるとprintenv などを使って簡単にパスワー ドを取れる CLI ツールとしてAnsible Vault は便利 CI とローカルでEncrypt ・Decrypt するには使い勝⼿がいい TAKEAWAY FOR CIOPS

Slide 49

Slide 49 text

THANK YOU