This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

Plan

The most important thing we can do before writing a single line of code is to clarify the division of responsibilities between us and the customer, as well as the classification of the solution and data. What requirements does the customer have, and what requirements comes from the government or other parties? Application security (AppSec) resources should already be part of the team in this phase to ensure that we meet security requirements and expectations.

We must also outline what we will do when a security incident occurs - what requirements are we facing, what is needed for successful disaster recovery, backup, and similar measures, and what will the consequences of downtime be for the customer?

1 - Roles and responsibilities

A lack of clarity in our responsibilities and those of others can have huge consequences for a project, so this must be clarified beforehand. It is especially important if companies other than us and the client are involved, as tasks and roles tend to fall through the cracks because everyone thinks “someone else” will handle it.

Bouvet conducts development projects in many different ways, where we take more or less responsibility for project management, planning, development, quality assurance, and not least the operation and management of the solution. We also involve our own, the client’s, and third-party equipment both during development and management of the solution.

Regardless of how the project is executed, it is important that we are aware of how responsibilities are divided. This should be regulated in the agreement with the client, so we must ensure that we:

  • Have control over our roles and responsibilities
  • Have contact points with all involved parties
  • Can follow up on deviations quickly so as to avoid misunderstandings or problems later in the project cycle
Note

The role delivery manager is responsible for security in the delivery, and is responsible for following up on any security concerns.

Operation and Management - Bouvet

The project may also fall under our ISO certifications. This is especially the case if we use our own equipment or infrastructure for development, operations, or management on behalf of the client. If this is the case, it means we have greater overall responsibility for the security of the solution, and it is important that the delivery team is aware of this.

All resources managed by the delivery team must be handled in line with all other infrastructure in Bouvet, so the team must have routines for patching and maintenance or ensure that this is handled. Be aware that client resources and data must be handled with separate backup routines so we do not mix data across clients or with our own internal data. Feel free to contact Internal IT & Security to see what they can deliver and assist with to simplify delivery and management.

Bouvet’s Statement of Applicability/Declaration of Application (SOA) for ISO 27001 and ISO 42001 address various controls related to information security and how we should relate to them. If we take on this role, your regional quality manager can assist with advice and guidance to ensure that our responsibilities are met.

Operation and Management - Client or Third Party

If we are only responsible for the development of the solution, it is important that we have defined the interface between us and the organization that takes over and continues to operate the solution:

  • How should handover occur
  • How do we ensure that the necessary hardware and systems have been set up and configured correctly
  • How do we ensure that all parties are aware of the requirements related to deployment, operational incidents, error corrections and similar
Tip

Document the roles and responsibilities and other relevant information in the source code system along with other documentation. This increases its visibility and everyone always knows where the information is.

Use of AI

If AI is included in the delivery, you must also clarify how this is regulated in the agreement. AI opens up many opportunities but also introduces new risks in addition to amplifying existing risks, particularly related to privacy. The AI Act is not yet enacted in Norway, but it is expected to come in the near future, and projects that build solutions covered by this should ensure compliance with the proposed AI Act in Norway.

AI as a tool

If you are going to use AI tools, you must ensure that this has been clarified with the client and that the agreement takes it into account. AI can be a fantastic tool, but it also opens up scenarios where we or the client can be harmed if responsibility and use are not clarified. If our equipment or infrastructure is to be used for new tools, this must be clarified with Internal IT & Security before the project starts so that licenses and necessary risk assessments can be carried out.

More information

2 - Data and Classification

Most organizations operate with various classification levels for both data and systems. The classification level dictates how data is used, where it is stored, and who can access it. These are key requirements for any development project and must be clarified in advance.
In short

Most organizations have different classification levels for both data and systems. The classification is often based on how data is used, where it is stored, and who can access it. This is a key requirement for any development project and must be clarified in advance.

Classification

Most organizations have routines and processes for data classification, typically distinguishing between these or similar levels:

  • Open
  • Internal
  • Confidential
  • Restricted

