Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ansible Vault for CIOps

Keke
July 30, 2019

Ansible Vault for CIOps

Keke

July 30, 2019
Tweet

More Decks by Keke

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  6. View Slide

  7. View Slide

  8. CIOPS
    って?

    View Slide

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

    View Slide

  10. WHATS CIOPS?

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  16. 1. RAW SECRETS
    管理

    View Slide

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

    View Slide

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

    View Slide

  19. RAW SECRETS ON GITHUB
    PROS & CONS
    SECRET

    誰でもアクセスできる Github
    が漏出したら
    終わり
    コミットに永遠に残り
    Revoke
    するのが難しい

    View Slide

  20. 2. CI
    でSERECT
    管理

    View Slide

  21. 2. CI
    でSERECT
    管理

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  25. SEALED SECRETS ON CI
    PROS & CONS
    何かしらの⽅法で
    Dev
    にPassword

    渡さないといけない
    CI
    にPassword

    漏洩リスクあり
    Git
    には
    Secret
    はない Password
    変更があると
    CI
    も変更しないといけない

    View Slide

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

    View Slide

  27. 3. SEALED SECRECT
    によるCIOPS

    View Slide

  28. 3. SEALED SECRECT
    によるCIOPS

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  32. ANSIBLE VAULT

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  36. 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

    View Slide

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

    View Slide

  38. 3. SEALED SECRECT
    によるCIOPS
    push
    Encrypt
    password

    View Slide

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

    View Slide

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

    View Slide

  41. $ 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

    View Slide

  42. 4. DECRYPT IN APPLICATION

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  47. HASHICORP VAULT
    Secret
    を管理するためのソフ
    トウェア。最近、
    Kubernetes
    と合わせて使わ
    れるケースが多い。
    GOOGLE BERGLAS
    Google Cloud Storage

    Cloud KMS
    での
    SealedSecret
    BITNAME SEALED
    SECRETS
    Kubernetes
    上でDecrypt

    きるSealedSecret
    を実現する
    コントローラー
    Compare

    View Slide

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

    View Slide

  49. THANK YOU

    View Slide