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

Everything as Code

Everything as Code

A talk to the Integrated Enterprise Architecture conference about the influence of software eating the world, and the changing role of architecture as a discipline.

Gareth Rushgrove

March 02, 2016

More Decks by Gareth Rushgrove

Other Decks in Technology


  1. If Amazon release to production every 11.6 seconds, how often

    does the Change Approval Board meet? Gareth Rushgrove http://assets.en.oreilly.com/1/event/60/Velocity%20Culture%20Presentation.pdf
  2. 30x Gareth Rushgrove More frequent deployments Faster lead times than

    their peers 200x 2015 State of DevOps Report
  3. 60x Gareth Rushgrove Change success rate Faster mean time to

    recover 168x 2015 State of DevOps Report
  4. “We went from all-hands-on- deck, war-room sort of deployments to

    non-events” Gareth Rushgrove Jez Miller, Heartland Payment Systems
  5. Siloed teams Long cycle times Poor visibility Manual processes Gareth

    Rushgrove Cross-functional teams Short cycle times Fast feedback Automated processes
  6. Source code can be checked into version control, so clear

    understanding of who changed what and when Gareth Rushgrove
  7. Gareth Rushgrove Write the code Check syntax Check style Unit

    tests Acceptance tests Deploy Deploy to staging Preflight checks
  8. Gareth Rushgrove Write the code Check syntax Check style Unit

    tests Acceptance tests Deploy Security tests
  9. Gareth Rushgrove Acceptance tests Deploy Security tests Manual review by

    security Automated security tests Automated security tests Is this a high risk change?
  10. What is a high risk change? - Change to firewall

    policy? - Change to authentication code? - Out of hours change? - New user added? Gareth Rushgrove
  11. If you don’t know the state of your system how

    can you trust a given change will work? Gareth Rushgrove
  12. - Cut down provisioning time - Single way of changing

    all systems - Detect and remediate config drift Gareth Rushgrove
  13. describe 'azure_vm_classic when creating a machine' do include_context 'with certificate

    copied to system under test' include_context 'with a known name and storage account name' include_context 'with known network' it_behaves_like 'an idempotent resource' include_context 'destroy left-over created resources after use' it 'should have the correct size' do expect(@machine.role_size).to eq(@config[:optional][:size]) end it 'should have the correct deployment name' do expect(@machine.deployment_name).to eq(@config[:optional][:deployment]) end it 'should have the correct cloud service name' do expect(@machine.cloud_service_name).to eq(@config[:optional] [:cloud_service]) end Reusing unit testing frameworks to automate manual checks
  14. Higher-level tools exist with more human language interfaces Scenario: The

    application should not contain SQL injection vulnerabilities Meta: @id scan_sql_injection @cwe-89 Given a scanner with all policies disabled And the SQL-Injection policy is enabled And the attack strength is set to High And the alert threshold is set to Low When the scanner is run And the XML report is written to the file sql_injection.xml Then no Medium or higher risk vulnerabilities should be present
  15. - Reduce cost and time per release - Make testing

    repeatable - Make running tests accessible Gareth Rushgrove
  16. Discovered open port 22/tcp on Completed Connect Scan at

    07:09, 3.31s elapsed (12 total ports) Nmap scan report for www.puppetlabs.com ( Host is up (0.082s latency). rDNS record for li924-113.members.linode.com PORT STATE SERVICE 20/tcp filtered ftp-data 21/tcp filtered ftp 22/tcp open ssh 23/tcp filtered telnet 25/tcp filtered smtp 80/tcp open http 110/tcp filtered pop3 443/tcp open https 512/tcp filtered exec 522/tcp filtered ulp 1080/tcp filtered socks 8080/tcp open http-proxy Standard nmap output requires manual analysis
  17. it 'has only a limited number of open ports' do

    expect(@open_ports.count).to eq(3) end it 'exposes a web server' do expect(@open_ports).to include('80/tcp') expect(@open_ports).to include('443/tcp') end it 'exposes an SSH server' do expect(@open_ports).to include('22/tcp') end it 'rejects email traffic' do expect(@closed_ports).to include('25/tcp') end Using a unit testing framework we can make explicit assertions
  18. www.puppetlabs.com from has only a limited number of open

    ports (FAILED - 3) exposes a web server exposes an SSH server rejects accept email traffic (FAILED - 4) Anyone can run the tests and understand what is expected and what is currently broken
  19. (expect (every? redhat? (facts "operatingsystem"))) A one line test to

    check all machines are using the permitted Operating System
  20. SELECT uid, name FROM listening_ports l, processes p WHERE l.pid=p.pid;

    Different tools and interfaces exist. OSquery for example uses SQL to query infrastructure state
  21. Non-architecture savvy developers introduce more defects into architecturally- significant code

    snippets than architecture-savvy developers. Gareth Rushgrove
  22. When software architects write code, the number of defects in

    the tactical fragments of the systems will be reduced. Gareth Rushgrove
  23. The doesn’t mean you should have written more code. Software

    and architecture are changing Gareth Rushgrove
  24. Failure cases are hard. Controls need to operate at the

    speed of software. Gareth Rushgrove
  25. As people outside the control loop architects are well positioned

    to introduce the right level of friction Gareth Rushgrove