Depending on this classification, there may be different requirements for securing data. Open data typically has no restrictions, while data classified as “restricted” may have limitations such as:

  • strict requirements for access
  • information can only be processed or stored in approved systems
  • requires multi-factor authentication before access
  • has restrictions regarding the use of cloud services or the geographical location of where data is stored

This needs to be clarified with the client at the start of the project to ensure compliance. If the client does not use data classifications, one should still assess the sensitivity of the data to be processed to ensure that necessary measures are implemented.

Privacy

If the delivery team is to handle personally sensitive information, it is important that the team familiarizes itself with the requirements surrounding this. The Norwegian Data Protection Authority has published a guide for “Software development with built-in privacy” (in Norwegian) which provides useful insight into the issue.

Important

Norway has implemented GDPR into Norwegian law through Personopplysningsloven. All our deliveries have to consider the definitions and requirements which follow from this. Also remember that we are likely to be subject to data processing agreements that might carry even stricter requirements.

The purpose of the GDPR is to ensure the privacy rights of individuals through regulating the use of Personally Identifiable Information (PII). The GDPR has a number of requirements that define how PII can be used and for what. PII is defined as

“any information relating to an identified or identifiable natural person (‘data subject’); an identifiable natural person is one who can be identified, directly or indirectly, in particular by reference to an identifier such as a name, an identification number, location data, an online identifier or to one or more factors specific to the physical, physiological, genetic, mental, economic, cultural or social identity of that natural person”

Privacy may look like a complex and difficult topic, but generally

  • Any piece of information that can be tied to an individual is PII
  • Any use of PII requires a valid basis for processing it
  • The data subject must consent to the use of the data
  • Data minimization is a requirement - do not collect information unless it is needed
  • The information should have an end-of-life - a date where you consider deleting it. Do not store it for longer than needed.
  • The user has a right to be “forgotten” - also if you restore from a previous backup

If we process this type of information on behalf of clients, they will normally require that we sign a data processing agreement. If this is not in place, it must be discussed with the client’s representative.

Data for Use During Development and Testing

If data is used in connection with development and testing, it is important to consider classification and sensitivity. Development environments often have a different level of security than production environments, and this practically means that we cannot always use real data for development.

The team must check the need for anonymizing the data before it is used outside the production environment, so as to maintain the need for data amount, filling rate, and quality while ensuring that the client’s data does not go astray.

This is especially important if development occurs in Bouvet’s infrastructure but with a production environment located at the client’s site. In such cases, it is vital that Bouvet has documented routines regulating where and how data is stored and used, and how and when it should be deleted. This must be clarified in consultation with the client so that there is no doubt about responsibility, duties, and risk.

Artificial Intelligence and Data

If you are building solutions with, or by means of artificial intelligence, the proposed AI law imposes requirements for data quality, especially for high-risk systems. This is specifically mentioned for these as they can be used in situations that could have serious consequences for individuals beyond the privacy considerations described in the Personal Data Act. AI systems that are not classified as high-risk must also comply with requirements for marking information produced by AI.

Another important consideration is learning in the AI model: Few companies will accept that AI models learn from their data, as there have been several examples of training data being reconstructed afterwards. The use of enterprise agreements often limits the AI model’s ability to learn from customer data - this is a point that must be verified by us when we build solutions.

Be aware that the Personal Data Act also applies to AI systems. When evaluating vendors, we have seen several cases where AI vendors provide services outside the EU, where extra careful assessments and reviews are necessary to ensure that we comply with the requirements laid down in the law.

If you have questions about using AI, you can create a case through BSD or on #ai (Slack).

More Information

3 - Business Continuity

If a catastrophic event occurs, we must know who to contact and what requirements the solution and delivery team must adhere to. This not only includes typical availability requirements but also how long recovery can take, how it should be done, and what is an acceptable data loss.

Business Continuity Planning is not an IT-technical subject. But it is our responsibility as suppliers of an IT system to remind the customer that the system can become unavailable. The answer from this planning will help describe the requirements for the solution’s robustness and security level, and is crucial for finding the right balance of cost and performance for the system.

