Application de la sécurité de bout en bout à une application cloud
Ce tutoriel peut entraîner des coûts. Utilisez l'Estimateur de coûts pour générer une estimation du coût en fonction de votre utilisation projetée.
Ce tutoriel décrit les principaux services de sécurité disponibles dans le catalogue IBM Cloud® et explique comment les utiliser ensemble. Une application permettant le partage de fichiers met en pratique les concepts de sécurité.
Aucune architecture d'application n'est complète sans une compréhension claire des risques potentiels pour la sécurité et de la protection contre de telles menaces. Les données d'application sont des ressources essentielles qui ne peuvent être perdues, compromises ou volées. De plus, les données doivent être protégées au repos et en transit au moyen de techniques de chiffrement. Le chiffrement des données inactives empêche la divulgation des informations, même si elles sont perdues ou volées. Le chiffrement des données en transit (sur Internet, par exemple) à l'aide de méthodes telles que HTTPS, SSL et TLS empêche les écoutes illicites et les attaques de type "man-in-the-middle".
L'authentification et l'autorisation de l'accès des utilisateurs à des ressources spécifiques constituent une autre exigence courante pour de nombreuses applications. Il peut être nécessaire de prendre en charge différents schémas d'authentification : clients et fournisseurs utilisant des identités sociales, partenaires d'annuaires hébergés dans le cloud et employés du fournisseur d'identité d'une entreprise.
Objectifs
- Cryptage du contenu dans les bacs de stockage à l'aide de vos propres clés de cryptage.
- Exiger des utilisateurs qu'ils s'authentifient avant d'accéder à une application.
- Surveiller et auditer les appels d'API liés à la sécurité et d'autres actions dans les services en nuage.
Ce tutoriel présente un exemple d'application permettant aux groupes d'utilisateurs de télécharger des fichiers vers un pool de stockage commun et d'accéder à ces fichiers via des liens partageables. L'application est écrite en Node.js et déployée en tant que conteneur sur IBM Cloud Kubernetes Service ou Red Hat OpenShift on IBM Cloud. Elle exploite plusieurs services et fonctionnalités liés à la sécurité pour améliorer l'état de sécurité de l'application.
Ce tutoriel s'applique à un cluster fonctionnant dans une infrastructure classique ou une infrastructure VPC.
- L'utilisateur se connecte à l'application.
- Si vous utilisez un domaine personnalisé et un certificat TLS, le certificat est géré et déployé à partir de Secrets Manager.
- App ID sécurise l'application et redirige l'utilisateur vers la page d'authentification. Les utilisateurs peuvent également s'inscrire.
- L'application s'exécute dans un cluster Kubernetes à partir d'une image stockée dans Container Registry. Cette image est automatiquement analysée à la recherche de vulnérabilités.
- Les fichiers téléchargés sont stockés dans Object Storage avec les métadonnées correspondantes stockées dans IBM Cloudant.
- Les compartiments de stockage d'objets et les services App ID et Secrets Manager utilisent une clé fournie par l'utilisateur pour chiffrer les données.
- Les activités de gestion des applications sont enregistrées par IBM Cloud Activity Tracker Event Routing et acheminées vers IBM Cloud Logs pour analyse.
Avant de commencer
Pour ce tutoriel, vous devez disposer des éléments suivants :
- IBM Cloud CLI,
- du plug-in IBM Cloud Kubernetes Service (
kubernetes-service), - du plug-in Container Registry (
container-registry),
- du plug-in IBM Cloud Kubernetes Service (
- de
kubectlpour interagir avec des clusters Kubernetes, - de
gitpour cloner le référentiel de code source.
Vous trouverez les instructions pour télécharger et installer ces outils pour votre environnement d'exploitation dans le guide " Getting started with solution tutorials ".
Pour éviter l'installation de ces outils, vous pouvez utiliser la commande Cloud Shell à partir de la console IBM Cloud.
Création de services
Dans la section suivante, vous allez créer les services utilisés par l'application.
Choix de l'emplacement du déploiement de l'application
L' emplacement et le groupe de ressources de toutes les ressources que vous créez doivent correspondre à l'emplacement et au groupe de ressources du cluster Kubernetes.
Capture des activités des utilisateurs et des applications
Le IBM Cloud Activity Tracker Event Routing doit être configuré pour acheminer les événements d'audit vers une instance cible IBM Cloud Logs Acheminez les événements d'audit comme décrit dans la configuration d'une cible IBM Logs si celle-ci n'est pas encore configurée dans votre compte.
A la fin de ce tutoriel, vous passerez en revue les événements générés par la réalisation de ses étapes.
Création d'un cluster pour l'application
IBM Cloud Kubernetes Service et Red Hat OpenShift on IBM Cloud fournissent des environnements pour déployer des applications à haute disponibilité dans des conteneurs qui s'exécutent dans des clusters Kubernetes.
Sautez cette section si vous disposez d'un cluster Kubernetes que vous souhaitez réutiliser dans le cadre de ce tutoriel. Dans la suite de ce tutoriel, le nom du cluster est référencé comme secure-file-storage-cluster, il suffit de le remplacer par le nom de votre cluster.
Un cluster minimal doté d'une (1) zone, d'un noeud worker (1) et de la plus petite taille disponible (version) est suffisant pour ce tutoriel. Pour créer votre IBM Cloud Kubernetes Service cluster, suivez les étapes pour Créer des clusters VPC ou Créer des clusters classiques. Pour créer votre Red Hat OpenShift on IBM Cloud, suivez les étapes de Création de clusters VPC ou Création de clusters classiques.
Utilisation de vos propres clés de chiffrement
Key Protect vous aide à fournir des clés chiffrées pour les applications dans les services IBM Cloud . Key Protect et IBM Cloud Object Storage travaillent ensemble pour protéger vos données au repos.. Dans cette section, vous allez créer une clé racine pour le compartiment de stockage.
- Créez une instance de Key Protect.
- Sélectionnez un emplacement.
- Définissez le nom sur
secure-file-storage-kp. - Sélectionnez le groupe de ressources dans lequel créer l'instance de service, puis cliquez sur Créer.
- Sous Clés, cliquez sur le bouton Ajouter pour créer une nouvelle clé racine. Elle sera utilisée pour chiffrer le compartiment de stockage et les données App ID.
- Définissez le type de clé sur Clé racine.
- Définissez le nom sur
secure-file-storage-root-enckey. - Ensuite, cliquez sur Ajouter une clé.
Apportez votre propre clé (Bring your own key - BYOK) en important une clé racine existante.
Configuration du stockage pour les fichiers utilisateur
L'application de partage de fichiers enregistre les fichiers dans la corbeille Object Storage. La relation entre les fichiers et les utilisateurs est stockée sous forme de métadonnées dans la base de données IBM Cloudant. Dans cette section, vous allez créer et configurer ces services.
Compartiment destiné au contenu
- Créez une instance de Object Storage.
- Sélectionnez un plan standard et définissez le nom sur
secure-file-storage-cos. - Utilisez le même groupe de ressources que pour les services précédents, puis cliquez sur Créer.
- Sélectionnez un plan standard et définissez le nom sur
- Sous Données d'identification pour le service, créez de Nouvelles données d'identification.
- Définissez le nom sur
secure-file-storage-cos-acckey. - Pour Rôle, sélectionnez Auteur.
- Sous Options avancées, cochez Inclure un identifiant HMAC. Ils sont nécessaires pour générer des URL pré-signées.
- Cliquez sur Ajouter.
- Relevez les données d'identification. Vous en aurez besoin dans une étape ultérieure.
- Définissez le nom sur
- Cliquez sur Noeuds finaux dans la barre latérale de navigation:
- Affectez au paramètre Résilience la valeur Régional et au paramètre Emplacement l'emplacement cible :
- Pour l'infrastructure classique : Copiez le noeud final de service Privé. Il sera utilisé ultérieurement dans la configuration de l'application.
- Pour l'infrastructure VPC : Copiez le noeud final de service Direct. Il sera utilisé ultérieurement dans la configuration de l'application.
Avant de créer le compartiment, vous devez accorder à l'instance de service Object Storage l'accès à la clé racine stockée dans l'instance de service Key Protect.
- Allez dans Gérer > Accès(IAM)> Autorisations dans la console IBM Cloud.
- Cliquez sur le bouton Créer.
- Dans le menu Service source, sélectionnez Cloud Object Storage.
- Passez à Ressources basées sur les attributs sélectionnés, cochez Instance de service source et sélectionnez l'instance de service Object Storage précédemment créée.
- Dans le menu Service cible, sélectionnez Key Protect.
- Passez à Ressources basées sur les attributs sélectionnés, cochez ID instance et sélectionnez l'instance de service Key Protect précédemment créée.
- Activez le rôle Lecteur.
- Cliquez sur le bouton Autoriser.
Enfin, créez le compartiment.
- Accédez à l'instance de service Object Storage à partir de la liste des ressources sous Stockage.
- Cliquez sur Créer un seau, puis sur Personnaliser votre seau.
- Utilisez une valeur unique pour name, telle que
<your-initials>-secure-file-upload. - Définissez Résilience sur Régionale.
- Définissez Emplacement sur l'emplacement dans lequel vous avez créé l'instance de service Key Protect.
- Définissez la Classe de stockage sur Standard
- Utilisez une valeur unique pour name, telle que
- Sous Intégrations de service (facultatif)/Chiffrement, activez Gestion des clés
- Sélectionnez l'instance de service Key Protect créée précédemment en cliquant sur Utiliser une instance existante.
- Sélectionnez secure-file-storage-root-enckey comme clé et cliquez sur Associer la clé.
- Sous Intégrations de services (facultatif) / Surveillance et suivi de l'activité, activez le suivi de l'activité pour que les événements d'audit soient conservés à des fins d'analyse.
- Après avoir coché la case, les informations de service associées à l'instance Activity Tracker dans la région doivent s'afficher.
- Maintenant, activez le suivi des événements de données et sélectionnez lecture-écriture comme événements de données.
- Cliquez sur Créer un compartiment.
Relation de carte de base de données entre les utilisateurs et leurs fichiers
La base de données IBM Cloudant contient des métadonnées pour tous les fichiers téléchargés à partir de l'application.
- Créez une instance du service IBM Cloudant.
- Sélectionnez Cloudant comme offre.
- Sélectionnez un environnement multilocataire et une région identiques à ceux des services précédents.
- Définissez le nom sur
secure-file-storage-cloudant. - Utilisez le même groupe de ressources que pour les services précédents.
- Affectez au paramètre Méthode d'authentification la valeur IAM.
- Cliquez sur Créer.
- Revenez à la liste de ressources, recherchez le service que vous venez de créer et cliquez dessus. (Remarque : Vous devrez attendre que le statut devienne Actif.
- Sous Données d'identification pour le service, créez de Nouvelles données d'identification.
- Définissez le nom sur
secure-file-storage-cloudant-acckey. - Pour Rôle, sélectionnez Gestionnaire.
- Conservez les valeurs par défaut pour les autres champs.
- Cliquez sur Ajouter.
- Développez les données d'identification nouvellement créées et relevez les valeurs. Vous en aurez besoin dans une étape ultérieure.
- Sous Gérer, cliquez sur Lancer le tableau de bord.
- Cliquez sur Créer une base de données pour créer une base de données non partitionnée nommée
secure-file-storage-metadata.
Authentification des utilisateurs
Avec App ID, vous pouvez sécuriser des ressources et ajouter une authentification à vos applications. Comme alternative non utilisée dans ce tutoriel, App ID peut intégrer à Kubernetes Service pour authentifier les utilisateurs accédant aux applications déployées dans le cluster.
Avant de créer le service App ID, accordez des droits d'accès au service Key Protect. Vous devez être propriétaire ou administrateur du compte pour l'instance Key Protect sur laquelle vous travaillez. Vous devez également disposer d'au moins un accès Afficheur au service App ID.
- Allez dans Gestion > Accès IAM > Autorisations et cliquez sur Créer.
- Sélectionnez le service App ID comme service source.
- Sélectionnez Key Protect comme service cible.
- Passez à Ressources basées sur les attributs sélectionnés, cochez ID instance et sélectionnez l'instance de service Key Protect précédemment créée.
- Affectez le rôle Lecteur sous Accès au service.
- Cliquez sur Autoriser pour confirmer l'autorisation déléguée.
A présent, créez une instance du service App ID.
-
Naviguez jusqu'à la page de création de App ID page de création de service.
- Utilisez le même emplacement que pour les services précédents.
- Sélectionnez le plan Niveau promu.
- Définissez le nom du service sur
secure-file-storage-appid. - Sélectionnez un groupe de ressources identique à celui des services précédents.
- Sélectionnez le nom du service Key Protect autorisé et la clé racine des listes déroulantes respectives.
- Cliquez sur Créer.
-
Sous Gérer l'authentification, dans l'onglet Paramètres d'authentification, ajoutez une URL de redirection Web pointant vers le domaine que vous allez utiliser pour l'application. Le format de l'URL est
https://secure-file-storage.<Ingress subdomain>/redirect_uri. Exemple :- Avec le sous-domaine Ingress :
mycluster-1234-d123456789.us-south.containers.appdomain.cloud - la redirection URL est
https://secure-file-storage.mycluster-1234-d123456789.us-south.containers.appdomain.cloud/redirect_uri.
App ID exige que l' URL redirection soit https ou http. Vous pouvez visualiser votre sous-domaine Ingress dans le tableau de bord du cluster ou à l'aide de
ibmcloud ks cluster get --cluster <cluster-name>. - Avec le sous-domaine Ingress :
-
Dans le même onglet sous Paramètres d'authentification et Activité d'exécution, activez la capture d'événements dans IBM Cloud Activity Tracker Event Routing.
-
Créer des données d'identification de service:
- Sous Données d'identification pour le service, créez de Nouvelles données d'identification.
- Définissez le nom sur
secure-file-storage-appid-acckey. - Pour Rôle, sélectionnez Gestionnaire.
- Conservez les valeurs par défaut pour les autres champs.
- Cliquez sur Ajouter.
Vous devez personnaliser les fournisseurs d'identité utilisés, ainsi que l'expérience de gestion des connexions et des utilisateurs dans le tableau de bord App ID. Ce tutoriel utilise les valeurs par défaut pour plus de simplicité. Pour un environnement de production, envisagez d'utiliser l'Authentification multifacteur (MFA) et des règles de mot de passe avancées.
Déploiement de l'application
Tous les services ont été configurés. Dans cette section, vous allez déployer l'application du tutoriel dans le cluster. Toutes ces opérations peuvent être effectuées à partir d'un environnement shell (terminal).
Obtention du code
- Obtenez le code de l'application :
git clone https://github.com/IBM-Cloud/secure-file-storage - Accédez au répertoire secure-file-storage/app :
cd secure-file-storage/app
Renseignez les paramètres de configuration et les données d'identification
-
Si vous n'êtes pas connecté, utilisez
ibmcloud loginouibmcloud login --ssopour vous connecter de manière interactive. Ciblez votre région et votre groupe de ressources IBM Cloud.ibmcloud target -r <region> -g <resource_group>Vous pouvez trouver d'autres commandes CLI dans la rubrique Commandes générales IBM Cloud CLI (ibmcloud) de la documentation.
-
Définissez les variables d'environnement requises pour la génération des fichiers de configuration à l'étape suivante.
- Commencez par définir le nom du cluster en remplaçant
<YOUR_CLUSTER_NAME>:export MYCLUSTER=<YOUR_CLUSTER_NAME> - Définissez le sous-domaine Ingress à l'aide des commandes
ibmcloud ks:export INGRESS_SUBDOMAIN=$(ibmcloud ks cluster get --cluster $MYCLUSTER --output json | jq -r 'try(.ingressHostname) // .ingress.hostname') - Définissez le secret d'entrée à l'aide des commandes
ibmcloud ks:export INGRESS_SECRET=$(ibmcloud ks cluster get --cluster $MYCLUSTER --output json | jq -r 'try(.ingressSecretName) // .ingress.secretName') - Définissez le nom du référentiel d'images sur l'image prégénérée
icr.io/solution-tutorials/tutorial-cloud-e2e-security:export IMAGE_REPOSITORY=icr.io/solution-tutorials/tutorial-cloud-e2e-security - Définissez d'autres variables d'environnement en remplaçant les valeurs par défaut :
export BASENAME=secure-file-storage - Définissez l'espace de nom à utiliser:
export TARGET_NAMESPACE=default - La variable d'environnement
$IMAGE_PULL_SECRETne peut être définie que si vous utilisez un autre espace de noms Kubernetes que l'espace de nomsdefaultet l'espace de noms IBM Cloud Container Registry pour l'image. Cela nécessite une configuration Kubernetes supplémentaire (par exemple, la création d'un secret de registre de conteneur dans le nouvel espace de nom).
- Commencez par définir le nom du cluster en remplaçant
-
Exécutez la commande suivante pour générer
secure-file-storage.yamletsecure-file-storage-ingress.yaml. Il utilisera les variables d'environnement que vous venez de configurer ainsi que les fichiers modèlessecure-file-storage.template.yamletsecure-file-storage-ingress.template.yaml../generate_yaml.shPar exemple, si l'application est déployée sur l'espace de nom valeur par défaut Kubernetes :
Variables d'environnement utilisées par le script Variables Valeur Description $IMAGE_PULL_SECRETNe pas définir lors de l'utilisation de l'image fournie Secret pour accéder au registre. $IMAGE_REPOSITORYicr.io/solution-tutorials/tutorial-cloud-e2e-security ou Icr.io/namespace/image-name Identificateur de type URL de l'image générée en fonction de l'URL du registre, de l'espace de nom et du nom d'image de la section précédente. $TARGET_NAMESPACEPar défaut Espace de nom Kubernetes où est envoyée l'application. $INGRESS_SUBDOMAINsecure-file-stora-123456.us-south.containers.appdomain.cloud Extrait de la page de présentation du cluster ou de ibmcloud ks cluster get --cluster <your-cluster-name>.$INGRESS_SECRETsecure-file-stora-123456 Procédez à l'extraction avec ibmcloud ks cluster get --cluster <your-cluster-name>.$BASENAMEsecure-file-storage Préfixe utilisé pour identifier des ressources. -
Copiez
credentials.template.envverscredentials.env:cp credentials.template.env credentials.env -
Editez
credentials.envet remplissez les espaces avec les valeurs suivantes :- le noeud final régional du service Object Storage, le nom du compartiment, les données d'identification créées pour le service Object Storage
- les informations d'identification pour secure-file-storage-cloudant,
- et les données d'identification pour App ID. La variable
appid_redirect_urisest une liste d'URI de redirection séparés par des virgules, comme indiqué ci-dessus.
Lorsque vous utilisez Cloud Shell, vous pouvez vous servir de
nano credentials.envpour éditer le fichier.
Déploiement dans le cluster
- Accédez à votre cluster comme décrit dans les instructions Se connecter via CLI accessible depuis le menu Actions... de votre page de présentation de la console.
ibmcloud ks cluster config --cluster $MYCLUSTER --admin - Vérifiez qu'un secret Ingress est disponible dans votre espace de nom cible. Si ce n'est pas le cas, vous devez le créer.
Si le secret Ingress possède un nom de ressource de cloud, utilisez son nom et son nom de ressource de cloud pour créer un secret dans votre espace de nom cible:ibmcloud ks ingress secret ls -c $MYCLUSTERSi le secret Ingress n'a pas de CRN, utilisez la commande suivante pour le recréer dans l'espace de nom cible:ibmcloud ks ingress secret create -c $MYCLUSTER -n $TARGET_NAMESPACE --cert-crn <crn-shown-in-the-output-above> --name <secret-name-shown-above>kubectl get secret $INGRESS_SECRET --namespace=ibm-cert-store -oyaml | grep -v '^\s*namespace:\s'| kubectl apply --namespace=$TARGET_NAMESPACE -f - - Créez le secret utilisé par l'application pour obtenir les données d'identification du service :
kubectl create secret generic secure-file-storage-credentials --from-env-file=credentials.env - Déployez l'application.
kubectl apply -f secure-file-storage.yaml - Déployez le routage réseau (un service ClusterIP et Ingress) pour votre application afin de le rendre accessible à partir de l'Internet public.
kubectl apply -f secure-file-storage-ingress.yaml
Test de l'application
L'application est accessible à l'adresse https://secure-file-storage.<your-cluster-ingress-subdomain>/.
- Accédez à la page d'accueil de l'application. Vous serez redirigé vers la page de connexion par défaut App ID.
- Inscrivez-vous pour un nouveau compte avec une adresse électronique valide.
- Attendez la réception du courrier électronique dans votre boîte de réception pour vérifier le compte.
- Connectez-vous.
- Choisissez un fichier à envoyer par téléchargement. Cliquez sur Transférer.
- Utilisez l'action Partager sur un fichier pour générer une URL pré-signée pouvant être partagée avec d'autres personnes pour accéder au fichier. Le lien est configuré pour expirer après 5 minutes.
Les utilisateurs authentifiés ont leurs propres espaces pour stocker des fichiers. Bien qu'ils ne puissent pas voir les autres fichiers, ils peuvent générer des URL pré-signées pour accorder un accès temporaire à un fichier spécifique.
Vous trouverez plus de détails sur l'application dans le dépôt du code source.
Examen des événements de sécurité
Maintenant que l'application et ses services ont été déployés, vous pouvez consulter les événements de sécurité générés par ce processus. Tous les événements sont disponibles de manière centralisée dans l'instance IBM Cloud Logs.
- Dans le tableau de bord Observability, sélectionnez l'onglet Cloud Logs et localisez l'instance IBM Cloud Logs qui reçoit les événements d'audit et cliquez sur Open dashboard.
- Examinez tous les journaux envoyés au service lors de la mise à disposition et de l'interaction avec des ressources.
Facultatif : Utilisation d'un domaine personnalisé et chiffrement du trafic réseau
Par défaut, l'application est accessible sur un sous-domaine générique de containers.appdomain.cloud. Cependant, il est également possible d'utiliser un domaine personnalisé avec l'application déployée. Pour que l'accès https au trafic réseau chiffré soit pris en charge de manière continue, vous devez fournir un certificat pour le nom d'hôte souhaité ou un certificat générique. Il existe différentes combinaisons de services qui peuvent être utilisées pour gérer
les noms DNS et les certificats TLS en vue de leur intégration dans une application Kubernetes. Ce tutoriel utilise les services suivants:
- Sous-domaine DNS, secure-file-storage, de votre propre domaine DNS personnalisé, géré par le service IBM Cloud Internet Services (CIS). Pour simplifier les étapes de ce tutoriel, nous allons utiliser example.com pour le nom du domaine DNS personnalisé, veillez à le remplacer par votre domaine DNS personnalisé dans toutes les étapes.
- Let's Encrypt pour générer les certificats TLS.
- IBM Cloud Secrets Manager à intégrer à Let's Encrypt pour générer le certificat TLS pour secure-file-storage.example.com et le stocker en toute sécurité.
- Kubernetes Opérateur Secrets externes pour extraire le certificat TLS secret directement de Secrets Manager
Au lieu des étapes suivantes, vous pouvez également créer un CNAME pointant vers l'URI de l'application sur votre fournisseur DNS, générer un certificat TLS et importer ses composants dans Secrets Manager.
Provisionner les instances CIS et Secrets Manager
- Une instance IBM Cloud Internet Services est requise. Utilisez une instance existante ou créez-en une à partir de cette entrée de catalogue. Un certain nombre de plans de tarification sont disponibles, y compris un essai gratuit. Le processus de mise à disposition d'un nouveau CIS explique comment configurer votre registre
DNS existant (peut-être pas dans IBM Cloud) pour utiliser les serveurs de noms de domaine fournis par CIS. Exportez le domaine personnalisé dans la fenêtre shell:
export MYDOMAIN=example.com - Une instance de Secrets Manager est nécessaire. Utilisez une instance existante ou créez-en une nouvelle décrite dans Création d'une instance de service Secrets Manager. Si vous créez une nouvelle instance, nommez-la secure-file-storage-sm. Vous pouvez renforcer la sécurité de vos secrets au repos en les intégrant à l'instance Key Protect créée précédemment.
Créez une entrée DNS dans l'instance CIS en utilisant votre sous-domaine Ingress de cluster Kubernetes comme alias.
- Ouvrez l'instance de service CIS. Vous pouvez la trouver dans la Liste de ressources.
- Cliquez sur l'onglet Fiabilité à gauche.
- Cliquez sur l'onglet DNS en haut.
- Faites défiler vers le bas jusqu'à la section Enregistrements DNS et cliquez sur Ajouter pour créer un nouvel enregistrement:
- Type : CNAME
- Nom: secure-file-storage
- Alias: Sous-domaine Ingress de votre cluster. Vous pouvez obtenir la valeur correcte dans le shell en exécutant la commande suivante:
echo $INGRESS_SUBDOMAIN - Cliquez sur Ajouter pour ajouter le nouvel enregistrement.
Connectez l'instance Secrets Manager à Let's Encrypt.
-
Un compte ACME Let's Encrypt et le fichier .pem associé sont requis. Utilisez un fichier existant ou créez-en un:
- Installez l'outil acme-account-creation-tool. Création d'un compte Let's Encrypt ACME contient des instructions et un lien vers l'outil de création.
- Exécutez acme-account-creation-tool pour créer un compte spécifique pour cet exemple secure-file-storage. Voici un exemple:
$ ./acme-account-creation-tool-darwin-amd64 -e YOUREMAIL -o secure-file-storage.example.com -d letsencrypt-prod INFO[2022-12-28T13:30:00-08:00] Registering a new account with the CA INFO[2022-12-28T13:30:00-08:00] Account information written to file : secure-file-storage.example.com-account-info.json INFO[2022-12-28T13:30:00-08:00] Private key written to file : secure-file-storage.example.com-private-key.pem Account Info { "email": "YOUREMAIL", "registration_uri": "https://acme-v02.api.letsencrypt.org/acme/acct/891897087", "registration_body": { "status": "valid", "contact": [ "mailto:YOUREMAIL" ] } }% $ ls secure-file-storage.example.com-account-info.json secure-file-storage.example.com-private-key.pem
-
Connectez le compte Let's Encrypt ACME à l'instance Secrets Manager. Voir Ajout d'une configuration d'autorité de certification dans l'interface utilisateur pour plus de détails:
- Ouvrez l'instance de service Secrets Manager qui se trouve dans la Liste de ressources.
- Ouvrez les moteurs de secrets sur la gauche et cliquez sur Certificats publics.
- Sous Autorités de certification, cliquez sur Ajouter.
- Nom: LetsEncrypt et Autorité de certification: Let's Encrypt.
- Sous Sélectionner un fichier, cliquez sur Ajouter un fichier et choisissez le fichier secure-file-storage.example.com-private-key.pem ou votre fichier .pem existant dans le sélecteur.
- Cliquez sur Ajouter.
-
Connectez CIS en tant que fournisseur DNS:
- Sous Fournisseurs DNS, cliquez sur Ajouter.
- Name cis et choisissez Cloud Internet Services dans la liste déroulante.
- Cliquez sur Suivant.
- Dans l'onglet Autorisation, choisissez l'instance CIS.
- Cliquez sur Ajouter.
-
Commandez un certificat sur Secrets Manager
- Ouvrez le service Secrets Manager et sélectionnez Secrets à gauche.
- Cliquez sur Ajouter.
- Cliquez sur Public certificate, puis sur Next.
- Remplissez le formulaire :
- Nom - entrez un nom que vous pouvez mémoriser facilement.
- Description - entrez une description de votre choix.
- Cliquez sur Suivant.
- Sous Autorité de certification , sélectionnez votre moteur d'autorité de certification Let's Encrypt configuré.
- Sous Algorithme de clé, choisissez votre algorithme préféré.
- Certificats de bundle - laisser désactivé
- Rotation automatique des certificats - - laisser désactivé
- Sous Fournisseur DNS, sélectionnez votre instance de fournisseur DNS configurée
- Cliquez sur Sélectionner des domaines, cochez Sélectionner avec le caractère générique et laissez le domaine lui-même désélectionné, puis cliquez sur Terminé.
- Cliquez sur Suivant.
- Passez en revue vos sélections et cliquez sur Ajouter.
- Cliquez sur le menu des trois points verticaux pour le secret actif, choisissez Détails et copiez le nom de ressource de cloud ( CRN ) dans la boîte de dialogue. Exportez la valeur dans le shell. Il
devrait être similaire à ceci :
export PUBLIC_CERT_CRN=crn:v1:bluemix:public:secrets-manager:eu-de:a/abc123abc123abc123abc123:99999999-9999-9999-9999-999999999999:secret:aaaaaaaa-9999-9999-aaaa-123456781234
-
Ce tutoriel optimise l'autorisation de service à service pour permettre au cluster d'accéder à l'instance de service Secrets Manager et à ses secrets gérés.
- Accédez à la page Autorisations IAM et cliquez sur Créer pour ajouter une nouvelle autorisation.
- Sous Source, sélectionnez Kubernetes Service, puis cliquez pour sélectionner Ressources spécifiques. Ensuite, pour Instance de service source, choisissez votre cluster.
- Sous Cible, sélectionnez Secrets Manager, puis, en utilisant Ressources spécifiques et ID d'instance, sélectionnez votre instance de service Secrets Manager.
- Enfin, sous Rôles, sélectionnez Gestionnaire et accordez l'autorisation en cliquant sur Autoriser.
-
Vérifiez que les valeurs de MYDOMAIN et de PUBLIC_CERT_CRN ont été exportées dans l'environnement:
echo MYDOMAIN $(printenv MYDOMAIN) echo PUBLIC_CERT_CRN $(printenv PUBLIC_CERT_CRN) -
Créez un secret Ingress à partir du nouveau certificat TLS.
ibmcloud ks ingress secret create --name secure-file-storage-certificate --cluster $MYCLUSTER --cert-crn $PUBLIC_CERT_CRN --namespace $TARGET_NAMESPACE -
Exécutez la commande ci-dessous pour générer de nouvelles copies des fichiers de configuration. Il utilisera toutes les variables d'environnement que vous avez configurées avec les fichiers modèles
secure-file-storage.template.yamletsecure-file-storage.template-ingress.yaml. Vous pouvez commencer par enregistrer la version actuelle:cp secure-file-storage.yaml /tmp cp secure-file-storage-ingress.yaml /tmp./generate_yaml.sh -
Appliquez les changements de configuration à votre cluster :
kubectl apply -f secure-file-storage-ingress.yaml -
Revenez au navigateur. Dans la liste des ressources IBM Cloud, localisez le service App ID créé et configuré précédemment et lancez son tableau de bord de gestion.
- Cliquez sur Gérer l'authentification sur la gauche et sur l'onglet Paramètres d'authentification dans la partie supérieure.
- Dans le formulaire Ajouter des URL de redirection Web, ajoutez
https://secure-file-storage.example.com/redirect_uricomme une autre URL.
- Tout devrait à présent être installé. Testez l'application en accédant à votre domaine personnalisé configuré
https://secure-file-storage.<your custom domain>.
Sécurité : Rotation des données d'identification
Pour assurer la sécurité, les données d'identification du service, les mots de passe et d'autres clés doivent être remplacés régulièrement. De nombreuses politiques de sécurité ont une obligation de changer les mots de passe et les données d'identification tous les 90 jours ou à une fréquence similaire. Par ailleurs, si un employé quitte l'équipe ou dans le cas d'incidents de sécurité (suspects), les privilèges d'accès doivent être immédiatement modifiés.
Dans ce tutoriel, des services sont utilisés à différentes fins, du stockage des fichiers et des métadonnées en passant par l'accès sécurisé aux applications, jusqu'à la gestion d'images de conteneur. La rotation des données d'identification du service implique les opérations suivantes :
- renommer les clés de service existantes,
- créer un nouvel ensemble de données d'identification avec le nom utilisé précédemment,
- remplacer les données d'accès dans les valeurs confidentielles (secrets) de Kubernetes et appliquer les modifications,
- et, après vérification, désactiver les anciennes données d'identification en supprimant les anciennes clés de service.
Extension du tutoriel
Optimisez la sécurité. Essayez les suggestions ci-dessous pour améliorer la sécurité de votre application.
- Remplacez IBM Key Protect par Hyper Protect Crypto Services pour obtenir encore plus de sécurité et de contrôle sur les clés de chiffrement.
Partage de ressources
Si vous souhaitez travailler avec d'autres sur les ressources de ce tutoriel de solution, vous pouvez partager l'ensemble ou uniquement certains composants. IBM CloudLa gestion des identités et des accès (IAM) permet l'authentification des utilisateurs et des ID de service ainsi que le contrôle d'accès aux ressources de cloud. Pour accorder l'accès à une ressource, vous pouvez affecter des rôles d'accès prédéfinis à un utilisateur, à un ID de service ou à un groupe d'accès. Un groupe d'accès peut être créé pour regrouper un ensemble d'utilisateurs et d'ID de service en une seule entité. Il facilite l'affectation des accès. Vous pouvez affecter une seule règle au groupe au lieu d'affecter individuellement le même accès plusieurs fois pour chaque utilisateur ou ID de service. Ainsi, vous pouvez créer des groupes pour des rôles sur votre projet de développement et harmoniser sécurité et gestion de projet.
Vous trouverez des informations sur les différents services et leurs rôles d'accès IAM disponibles ici :
- Kubernetes Service ou identique pour Red Hat OpenShift on IBM Cloud.
- Container Registry
- App ID
- IBM Cloudant
- Object Storage
- IBM Cloud Activity Tracker Event Routing
- Key Protect
- Secrets Manager
Pour commencer, consultez les meilleures pratiques en matière de gestion des accès et de méthodes de définition de groupes d'accès.
Suppression de ressources
Pour supprimer la ressource, supprimez le conteneur déployé, puis les services fournis.
Si vous partagez un compte avec d'autres utilisateurs, veillez toujours à ne supprimer que vos propres ressources.
-
Supprimez la configuration de réseau déployée et le conteneur:
kubectl delete -f secure-file-storage-ingress.yamlEnsuite, exécutez la commande suivante :
kubectl delete -f secure-file-storage.yaml -
Supprimez les secrets pour le déploiement :
kubectl delete secret secure-file-storage-credentials -
Si vous avez utilisé Secrets Manager, supprimez le service associé à l'autorisation de service.
-
Dans la liste de ressources IBM Cloud, recherchez les ressources créées pour ce tutoriel. Utilisez la zone de recherche et secure-file-storage comme modèle. Supprimez chacun des services en cliquant sur le menu contextuel en regard de chaque service et en choisissant Supprimer le service. Notez que le service Key Protect ne peut être supprimé que lorsque la clé a été supprimée. Cliquez sur l'instance de service pour accéder au tableau de bord associé et supprimer la clé.
En fonction de la ressource, le service peut ne pas être supprimé immédiatement mais conservé un certain temps (7 jours par défaut). Pour récupérer la ressource, vous pouvez la supprimer de manière définitive ou la restaurer pendant la période de conservation. Pour savoir comment utiliser la récupération de ressources, consultez ce document.