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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  6. CIOPS
    って?

    View full-size slide

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

    View full-size slide

  8. WHATS CIOPS?

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  14. 1. RAW SECRETS
    管理

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  17. RAW SECRETS ON GITHUB
    PROS & CONS
    SECRET

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

    View full-size slide

  18. 2. CI
    でSERECT
    管理

    View full-size slide

  19. 2. CI
    でSERECT
    管理

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

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

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

    View full-size slide

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

    View full-size slide

  25. 3. SEALED SECRECT
    によるCIOPS

    View full-size slide

  26. 3. SEALED SECRECT
    によるCIOPS

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  30. ANSIBLE VAULT

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  34. 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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  39. $ 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 full-size slide

  40. 4. DECRYPT IN APPLICATION

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

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

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

    View full-size slide

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

    View full-size slide