diff --git a/source/docs/standards/software/accounts-with-third-parties.html.md.erb b/source/docs/guidance/software/accounts-with-third-parties.html.md.erb similarity index 100% rename from source/docs/standards/software/accounts-with-third-parties.html.md.erb rename to source/docs/guidance/software/accounts-with-third-parties.html.md.erb diff --git a/source/docs/standards/software/alerting.html.md.erb b/source/docs/guidance/software/alerting.html.md.erb similarity index 100% rename from source/docs/standards/software/alerting.html.md.erb rename to source/docs/guidance/software/alerting.html.md.erb diff --git a/source/docs/standards/software/configuration-management.html.md.erb b/source/docs/guidance/software/configuration-management.html.md.erb similarity index 100% rename from source/docs/standards/software/configuration-management.html.md.erb rename to source/docs/guidance/software/configuration-management.html.md.erb diff --git a/source/docs/standards/software/continuous-delivery.html.md.erb b/source/docs/guidance/software/continuous-delivery.html.md.erb similarity index 100% rename from source/docs/standards/software/continuous-delivery.html.md.erb rename to source/docs/guidance/software/continuous-delivery.html.md.erb diff --git a/source/docs/standards/software/disaster-recovery.html.md.erb b/source/docs/guidance/software/disaster-recovery.html.md.erb similarity index 100% rename from source/docs/standards/software/disaster-recovery.html.md.erb rename to source/docs/guidance/software/disaster-recovery.html.md.erb diff --git a/source/docs/standards/software/dns-hosting.html.md.erb b/source/docs/guidance/software/dns-hosting.html.md.erb similarity index 100% rename from source/docs/standards/software/dns-hosting.html.md.erb rename to source/docs/guidance/software/dns-hosting.html.md.erb diff --git a/source/docs/standards/software/docker.html.md.erb b/source/docs/guidance/software/docker.html.md.erb similarity index 100% rename from source/docs/standards/software/docker.html.md.erb rename to source/docs/guidance/software/docker.html.md.erb diff --git a/source/docs/standards/software/hosting.html.md.erb b/source/docs/guidance/software/hosting.html.md.erb similarity index 100% rename from source/docs/standards/software/hosting.html.md.erb rename to source/docs/guidance/software/hosting.html.md.erb diff --git a/source/docs/standards/software/how-to-do-penetration-tests.html.md.erb b/source/docs/guidance/software/how-to-do-penetration-tests.html.md.erb similarity index 100% rename from source/docs/standards/software/how-to-do-penetration-tests.html.md.erb rename to source/docs/guidance/software/how-to-do-penetration-tests.html.md.erb diff --git a/source/docs/standards/software/incident-management.html.md.erb b/source/docs/guidance/software/incident-management.html.md.erb similarity index 100% rename from source/docs/standards/software/incident-management.html.md.erb rename to source/docs/guidance/software/incident-management.html.md.erb diff --git a/source/docs/standards/software/logging.html.md.erb b/source/docs/guidance/software/logging.html.md.erb similarity index 100% rename from source/docs/standards/software/logging.html.md.erb rename to source/docs/guidance/software/logging.html.md.erb diff --git a/source/docs/standards/software/monitoring.html.md.erb b/source/docs/guidance/software/monitoring.html.md.erb similarity index 100% rename from source/docs/standards/software/monitoring.html.md.erb rename to source/docs/guidance/software/monitoring.html.md.erb diff --git a/source/docs/standards/software/naming-software-products.html.md.erb b/source/docs/guidance/software/naming-software-products.html.md.erb similarity index 100% rename from source/docs/standards/software/naming-software-products.html.md.erb rename to source/docs/guidance/software/naming-software-products.html.md.erb diff --git a/source/docs/standards/software/operating-systems.html.md.erb b/source/docs/guidance/software/operating-systems.html.md.erb similarity index 100% rename from source/docs/standards/software/operating-systems.html.md.erb rename to source/docs/guidance/software/operating-systems.html.md.erb diff --git a/source/docs/standards/software/optimise-frontend-perf.html.md.erb b/source/docs/guidance/software/optimise-frontend-perf.html.md.erb similarity index 100% rename from source/docs/standards/software/optimise-frontend-perf.html.md.erb rename to source/docs/guidance/software/optimise-frontend-perf.html.md.erb diff --git a/source/docs/standards/software/pair-programming.html.md.erb b/source/docs/guidance/software/pair-programming.html.md.erb similarity index 100% rename from source/docs/standards/software/pair-programming.html.md.erb rename to source/docs/guidance/software/pair-programming.html.md.erb diff --git a/source/docs/standards/software/performance-testing.html.md.erb b/source/docs/guidance/software/performance-testing.html.md.erb similarity index 100% rename from source/docs/standards/software/performance-testing.html.md.erb rename to source/docs/guidance/software/performance-testing.html.md.erb diff --git a/source/docs/standards/software/principle-least-access.html.md.erb b/source/docs/guidance/software/principle-least-access.html.md.erb similarity index 100% rename from source/docs/standards/software/principle-least-access.html.md.erb rename to source/docs/guidance/software/principle-least-access.html.md.erb diff --git a/source/docs/standards/software/programming-languages.html.md.erb b/source/docs/guidance/software/programming-languages.html.md.erb similarity index 100% rename from source/docs/standards/software/programming-languages.html.md.erb rename to source/docs/guidance/software/programming-languages.html.md.erb diff --git a/source/docs/standards/software/pull-requests.html.md.erb b/source/docs/guidance/software/pull-requests.html.md.erb similarity index 100% rename from source/docs/standards/software/pull-requests.html.md.erb rename to source/docs/guidance/software/pull-requests.html.md.erb diff --git a/source/docs/standards/software/secrets-acl.html.md.erb b/source/docs/guidance/software/secrets-acl.html.md.erb similarity index 100% rename from source/docs/standards/software/secrets-acl.html.md.erb rename to source/docs/guidance/software/secrets-acl.html.md.erb diff --git a/source/docs/standards/software/secrets-auditing.html.md.erb b/source/docs/guidance/software/secrets-auditing.html.md.erb similarity index 100% rename from source/docs/standards/software/secrets-auditing.html.md.erb rename to source/docs/guidance/software/secrets-auditing.html.md.erb diff --git a/source/docs/standards/software/sending-email.html.md.erb b/source/docs/guidance/software/sending-email.html.md.erb similarity index 100% rename from source/docs/standards/software/sending-email.html.md.erb rename to source/docs/guidance/software/sending-email.html.md.erb diff --git a/source/docs/standards/software/slis.html.md.erb b/source/docs/guidance/software/slis.html.md.erb similarity index 100% rename from source/docs/standards/software/slis.html.md.erb rename to source/docs/guidance/software/slis.html.md.erb diff --git a/source/docs/standards/software/slo.html.md.erb b/source/docs/guidance/software/slo.html.md.erb similarity index 100% rename from source/docs/standards/software/slo.html.md.erb rename to source/docs/guidance/software/slo.html.md.erb diff --git a/source/docs/standards/software/source-code.html.md.erb b/source/docs/guidance/software/source-code.html.md.erb similarity index 100% rename from source/docs/standards/software/source-code.html.md.erb rename to source/docs/guidance/software/source-code.html.md.erb diff --git a/source/docs/standards/software/source-code/use-github.html.md.erb b/source/docs/guidance/software/source-code/use-github.html.md.erb similarity index 100% rename from source/docs/standards/software/source-code/use-github.html.md.erb rename to source/docs/guidance/software/source-code/use-github.html.md.erb diff --git a/source/docs/standards/software/source-code/working-with-git.html.md.erb b/source/docs/guidance/software/source-code/working-with-git.html.md.erb similarity index 100% rename from source/docs/standards/software/source-code/working-with-git.html.md.erb rename to source/docs/guidance/software/source-code/working-with-git.html.md.erb diff --git a/source/docs/standards/software/technical-debt.html.md.erb b/source/docs/guidance/software/technical-debt.html.md.erb similarity index 100% rename from source/docs/standards/software/technical-debt.html.md.erb rename to source/docs/guidance/software/technical-debt.html.md.erb diff --git a/source/docs/standards/software/tracking-dependencies.html.md.erb b/source/docs/guidance/software/tracking-dependencies.html.md.erb similarity index 100% rename from source/docs/standards/software/tracking-dependencies.html.md.erb rename to source/docs/guidance/software/tracking-dependencies.html.md.erb diff --git a/source/docs/standards/software/vulnerability-disclosure.html.md.erb b/source/docs/guidance/software/vulnerability-disclosure.html.md.erb similarity index 100% rename from source/docs/standards/software/vulnerability-disclosure.html.md.erb rename to source/docs/guidance/software/vulnerability-disclosure.html.md.erb diff --git a/source/docs/standards/software/web-application-firewall.html.md.erb b/source/docs/guidance/software/web-application-firewall.html.md.erb similarity index 100% rename from source/docs/standards/software/web-application-firewall.html.md.erb rename to source/docs/guidance/software/web-application-firewall.html.md.erb diff --git a/source/docs/standards/software/working-with-git.html.md.erb b/source/docs/guidance/software/working-with-git.html.md.erb similarity index 100% rename from source/docs/standards/software/working-with-git.html.md.erb rename to source/docs/guidance/software/working-with-git.html.md.erb diff --git a/source/docs/standards/cloud-infra-platform.html.md.erb b/source/docs/standards/cloud-infra-platform.html.md.erb new file mode 100644 index 0000000..0000b5f --- /dev/null +++ b/source/docs/standards/cloud-infra-platform.html.md.erb @@ -0,0 +1,174 @@ +--- +title: All Technology and Digital +last_reviewed_on: 2024-11-04 +review_in: 6 months +--- + +# <%= current_page.data.title %> + +# Cloud Infrastructure and Platform Strategy + +The Cabinet Office Cloud Infrastructure and Platform Strategy defines the Cabinet Office strategy and reasons for choosing hosting providers for digital services and platforms. + +You can use Cloud Infrastructure and Platform Strategy to choose a hosting platform if you intend to build or renew a digital service or platform, either in-house or outsourced. For existing services, there are some guidelines at 4.3 if you are considering a cloud migration. However, details of cloud migration are not in scope for this document. + +The Cabinet Office uses multiple clouds vendors. The decision to adopt a particular cloud for the use case depends on the type of workloads, costs, commercial agreement, sustainability and departmental capabilities. + + +# 1. Amazon Web Service (AWS) + +Amazon Web Service (AWS) is the Cabinet Office strategic hosting platform. You must consider using AWS first to host your digital services and platforms at the OFFICIAL classification (including the SENSITIVE handling caveat, marked OFFICIAL-SENSITIVE). + + +## Why + +Cabinet Office (CO) Digital has invested significant effort in optimising and assuring the AWS infrastructure. This includes: + + + +* Consolidating many AWS contracts into one Enterprise contract across the Cabinet Office. Collectively we get the benefits of economy of scale, discounted rate and enterprise support with AWS. We help the Cabinet Office to cut costs by managing the contract and assuring the suppliers once only. +* Engineering resource to provision and maintain AWS users and accounts with infrastructure-as-code. +* Building in organisational-wide security policies, including access and protective monitoring and enterprise-level security configurations to give a baseline protection for our AWS accounts. Account access logs are by default sent to the Security Operations Centre operated by CDIO to monitor irregular behaviours such as IAM / S3 policy changes out-of-hours, and undesirable configurations such as SSH/RDP ports open to the internet. Related alerts are automatically generated and sent to the account managers. +* Tools to manage the financial and billing across the Cabinet Office better as we have enterprise-level billing visibility across all the accounts. +* Focusing our in-house capabilities into a few things, AWS is one of them. +* We can closely monitor AWS in terms of achieving Government objectives, including [sustainability](https://www.gov.uk/guidance/make-your-technology-sustainable). + +The AWS Enterprise contract with [AWS includes](https://assets.applytosupply.digitalmarketplace.service.gov.uk/g-cloud-13/documents/93253/232745631759684-service-definition-document-2022-05-10-1139.pdf): + + + +* SLA on incident response less than 15 minutes +* infrastructure event management +* a designated technical account manager +* AWS Shield advanced +* [AWS Enterprise Support](https://www.applytosupply.digitalmarketplace.service.gov.uk/g-cloud/services/232745631759684) +* AWS training +* Professional services + +AWS is considered the market leader for[ cloud infrastructure and platform services in the Gartner 2023 magic quadrant](https://aws.amazon.com/blogs/aws/read-the-2023-gartner-magic-quadrant-for-strategic-cloud-platform-services/) in terms of ability to execute and completeness of vision (see Appendix). This is important as the Cabinet Office’s invested strategic platform and supplier needs to be stable, scalable and future-proofed for the foreseeable future. + + +## How + + + +* You must ONLY use the AWS accounts provisioned by CO Digital by using the [Request an AWS Account Tool](https://request-an-aws-account.gds-reliability.engineering/). Contact [platform engineering team](mailto:co-platform-engineering@cabinetoffice.gov.uk) if you require any support or guidance with your AWS account. Your usage is rechargeable to your business unit. +* You must follow the [Architecture Principles](?tab=t.i94zzlkrq3rz) and [Software Development](rrfthtpk2) and [Technical Operation](?tab=t.nhvg71qj736) Guidance to develop in AWS. +* You must use AWS accounts to separate your production and non-production environments, as well as different services and access control. This is to avoid the engineering needs to create security boundaries; and to make it easier to attribute the costs to the right services and functions. +* You must host your new service in AWS London (eu-west-2), or AWS Ireland (eu-west-1) as an alternative. This rule does not apply to global services such as Cloudfront. + +You must consider the reuse of Government and CO Digital common platforms and components rather than building your own whenever appropriate; and incorporate them into your end-to-end architecture. This includes, GOV.UK Notify, GOV.UK Pay, COLA ([Cabinet Office Login App](https://docs.google.com/document/d/1CZlQfy9zQO9AFlTQXJ82Z6gXjA2jMzLshaCw_EGaOuA/edit?usp=sharing)). + + +## Cloud Computing and Architectural Design + +You may use any AWS services to design your architecture according to your service’s needs. You should consider the use of AWS compute resources, and consider them regarding their technical suitability, ease of maintenance and cost effectiveness:- + + + +1. Serverless (Lambda) +2. Container service (ECS, Fargate over EC2) +3. Virtual machines (EC2) +4. Elastic beanstalk + +You should design your architecture with AWS managed services (Cloudfront, SQS, S3, Redshift, RDS, etc.) whenever possible and appropriate. + +The architecture should be easily scalable; hence, we recommend using serverless (Lambda and Fargate) and autoscaling features whenever appropriate. + +You should: + + + +* have technical and security assurance on your architectural design +* optimise your design with resilience, scalability, security and cost reduction in mind +* Forecast your costs and continuously revise your architecture to optimise your spend on infrastructure. For example, turn off development environments out of hours; use reserved instances. +* use the AWS Well-Architected Framework, GuardDuty and audit manager to manage and provide further assurance to your design and operation. +* Adhere to the [cloud cost optimisation standards](https://docs.google.com/presentation/u/0/d/1NHc0TKpXAg-46TW4pHLYhlojCFE9lRkLi5-7qMvZYpU/edit) + + +# 2. Azure + +Azure can be considered a good solution for some use cases for services at the OFFICIAL classification (including the SENSITIVE handling caveat, marked OFFICIAL-SENSITIVE), for example, developing a service to automate in Microsoft/ Azure ecosystems, when Active Directory or Sharepoint are part of the architectural design. + +You should always consider using AWS first to see if it meets your needs to help the Cabinet Office to achieve enterprise-level objectives. However, you can consider Azure: + +* if you are developing a system around the Microsoft ecosystem +* If you would like to introduce resilience and disaster recovery with an additional cloud provider +* for cross-government collaborative projects, where the other department is using Azure +* if you have an existing system that is already on Azure (See Section 6 on guideline for migration) + + +## Why + +We would like to introduce a second strategic public cloud provider to reduce the Cabinet Office reliance on a single vendor. Moreover, CO Digital acknowledges the need to use Azure for automation around the Microsoft ecosystem. + + +## How + +If you would like to use Azure to build a new service, you should contact [CO Enterprise Architecture](https://groups.google.com/a/cabinetoffice.gov.uk/g/co-eaa) for inquiry. The TDA will evaluate your use case and approve or disapprove the use. + + +# 3. Other platforms and considerations + + +## 3.1 Google Cloud (GCP) + +You should NOT build a digital service in GCP. However, the use GCP is permitted ONLY under these conditions: + + + +* for data science that requires some of the advanced GCP tools, including ML/AI and Big query. +* building Single Sign On integration +* for building resilience and disaster recovery +* stress testing your main service/ platform +* with approval of the the Cabinet Office Technical Design Authority + + +## 3.2 Salesforce + +Salesforce should NOT be used as a platform for hosting a high-code digital service, unless you have approval from the Cabinet Office Technical Design Authority. + +Salesforce should be used as a customer relation management (CRM) and a case management system (CMS). Should a user facing frontend interface be required, a bespoke solution built on GOV.UK Design System hosted on the above strategic platforms should be considered first, unless you have approval from the Cabinet Office Technical Design Authority. + +The only exception for using the Salesforce hosting platform is if a simple, static content-page is required as the front page of the Salesforce CRM, where user interaction is minimal; or a simple form to collect information that will be fed into Salesforce. + +This is because: + + + +* the frontend developed in Salesforce Experience does not meet the required standard set in the Public Sector Bodies Accessibility Regulations. However, you can use the Salesforce APEX codes with the GOV.UK Design Systems to meet accessibility requirements +* Salesforce development language, APEX (Java-like), is vendor-specific, and is not a common capability across the Cabinet Office +* difficult to apply automated load tests and pentests on services running on the platform +* Salesforce licensing model is not a good fit for citizen-facing applications + + +## 3.3 Infrastructure migration + +We understand that there are some existing services that are hosted on-prem, in virtual or private clouds that do not currently align with the Cabinet Office strategic platforms. + +While there is an architectural incentive to modernise and update the technology, which usually means lower operational costs, better security, future proofing for further development and improvement; cloud migration should be considered and planned with care, and per use case. You should consider a cloud migration if any of the following are true: + + + +* Your service is considered a [legacy IT system](https://www.gov.uk/government/publications/guidance-on-the-legacy-it-risk-assessment-framework/guidance-on-the-legacy-it-risk-assessment-framework). +* You have a service running on-prem, virtual or private cloud infrastructure +* You have a significant number of virtual machines in these facilities (>20), and hence migration is likely to bring cost benefits to the service. +* You are at a point when you would like to refresh the whole technology, and would like to incorporate user-centric design and development + +You may be able to gain some quick benefits by migrating part of the infrastructure. For example, by using managed SaaS services instead of self-host services such as Postgres database and Tableau server. + +We will need investment for cloud migration; a business and impact analysis should be performed to understand the options, costs, benefits, impact and plan of migration and dual running, and return on investment. The residual risks of not migrating the service, and a plan to revisit the decision in a later day should also be considered. + +Please contact our [legacy IT team](https://groups.google.com/a/digital.cabinet-office.gov.uk/g/co-legacy-it) to arrange an assessment and co-develop a mitigation plan. + + +## 3.4 Secret and top secret classifications + +For services that are above OFFICIAL-SENSITIVE protective marking, a tailored infrastructure and platform solution will be required and are beyond the scope of this strategy. + + +## 3.5 Heroku and Netlify + +You may prototype in the Heroku and Netlify platforms, especially in the Alpha stage of a development. + +However, in most cases, you shall not use Heroku or Netlify to hold any production data without the approval from the Technical Design Authority and the platform is information assured against the use case. diff --git a/source/docs/guidance/software-development-operations.html.md.erb b/source/docs/standards/software-development-operations.html.md.erb similarity index 100% rename from source/docs/guidance/software-development-operations.html.md.erb rename to source/docs/standards/software-development-operations.html.md.erb diff --git a/source/index.html.md.erb b/source/index.html.md.erb index 8975642..15ebe62 100644 --- a/source/index.html.md.erb +++ b/source/index.html.md.erb @@ -8,9 +8,9 @@ title: Cabinet Office Digital Handbook
  • Digital Handbook<%= partial 'partials/nav-general' %>
  • Architecture<%= partial 'partials/nav-architecture' %>
  • Governance<%= partial 'partials/nav-governance' %>
  • -
  • Software Engineering Standards<%= partial 'partials/nav-standards' %>
  • -
  • Cabinet Office Policies<%= partial 'partials/nav-policies' %>
  • +
  • Standards<%= partial 'partials/nav-standards' %>
  • Government Guidance<%= partial 'partials/nav-guidance' %>
  • +
  • Software Engineering<%= partial 'partials/nav-software' %>
  • <% end %> @@ -18,7 +18,7 @@ title: Cabinet Office Digital Handbook

    <%= current_page.data.title %>

    -Welcome to the CO Digital Handbook, your comprehensive guide to understanding and implementing digital the Cabinet Office way through out set of policies, standards, principles, strategies, guidance, and blueprints that we frequently use to ensure our technology is compliance to regulations, policies and follow the industrial and government best practice. +Welcome to the CO Digital Handbook, your comprehensive guide navigating the digital landscape within the Cabinet Office. The handbook contains our principles, policies, standards, strategies, guidance, and blueprints. It serves as your definitive guide to ensuring our digital initiatives are compliant with regulations, aligned with governmental policies, and reflective of the best practices in the industry. This handbook serves as the foundation of our digital transformation efforts, ensuring that we approach our digital initiatives with clarity, consistency, and a shared vision. @@ -34,7 +34,7 @@ The CO Digital Handbook embodies our commitment to excellence and our dedication Let’s embrace digital transformation together! -## Type of Governance Artefacts +## Type of Artefacts in Digital Handbook | Artefact | Definition | Purpose | Adherence | | ---------- | ----------------------------- | ----------------------------- |-------- | @@ -44,7 +44,7 @@ Let’s embrace digital transformation together! | Standard | Specific, detailed rules that must be followed to comply with a policy. | To ensure consistency and quality across various processes and activities within an organisation. | Mandatory within specified scope| | Strategy | A plan of action designed to achieve a specific goal or set of goals. | To provide clear direction and actionable steps to reach desired outcomes, guide decision-making, and align efforts. | Mandatory within specified scope| | Guidance | Advice, recommendations, or best practices to aid implementation. | To support the application of policies and standards, clarify expectations, and provide practical instructions. | Recommended | -| Blueprint & patterns | Comprehensive documents or diagrams outlining the architecture of digital systems. | To provide a clear and structured framework for building and managing digital systems, ensuring alignment with business objectives and technical requirements. | Recommended | +| Blueprint & patterns | Reusable component, architecture and tools. | To provide a clear and structured framework for building and managing digital systems, ensuring alignment with business objectives and technical requirements. | Recommended | When applying the above governance artefacts, it is crucial to understand their applicable scope. For instance, government service standards primarily pertain to bespoke digital services and do not fully extend to purchased technologies. diff --git a/source/partials/_nav-architecture.html.erb b/source/partials/_nav-architecture.html.erb index 978cf8f..bd385d6 100644 --- a/source/partials/_nav-architecture.html.erb +++ b/source/partials/_nav-architecture.html.erb @@ -1,6 +1,5 @@ diff --git a/source/partials/_nav-policies.html.erb b/source/partials/_nav-policies.html.erb deleted file mode 100644 index 393767d..0000000 --- a/source/partials/_nav-policies.html.erb +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/source/partials/_nav-software.html.erb b/source/partials/_nav-software.html.erb new file mode 100644 index 0000000..1075387 --- /dev/null +++ b/source/partials/_nav-software.html.erb @@ -0,0 +1,7 @@ + diff --git a/source/partials/_nav-standards.html.erb b/source/partials/_nav-standards.html.erb index a034451..549d29a 100644 --- a/source/partials/_nav-standards.html.erb +++ b/source/partials/_nav-standards.html.erb @@ -8,9 +8,6 @@
  • How to optimise frontend performance
  • Anticipate security issues using threat modelling
  • --> -
  • Programming Languages
  • -
  • Source Code
  • -
  • Manage Software Dependencies
  • -
  • Vulnerability Disclosure and security.txt
  • -
  • Working wtih Git
  • +
  • Software Development and Operation Standards
  • +
  • Cloud Platform and Infrastructure Strategy