AWS Public Sector Blog
Keeping Canadians safe while protecting their privacy: COVID Alert app
The Government of Canada (GC) set ambitious goals at the onset of COVID-19. One goal: to offer a mobile app to notify its users of possible exposures before symptoms appear in a way that wouldn’t jeopardize their privacy.
In July, the GC released the COVID Alert app, an exposure notification application. COVID Alert doesn’t require users to enter—nor does it obtain from the mobile device—any personally identifiable information (PII) and doesn’t use location tracking.
The Canada Digital Service (CDS) developed and launched the COVID Alert app by adapting COVID Shield, which was built by volunteers at Shopify and then underwent security reviews by BlackBerry (both Canadian technology companies) and the Canadian Centre for Cyber Security (CCCS). Within three days of the pilot launch in Ontario, it was the most downloaded free app in Canada with more than 1.1 million downloads. Since then, the app has launched in nine provinces and territories with over 5.9 million downloads.
The GC selected Amazon Web Services (AWS) to host COVID Alert in the AWS Canada (Central) Region because the AWS Cloud met their security needs, had the ability to scale, and also because the CDS had previous experience building and deploying the GC Notify platform on AWS.
AWS’s account and technical teams worked with CDS along with CCCS and the Treasury Board of Canada Secretariat (TBS) through AWS Well-Architected and security reviews in preparation for launch. Also, an AWS Infrastructure Event Management (IEM) program was put in place to offer architecture and scaling guidance in addition to operational support during the preparation and execution of COVID Alert’s launch.
Let’s take a look at COVID Alert app’s cloud-based architecture and how the app is helping slow the spread of COVID-19, and helping keep Canadians safe while protecting privacy.
Solution architecture
Figure 1 illustrates COVID Alert’s cloud-based architecture. There are two primary functions of this app:
1. Code retrieval
COVID Alerts runs in the background of mobile devices. If a user is near someone else with the app, both phones exchange random codes using Bluetooth, which needs to be turned on. Received random codes are only ever kept locally on the mobile device. If a user has spent time (more than 15 minutes, less than 2 metres apart, over the past 14 days) near a person who has been diagnosed with COVID-19 and has uploaded their diagnosis keys, the app notifies the user that they may have been exposed.
Every day, whenever it has an internet connection, the mobile device retrieves a list of codes from the national key server, of people who reported a diagnosis. If the app receives a code that matches the user’s list of locally received codes in the past 14 days, the app notifies the user that they may have been exposed and provides suggested next steps.
The AWS services related to the code retrieval function of the app are indicated in Figure 2. This works through a content delivery network (CDN), which obtains the list of codes (associated with positive COVID-19 diagnoses) from a highly available and scalable serverless infrastructure. The codes are retrieved from a secure, encrypted database.
2. Code submission
When a person in Canada tests positive for COVID-19, they can choose to upload the random codes that they’ve generated to the database hosted on AWS. To upload codes, users get a one-time key to enter into the app. This is secure because each code is only used to upload random codes once. The codes are then stored in the database and no other information about the person or device is stored.
The services related to the code submission function of the app are indicated in Figure 3. This involves mobile devices accessing a highly available and scalable serverless infrastructure that communicates with a secure and encrypted database to submit its list of random codes.
Born in the cloud
The COVID Alert team used multiple AWS services in the architecture, including:
- Amazon Route 53: This highly available and scalable cloud domain name system (DNS) service provides a way to route mobile devices to the Amazon CloudFront distribution for code retrieval and to the Application Load Balancer for code submission. It does this by translating names like www.example.com into numeric IP addresses like 192.0.2.1 that the systems use to connect to each other.
- Amazon CloudFront: This is a fast CDN that securely delivers the list of random codes to mobile devices. It speeds up the delivery of the random codes (remember, these are being fetched by millions of mobile devices running COVID Alert every day) by caching them at Edge locations, closer to where users in Canada are located. It also reduces the load on the origin infrastructure, which exists in the Canada (Central) Region located in the Montréal area of Québec, reducing AWS costs.
- Application Load Balancer (ALB): Serving as the point of entry for the code retrieval and submission functions, the ALB distributes incoming requests to a fleet of healthy target AWS Fargate containers spread out between multiple Availability Zones (AZs).
- AWS Fargate: A serverless container compute engine that ties the architecture together. One AWS Fargate cluster fetches random codes so that they’re cached at the CDN’s edge while another cluster writes submitted random codes to the Amazon Aurora database. Fargate removes the need to provision and manage servers, letting CDS specify and pay for resources specific to COVID Alert.
- Amazon Aurora: It’s a highly available relational database engineered for the cloud, combining the performance of a commercial database at the cost of an open source database. Amazon Aurora holds the random codes submitted by mobile devices belonging to people in Canada that tested positive for COVID-19 and is a key component in the architecture. Its contents are encrypted at rest and communications between Fargate and Aurora are encrypted in flight.
- Amazon Elastic Container Registry (Amazon ECR): A fully managed container registry that allows CDS developers to store, manage, and deploy their Docker container images to the Fargate clusters. ECR transfers the container images using encryption in flight and automatically encrypts the images at rest.
- AWS Shield: This is a managed Distributed Denial of Service (DDoS) protection service that safeguards COVID Alert’s DNS service, CDN, and ALBs. While AWS offers two tiers of Shield (Standard and Advanced), CDS chose Shield Advanced because it provides additional detection and mitigation against large and sophisticated DDoS attacks. AWS Shield helps make sure that the COVID Alert remains available, allowing retrieval and submission of random codes when required.
- AWS Web Application Firewall (WAF): This service helps protect COVID Alert’s CDN and ALBs against web exploits that could impact availability, compromise security, or consume resources. This allows CDS developers, as well as the AWS DDoS Response Team (DRT)—who is available 24×7—to create custom security rules that block bad sources on the internet and mitigate attack patterns such as SQL injection and cross-site scripting.
While the Amazon CloudFront distribution and ALBs are directly internet-accessible in public subnets, the Fargate clusters and the Aurora database are not since they’re placed in private subnets. This increases the overall security posture of COVID Alert by minimizing the potential attack surface to only include fully managed and highly scalable AWS services. Every AWS service in COVID Alert’s architecture is highly available and spread between multiple AZs, eliminating all single points of failure.
Conclusion
In this blog post, we discussed COVID Alert’s highly scalable and secure cloud-based architecture and explained how the app helps keep people in Canada informed. If you’re in Canada, download the app today and help others use it too.
Protéger les Canadiens tout en préservant leur vie privée : Application Alerte COVID
Le gouvernement du Canada (GC) a fixé des objectifs ambitieux dès le début de la COVID-19. Un de ses objectifs premiers était de proposer une application mobile pour informer ses utilisateurs des expositions possibles à la COVID-19 avant l’apparition de symptômes, tout en respectant leur vie privée.
En juillet, le GC a lancé l’application Alerte COVID, une application de notification d’exposition. Alerte COVID ne recueille pas des renseignements personnels pour l’identification des utilisateurs (IIP) et ne permet pas de les localiser. L’application n’a pas non plus accès à ce type d’informations via le cellulaire.
Le Service numérique canadien (SNC) a développé et lancé l’application Alerte COVID en adaptant l’application COVID Shield, qui a été créée par des bénévoles de Shopify et dont la sécurité a ensuite été testée par BlackBerry (deux entreprises technologiques canadiennes) et le Centre canadien pour la cybersécurité (CCCS). Trois jours après le lancement pilote en Ontario, l’application gratuite était déjà la plus téléchargée au Canada, avec plus de 1,1 million de téléchargements. Depuis lors, l’application a été lancée dans neuf provinces et territoires avec plus de 5,9 millions de téléchargements.
Le GC a choisi Amazon Web Services (AWS) pour héberger Alerte COVID dans la région AWS Canada (Centre) parce que le Cloud AWS était conforme à ses besoins en matière de sécurité, avait la capacité de se mettre à l’échelle, mais aussi parce que le SNC avait déjà travaillé avec AWS pour la création et le déploiement de la plateforme GC Notification.
En vue du lancement, les équipes techniques et chargées des comptes d’AWS ont travaillé avec le SNC, le CCCS et le Secrétariat du Conseil du Trésor du Canada (SCT) au travers du cadre AWS Well-Architected et ont réalisé des tests de sécurité. De plus, dans le cadre d’un programme AWS Infrastructure Event Management (IEM), les équipes d’AWS ont également apporté un soutien opérationnel lors de la préparation et l’exécution du lancement de l’application Alerte COVID, en plus de fournir des conseils en matière d’architecture et de mise à l’échelle.
Nous allons maintenant nous pencher sur l’architecture cloud de l’application Alerte COVID et découvrir comment l’application contribue à ralentir la propagation de COVID-19 et à mieux protéger les Canadiens tout en préservant leur vie privée.
Architecture de la solution
1. Extraction des codes
L’application Alerte COVID fonctionne en arrière-plan sur les appareils mobiles. Si un utilisateur se trouve à proximité d’une autre personne avec l’application, les deux téléphones échangent des codes aléatoires en utilisant le Bluetooth, qui doit être activé. Les codes aléatoires reçus sont uniquement conservés sur l’appareil mobile. Si un utilisateur a passé du temps (plus de 15 minutes, à moins de 2 mètres de distance, au cours des 14 derniers jours) à proximité d’une personne testée positive à la COVID-19 qui a téléchargé ses clés de diagnostic, l’application l’informe qu’il a pu être exposé.
Chaque jour, dès qu’il est connecté à Internet, l’appareil mobile extrait une liste de codes à partir du serveur de clés national. Ces codes font référence aux personnes ayant signalé un diagnostic. Si l’application reçoit un code qui correspond à la liste des codes reçus par l’utilisateur au cours des 14 derniers jours, l’application informe l’utilisateur qu’il a pu être exposé et lui suggère quoi faire.
Les services AWS liés à la fonctionnalité d’extraction des codes de l’application sont indiqués dans la figure 2. Cette fonctionnalité est assurée par un réseau de diffusion de contenu (CDN), qui obtient la liste des codes (associés à des diagnostics de COVID-19 positifs) à partir d’une infrastructure sans serveur hautement disponible et évolutive. Les codes sont extraits à partir d’une base de données sécurisée et chiffrée.
2. Transmission des codes
Lorsqu’une personne au Canada est testée positive à la COVID-19, elle peut choisir de télécharger les codes aléatoires qu’elle a générés dans la base de données hébergée sur AWS. Pour télécharger les codes, les utilisateurs reçoivent une clé à usage unique qui leur permet d’entrer dans l’application. Cette méthode est sûre car chaque code n’est utilisé qu’une seule fois pour télécharger des codes aléatoires. Les codes sont ensuite stockés dans la base de données et aucune autre information sur la personne ou l’appareil n’est conservée.
Les services liés à la fonctionnalité de transmission des codes de l’application sont indiqués dans la figure 3. Il s’agit d’appareils mobiles ayant accès à une infrastructure sans serveur hautement disponible et évolutive qui communique avec une base de données sécurisée et chiffrée pour transmettre sa liste de codes aléatoires.
Née dans le cloud
L’équipe de l’application Alerte COVID a utilisé plusieurs services AWS pour son architecture, notamment :
- Amazon Route 53 : Un service Web de système de noms de domaine (DNS) dans le cloud hautement disponible et évolutif. Il permet d’acheminer les appareils mobiles vers la distribution Amazon CloudFront pour extraire les codes et vers l’application d’équilibreur de charge (Load Balancer) pour les transmettre. Il traduit ainsi des noms comme www.exemple.com par des adresses IP numériques de type 192.0.2.1 que les ordinateurs utilisent pour se connecter l’un à l’autre.
- Amazon CloudFront : Un réseau rapide de diffusion de contenu (CDN) qui distribue en toute sécurité la liste des codes aléatoires aux appareils mobiles. Il accélère la transmission des codes aléatoires (n’oubliez pas que des millions d’appareils mobiles lancent l’application Alerte COVID au quotidien) en les mettant en cache dans des emplacements périphériques, plus proches de là où se trouvent les utilisateurs au Canada. CloudFront réduit également la charge sur l’infrastructure d’origine, située dans la région Canada (Centre) près de Montréal au Québec, ce qui réduit les coûts liés aux services AWS.
- Application Load Balancer (ALB) : L’application sert de point d’entrée pour les fonctionnalités d’extraction et de transmission des codes. ALB distribue le trafic entrant à une flotte de conteneurs Fargate AWS cibles considérés comme sains répartis entre plusieurs zones de disponibilité.
- AWS Fargate : Un moteur de calcul sans serveur pour les conteneurs qui permet d’avoir une architecture solide. Un cluster AWS Fargate extrait des codes aléatoires pour les mettre en cache à la périphérie du CDN tandis qu’un autre cluster écrit les codes aléatoires transmis dans la base de données Amazon Aurora. Fargate évite d’avoir à provisionner et gérer les serveurs, tout en permettant au SNC de définir et de payer les ressources de l’application Alerte COVID.
- Amazon Aurora : Une base de données relationnelle hautement disponible créée pour le cloud, qui associe les performances des bases de données d’entreprises traditionnelles à la rentabilité des bases de données à source libre. Amazon Aurora détient les codes aléatoires transmis par des appareils mobiles appartenant à des personnes au Canada qui ont été testées positives à la COVID-19. C’est un élément clé de l’architecture. Son contenu est chiffré au repos et les communications entre Fargate et Aurora sont chiffrées en vol.
- Amazon Elastic Container Registry (Amazon ECR) : Un registre de conteneurs entièrement géré qui permet aux développeurs du SNC de stocker, de gérer et de déployer leurs images de conteneurs Docker sur les clusters Fargate. ECR transfère les images des conteneurs en utilisant le chiffrement en vol et chiffre automatiquement les images au repos.
- AWS Shield : Un service de protection DDoS (Déni de service distribué) géré qui protège le service DNS de l’application Alerte COVID, le CDN et ALB. Alors que deux niveaux de protection sont proposés par AWS (Standard et Advanced), le SNC a choisi Shield Advanced car il fournit davantage de fonctions de détection et d’atténuation des risques contre les attaques DDoS plus importantes et complexes. AWS Shield permet de s’assurer que l’application Alerte COVID reste accessible en permanence, et donc d’extraire et de transmettre des codes aléatoires si nécessaire.
- AWS Web Application Firewall (WAF) : Ce service permet de protéger les CDN et les ALB de l’application Alerte COVID contre les failles Web qui pourraient affecter la disponibilité, compromettre la sécurité ou provoquer une surconsommation de ressources. Cela permet aux développeurs du SNC, ainsi qu’à l’équipe de réponse DDoS (DRT) d’AWS—qui est disponible 24 heures sur 24 et 7 jours sur 7—de créer des règles de sécurité personnalisées qui bloquent les mauvaises sources sur Internet ainsi que les formes d’attaque courantes comme l’injection SQL ou les scripts intersites.
Alors que la distribution Amazon CloudFront et les ALB sont directement accessibles sur Internet dans les sous-réseaux publics, les clusters Fargate et la base de données Aurora ne le sont pas puisqu’ils sont placés dans des sous-réseaux privés. Ceci renforce la sécurité générale de l’application Alerte COVID en limitant la probabilité d’une attaque pour n’inclure que des services AWS entièrement gérés et hautement évolutifs. Chaque service AWS dans l’architecture de l’application Alerte COVID est hautement disponible et réparti entre plusieurs zones de disponibilité, ce qui élimine le risque de défaillance.
Conclusion
Dans ce billet, nous avons parlé de l’architecture cloud hautement évolutive et sécurisée de l’application Alerte COVID et nous vous avons expliqué comment l’application aide à nous tenir informés. Si vous êtes au Canada, téléchargez l’application dès aujourd’hui et encouragez les autres à l’utiliser également.