Here it is important to consider

  • The criticality of the solution
  • Possible workarounds if the solution is unavailable
  • Consequences or extra work resulting from unavailability or when the solution becomes available again.

Customer Expectations

Do we have a Service Level Agreement with the customer that regulates uptime, availability, and similar, or does the customer have implicit expectations for this?

This must be clarified so that the team is aware of the consequences of downtime. In many projects, cloud components are used, where not all variables are under one’s control. Therefore, it is important early in the project to clarify the actual needs with the customer. We can ensure redundancy on all fronts if the customer wants it, but it will then cost accordingly.

Incident Management

All customers in Bouvet should have a defined contact point for incidents in Kunder (CRM). If there are other contact points from the team to the customer, such as a security operations center (SOC) or similar, it is also wise to document this so that incidents can be resolved as quickly as possible.

If an incident occurs and the customer or others need to contact the team, the usual practice is for the delivery manager to be the formal contact point in the Bouvet team.

Backup

Backup is important in all projects. Even if we do not have responsibility for the operation of infrastructure, source code systems, or other tools in many projects, we should be familiar common backup strategies, so that we can design and implement a solution that allows for these.

If we are responsible for operations, we are also responsible for ensuring that backups are performed. Common terms here are:

  • Recovery Time Objective (RTO) - acceptable time to achieve normal state after a failure
  • Recovery Point Objective (RPO) - acceptable data loss after a failure (measured in time)

The backup and recovery solution must be designed based on these requirements, and we must ensure that this is maintained. Together with the customer, we must determine:

  • How much?
    • Which data and systems should be subject to the backup regime. Can we differentiate between them?
  • How often?
    • Should we take backups once a week, every night, or every hour?
  • How far back?
    • How long should we store the backups?

A common approach to backup is to run:

  • Daily backups - stored for 30 days
  • Weekly backups - stored for 6 months
  • Monthly backups - stored for 2 years

It is also important to consider where the backups are stored, so that one is best prepared for catastrophic events. This can be solved by having offline and offsite backups, i.e., backups stored on, for example, tape and kept at a different physical location than other backups.

Test!

Backups that are not tested have no value - implement a strategy that includes testing restore from backup!

Disaster Recovery

Disaster Recovery in the planning phase involves developing a plan for what should be done to return to normal state as quickly as possible. It can be useful to think of this as “actions on,” i.e.; “If X happens, we do Y”.

Recovery

It will not be necessary to recreate services in all disaster events. Often, less extensive and manual error correction can suffice. Regardless, one should always have a plan for complete recovery. Having this can save you in most situations.

  • Physical infrastructure (fire, flood, earthquake, etc.)
    • Do we have infrastructure elsewhere we can use?
    • Can we move to an alternative data center?
  • Virtual infrastructure
    • Can infrastructure be recreated correctly and quickly enough?
    • Document resources, dependencies, and operational procedures
    • The use of Infrastructure as Code (IaC) will be a significant factor here
  • Data and databases
    • Total / bulk recovery: How do you recover large amounts of data / entire volumes?
    • Individual files: How do you recover a single file, table, row or column?
  • Support systems
    • Remember that support systems can play an important role in the overall system. These must also be replaceable or recoverable in the event of incidents
    • Examples: Git, CI pipeline, logging, and monitoring

Scenarios to Discuss

  • Deleted service: How do you restore a service that has been deleted?
  • Corrupt service: Do you repair or restore a VM or other services with problems?
  • Unavailable service: What happens if the services become unavailable? Here you need the definition of what is temporary / short-term downtime. Should you deploy a new service, do you already have one running as a hot-swap, or is it okay without one for a period?
  • Compromised security: How do you handle it when a password has been leaked in some way?
  • Expired password: How do you resume operations if a password or certificate has expired?
  • Compromised identity / service user: What do you do if a managed identity or a service user has been compromised?
  • Unavailable passwords: What do you do if the key vault service in the region you use goes down? Do you have backup and failover in another region?
  • Malware: How do you recover the system after a malware attack? Do you need a partial or total rebuild of all services?
  • Confidentiality breach: How do you handle someone gaining access to the service(s) you operate?
  • Compromised admin: Do you need to plan for what happens if the owner of the subscription deletes your entire Azure subscription?
  • Critical vulnerability: What happens when someone discovers a critical vulnerability in your application? It may be wise to have protocols ready for when you need to decide whether to shut down the service.

