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

Security is a user experience

Avatar for Conjur Conjur
March 16, 2017

Security is a user experience

- Security is user experience - what does that mean?
- Three recommendations
- Things we’ve learned along the way

* Speakers: Kevin Gilpin and Jody Hunt
* Event: Boston DevOps meetup
* Video: https://youtu.be/myleYcwi2PI

Avatar for Conjur

Conjur

March 16, 2017

Other Decks in Technology

Transcript

  1. Confidential. Do Not Distribute. Agenda • Security is user experience

    - what does that mean? • Three recommendations • Things we’ve learned along the way
  2. Security is an experience that affects velocity • DevOps practitioners

    are software users • The quality of their experience (i.e. ease-of-use) affects productivity • Inefficient security practices will impair both Dev & Ops productivity but … foregoing security is not an option • The security threat gets a lot of attention, but the UX threat is real, and not getting enough attention
  3. Principles of a good security experience • Secure by default

    • Easy to understand • Deliver workflows (not tools) • Transparent • Satisfy audit & compliance teams with minimal overhead
  4. Confidential. Do Not Distribute. Three Recommendations 1. Separate Dev, CI

    and Production “concerns” 2. Map the roles and workflows 3. Manage security policies like code
  5. Confidential. Do Not Distribute. Development - The free-for-all area •

    Secure practices should not inhibit Dev velocity • DevOps tools are meant to be collaborative ◦ Anyone can submit code for a pull request ◦ Anyone can contribute scripts to Puppet, Chef, Ansible or Salt ◦ All developers should have read and execute access to Jenkins • These environments are intended to be open to all • Thereby putting them at odds with good security hygiene
  6. Confidential. Do Not Distribute. CI - Brokering development to production

    • Continuous Integration ◦ Constant flux ◦ Always building working code • Continuous Deployment ◦ Conscious decision to share w/ a wider customer base ◦ Hide flux of development from end users • Fences are necessary here ◦ CI != Development
  7. Confidential. Do Not Distribute. Production - the ultimate target of

    an attacker • Don’t conflate build & deploy roles ◦ Keep sensitive info out of Puppet Master and Jenkins ◦ Cuz you have to lock that stuff down ◦ Secrets can inhibit collaboration • Best practice is “no standing access to production” ◦ Grant access to production on an exception basis ◦ Manage the production “control plane” most carefully
  8. Confidential. Do Not Distribute. Example workflow - Conjur build &

    release Operation Privilege Example Roles Create build job “write” on Jenkins group:ci Submit app code change Code review and pull request group:developers Build app debian package “execute” on Jenkins layer:jenkins/executor group:ci Publish debian package “execute” on artifact repository write credentials group:artifacts/pushers group:ci Download debian package “execute” on artifact repository read credentials OR “read” on Jenkins group:everyone
  9. Confidential. Do Not Distribute. Example workflow - Conjur build &

    release Operation Privilege Roles Build appliance container image “execute” on artifact repository read credentials layer:jenkins/executor group:everyone Publish appliance container image “update” on registry webservice role:registry/image-pushers group:ci-admin docker pull conjur-appliance “read” on registry webservice layer:jenkins/executor group:everyone Publish to RubyGems “execute” on release-bot webservice layer:jenkins/executor group:ci-admin
  10. Confidential. Do Not Distribute. Secrets - You’ll go faster with

    good practices in place It’s a fallacy that secrets management slows things down. In fact, it speeds things up because: • Needed secrets are always declared in a repo • There’s only one way to get access to secrets; so, there’s no confusion about how to get access. Goal: make secrets access transparent to development • Centrally vault the secrets • Grant access by role • Rotate important secrets regularly
  11. Confidential. Do Not Distribute. Secrets - Centrally vaulted and managed

    by role • DevOps practitioners are increasingly being targeted ◦ You are a gateway to Production ◦ But, you’ll be reluctant to inhibit velocity • Rule: No secrets are statically deployed to any machines ◦ Aside from a user or machine identity credential • Rule: Developer SSH access uses their own private keys - no SSH key sharing • Rule: Root SSH keys are vaulted and managed by role
  12. Confidential. Do Not Distribute. Manage security policies like code •

    Security policies evolve - version everything ◦ Secrets in version control? NO ◦ Security policies in version control? YES • Track changes, not just to what, but why ◦ Fine if in human readable form for now ◦ Automation templates: CF, Terraform, BladeLogic, Puppet • Enforcement ◦ Chef InSpec - codifies and enforces compliance w/ above • If you don’t do this, things will get messy quickly ◦ Piecemeal changes made via UI tools ◦ No audit trail, no repeatability, no reference for compliance checking • Security-policy-as-code is the end goal ◦ Automated execution ◦ Automated enforcement ◦ Automated compliance checking • Helps w/ resilience overall ◦ Keeps Dev functions separate from Deployment ◦ Tracks workflow evolution
  13. Confidential. Do Not Distribute. Things we got right the first

    time • Separated AWS accounts into CI, Dev, Prod. ◦ It sucks to untangle that if you’ve already mixed up the concerns • No SSH key sharing from day 1 • No hard coded secrets in Jenkins
  14. Confidential. Do Not Distribute. Things that took longer to figure

    out • A good workflow for registering new secrets and applications. • How to separate build and release concerns ◦ v0 - General purpose Jenkins executor ◦ v1 - Remote web service (release-bot) ◦ v2 - Privileged Jenkins executor • Secrets rotation - still a work in progress ◦ Difficult for things like 3rd party apps • etc
  15. Confidential. Do Not Distribute. Confidential. Do Not Distribute. In Summary….

    • Principles ◦ Secure by default ◦ Easy to understand ◦ Deliver workflows (not tools) ◦ Transparent ◦ Satisfy audit & compliance teams with minimal overhead • Recommendations ◦ Separate Dev, CI and Production “concerns” ◦ Map the roles and workflows ◦ Manage security policies like code
  16. Confidential. Do Not Distribute. If you want to learn more...

    Conjur Blog: https://www.conjur.com/blog Come work with us, we’re hiring! https://www.conjur.com/careers