Skip to main content

Part 2 - Shared responsibility / The landing zone of a PCI-DSS compliant application inside Microsoft Azure

In the previous article, we talked about the core concepts of PCI-DSS and the impact of storing, processing and transmitting credit card data. 

This article focus on the shared responsibility concept and the importance of having all the parties at the same table. I promise that starting with the next article of this series, we will go on the technical side, but for now, we need to have a clear understanding of who the players are and what the responsibility level of each of them is.

The solution we plan to build is built around Microsoft Azure, Azure Kubernetes Services (AKS), Azure SQL and Azure CosmosDB. Considering these services, there are 3 main parties at the table:

  1. Microsoft Azure
  2. Kubernetes (AKS)
  3. The solution owner (the customer)
Depending on the solution, a shared responsibility exists between all of them, covering five main aspects:
Infrastructure, Access control, Network Security, Data protection, Malware detection. The combination of these five main aspects and the three parties define and shape what the shared responsibility model looks like. 

Microsoft Azure
The primary responsibility of Microsoft is to ensure that they provide all the PCI-DSS attestation of compliance, including the audit reports. They offer clear information related to who is responsible for what at each service level through a responsibility matrix that covers each PCI-DSS requirement. 
For compliances like PCI-DSS, HIPPA, SOC and many more, a specific set of services and functionality was built inside Microsoft Azure, giving us (the customer) the ability to build seamless systems that are  PCI-DSS compliant.
The compliance matrix is available here.
Kubernetes (AKS)
AKS is built on top of Kubernetes, which is an open-source system. The only thing that Microsoft is offering on top of it is the ability to spin, run, scale, and manage large Kubernetes clusters without the complexity of managing the cluster and the infrastructure that is behind the scene. 
It is not simple, but it makes life much more accessible and looks so effortless. 
The customer
The customer is the final owner of the solution and how decides to build the solution. He has a complete list of Microsoft Azure services and features that are PCI-DSS compliant. 
The customer needs to have a strong understanding of PCI-DSS to ensure that the right Azure services are used, and that all the processes are successfully implemented. 


The three parties are forced by the compliance requirements to build a system that is not time optimal from the cost point of view, technology and flow. Nevertheless, it ensures that credit card data are well protected once a user types his credit card data inside the system. Later on, in this series, we discuss why for small systems, you can end up paying for virtual security appliances more than for AKS cluster.

Microsoft Trust Center
Microsoft Trust Center is the entity inside Microsoft that ensures that compliance, privacy and security best practices are provided and regular audits and attests from QSA are done for all compliances, including PCI DSS. 
It should be the starting point of your journey if you want to build a compliant PCI-DSS system using Microsoft and Microsoft Azure technologies. 

Comments

Popular posts from this blog

How to audit an Azure Cosmos DB

In this post, we will talk about how we can audit an Azure Cosmos DB database. Before jumping into the problem let us define the business requirement: As an Administrator I want to be able to audit all changes that were done to specific collection inside my Azure Cosmos DB. The requirement is simple, but can be a little tricky to implement fully. First of all when you are using Azure Cosmos DB or any other storage solution there are 99% odds that you’ll have more than one system that writes data to it. This means that you have or not have control on the systems that are doing any create/update/delete operations. Solution 1: Diagnostic Logs Cosmos DB allows us activate diagnostics logs and stream the output a storage account for achieving to other systems like Event Hub or Log Analytics. This would allow us to have information related to who, when, what, response code and how the access operation to our Cosmos DB was done. Beside this there is a field that specifies what was th...

Can User Technical Profile Influence AI Architecture Decisions?

In the last few days, I ran a small experiment on Devin/Windsurf/Cascade, BMAD, and LLM-based architecture decisions. The initial concern was simple: if an AI coding assistant knows something about the user, for example, that the user is a Java developer or a .NET developer, can this information influence the architecture and technology stack that the AI will propose? This question is important because many companies are starting to use AI tools not only for coding but also for product discovery, architecture, documentation, and technical decision-making. If the AI is influenced by the developer's personal profile, the result may not be fully neutral. It may look like a business or architecture decision, but in reality, it may be partially shaped by the context of the person using the tool. The test was done using BMAD with Devin/Windsurf/Cascade. The scenario was a unified field service operations platform. The task was to let BMAD refine the product, define the architecture and s...

ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded

Today blog post will be started with the following error when running DB tests on the CI machine: threw exception: System.InvalidOperationException: The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' registered in the application config file for the ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded. Make sure that the assembly-qualified name is used and that the assembly is available to the running application. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information. at System.Data.Entity.Infrastructure.DependencyResolution.ProviderServicesFactory.GetInstance(String providerTypeName, String providerInvariantName) This error happened only on the Continuous Integration machine. On the devs machines, everything has fine. The classic problem – on my machine it’s working. The CI has the following configuration: TeamCity .NET 4.51 EF 6.0.2 VS2013 It see...