More Information

4 - Using Artificial Intelligence

The use of artificial intelligence (AI) has exploded in recent years, and the technology has advanced to the point where it can be a useful tool for brainstorming solutions, writing, debugging, or evaluating code. But what does this mean for security?

This page is about the use of AI in the development cycle, not the general use of AI solutions. The goal is to use AI as a productivity tool without losing control of security, quality, and traceability.

Use of AI tools

Remember that Bouvet and most clients have guidelines for the use of AI that must be followed. It is not permitted to use AI tools without explicit approval from Bouvet or the client.

What we are allowed to use

On Bouvet equipment, we can only use AI tools that are explicitly permitted in Bouvet’s AI policy. On client equipment, we can only use tools that the client has approved.

The reason is simple: AI tools often process sensitive information and can perform actions that affect codebases, builds, and deliveries.

Even though we can use a tool technically, that doesn’t mean we should use it. If a new tool can provide value in the project, create a BSD ticket for evaluation.

Practical advice for safe AI use in development

To get value from AI in development without unnecessarily increasing risk, the team should have some simple, shared working rules. These should be used in daily work, not just as policy on paper. Each team should develop their own rules and procedures that fit the context they work in, so that both our and the client’s security requirements can be met.

This is what we should do

  • use AI on bounded tasks with clear goals and a well-defined framework
  • treat AI contributions as third-party code: You must understand and be able to explain the code before it is merged or run
  • document AI usage where it is relevant for traceability and audit
  • use as little data as possible in prompts (data minimization), and only share what is needed for the task
  • restrict AI tool access to the minimum necessary level

This is what we should avoid

  • pasting secrets, personal data, or customer information into prompts
  • letting AI make architectural or security decisions without human review
  • disabling review or test requirements because the code looks right at first glance
  • giving tools broad repo, cloud, or production access without clear need and approval
  • letting AI merge, deploy, or rotate secrets without explicit human approval

The goal is not to slow down development, but to use AI in a way that is safe, predictable, and traceable.

Running AI-generated code

Code and scripts suggested by AI should always be reviewed before running on a development machine. Pay special attention to commands that download content, change file permissions, start background processes, or write to system areas. If you run the AI tool in a confined sandbox, you reduce the risk and can to a greater extent let the AI tool work autonomously.

Prompting in practice

Good prompting practices reduce risk and increase quality. A useful principle is that the prompt should be specific enough to give a good answer, but limited enough that you maintain control of the data and results.

This is what we should ask for

  • describe requirements and framework first (language, framework, security requirements)
  • ask for small, reviewable changes rather than large rewrites
  • ask for explicit assumptions, limitations, and uncertainty
  • ask for test suggestions together with code suggestions
  • ask the AI to explain the security consequences of the proposed solution
  • ask for alternatives with pros and cons when the solution affects security or operations

This is what we should avoid

  • prompts that contain secrets, tokens, or customer data
  • prompts that ask AI to bypass policy, logging, or security controls
  • prompts that give AI open authority to “fix everything” in the entire codebase
  • prompts that ask AI to make changes directly to production-like environments without review
  • prompts that mix multiple unrelated tasks so that the result becomes difficult to quality assure

Unless explicitly approved, AI tools should not have access to data beyond what is needed for the task.

Check that the repository does not contain data files, secrets, or other sensitive information. Use .gitignore, git pre-commit hooks with secret detection, and key vaults to reduce the risk of leaks.

AI-specific threats in the development cycle

When AI is used in development, threats emerge that are not always covered by traditional controls:

  • prompt injection in code, documentation, or issues that affect the agent’s behavior
  • data exfiltration via prompts, logs, plugins, or integrations
  • hallucinations that introduce false APIs or insecure patterns
  • poisoned context from compromised dependencies or malicious code examples
  • excessive reliance on autonomous execution without human oversight

These threats must be handled with technical barriers, clear processes, and active monitoring.

Agentic development, instruction files, and guardrails

Agentic tools can analyze codebases, suggest changes, create pull requests, and in some cases perform actions automatically. This requires stricter control than typical code assistance.

Leakage of sensitive data

Some AI tools can commit and push code automatically. Ensure that sensitive information such as passwords, certificates, and data does not leak.

For teams that want to get started quickly with safer agentic development, there is an internal Bouvet repository with examples and patterns: bouvet-ai-harness. The repository offers a set of repository artifacts and working methods that make AI-assisted development more consistent, efficient, and measurable, and can be used as a practical starting point for instruction files, workflows, and measurable quality criteria.

Recommended guardrails:

  • use instruction files that define what the agent can and cannot do
  • keep instructions concrete, testable, and project-specific
  • restrict permissions (least privilege) for repos, CI/CD, and cloud access
  • require human review before merge and deploy
  • block automatic changes to security-critical files without explicit approval
  • log agent actions so that contributions are traceable and verifiable
  • use hooks from git and AI tools to establish additional guardrails

For teams that actively use instruction files, these should be treated as a security control equivalent to CI/CD policy.

Quality assurance before merge

AI contributions must not go to production without full quality assurance. At minimum, the following should be in place:

  • code review by a developer who understands the change
  • relevant tests, including security tests where applicable
  • control of dependencies and license requirements
  • verification that secrets have not been introduced
  • assessment of whether the change affects the threat model or security requirements

More information

5 - Security Checkpoints

A security checkpoint is a control point during a project where requirements must be met before proceeding.

Depending on the security level a delivery aims to achieve, it may be necessary to define mechanisms for assessing security at fixed points in the development cycle, known as security checkpoints.

These can be defined between logical phases in the project, for example, between the design and development phases, or when transitioning from development to the first release in production. Other and additional checkpoints can also be defined, entirely depending on the requirements the delivery team must adhere to.

In a study by IBM it was determined that defects in applications developed for the U.S. military cost significantly less to fix early in the process compared to later.

By implementing security checkpoints, it becomes easier to catch weaknesses early and to ensure compliance with security and quality requirements. A typical practice using checkpoints could include

  • creating a design of the project before the development cycle starts
  • ensuring that implementation follows the design
  • verifying that design and implementation actually match before going into production

AI-specific security checkpoints

For solutions that use AI, dedicated checkpoints should be established before production deployment. The goal is to ensure that data, model behavior, and operational readiness are reviewed and documented before the solution is exposed in production.

A practical minimum is to introduce the following gates:

1. Data review gate

Before model training, fine-tuning, or major changes to the data basis, the team should document:

  • which data sources are used, ownership, and permitted usage purpose
  • a basic data quality assessment (representativeness, missing values, noise, duplicates)
  • identified privacy and security risks in the data basis
  • decisions on any data limitations, filtering, or rejected datasets

2. Evaluation and V&V gate

Before production, the model should be verified and validated against defined acceptance criteria:

  • a documented evaluation setup with relevant test sets and scenarios
  • assessment of security and misuse scenarios (for example prompt injection and unwanted tool usage)
  • clear boundaries for when the model must not be used without human oversight
  • a go/no-go decision with rationale

3. Logging and monitoring gate

Before production, the operations team should verify that required observability is in place:

  • which events must be logged (model calls, access changes, failures, anomalies)
  • how logs are protected against tampering and unauthorized access
  • which alerts and thresholds should trigger follow-up
  • who is responsible for ongoing monitoring and incident handling

For more on log operations and production follow-up, see Logging and Monitoring.

See also:

More Information