- Exemple de code
Cet exemple présente une façon de gérer lorsqu'un secret KeyVault utilisé par votre fonction Azure est « roulé » ou mis à jour dans le cadre d'opérations de sécurité normales dans vos organisations.
En règle générale, les organisations exigent que tous les secrets, clés, etc. soient stockés dans KeyVault et mis en rotation à la demande (en cas de violation) ou dans le cadre d'une politique de routine.
Dans ces cas, votre fonction Azure peut également utiliser ces secrets KeyVault, notamment viaParamètres d'application Références KeyVault. Dans ce scénario, la fonction Azure doit recevoir l'instruction de « réextraire » la valeur du secret KeyVault pour obtenir la valeur mise à jour. Dans cet exemple, vous apprendrez comment cela peut être fait en utilisant une combinaison d'Event Grid et d'applications logiques.
L'approche
- Lorsqu'un secret KeyVault est mis à jour, il émet un
NouvelleVersionSecrète
événement aux abonnés de laMessages de la grille d'événements de Key Vault. - Pour traiter ces messages, Logic Apps peut être connecté en tant qu'abonné à l'instance KeyVault, et même filtrer ce type de message.
- Utilisation des fonctions Azure'API REST de configurationmettre à jour la référence KeyVault pour pointer vers la version secrète nouvellement créée oblige l'hôte à redémarrer et à réévaluer le paramètre de l'application. La nouvelle valeur du secret sera alors reflétée dans l'exécution de la fonction.
La mise en oeuvre
Dans cet exemple, nous déployons deux instances Application Insights différentes. La clé d'instrumentation de la première instance est placée dans un secret KeyVault et la fonction Azure utilise une référence KeyVault commeAPPINSIGHTS_INSTRUMENTATIONKEY
réglage de l'application. La liaison de la fonction Azure est un déclencheur de minuterie qui s'exécute toutes les ~5 secondes et publie simplement un message avec l'heure UTC actuelle sur l'instance Application Insights à laquelle il communique.
Lorsque nous remplaçons la valeur du secret KeyVault par la clé d'instrumentation de la deuxième instance d'Application Insights, vous verrez l'événement se déclencher sur l'application logique, et l'application logique mettra à jour le paramètre d'application sur la fonction Azure. En ayant l'onglet Live Stream pour les deux instances d'Application Insights ouvertes en même temps, vous pouvez voir l'une cesser de recevoir des messages tandis que l'autre commence à les recevoir. Ceci complète la séquence d'événements déclenchés en modifiant simplement la valeur secrète dans KeyVault.
Déploiement de l'exemple
Le déploiement de cet exemple utiliseTerraforme, et est livré prêt à l'emploi avec unConteneur de développement de code Visual Studiopour vous assurer que vous disposez de tout ce dont vous avez besoin pour effectuer le déploiement. Si c'est la première fois que vous utilisez un conteneur de développement, assurez-vous de parcourirles étapes d'installationpour vous assurer d'avoir tout ce dont vous avez besoin.
1. Cloner le dépôt
Clonez ce référentiel, ou votre propre fork, sur votre ordinateur local.
2. Ouvrez l'espace de travail dans son conteneur
Lorsque vous y êtes invité par Visual Studio Code, rouvrez l'espace de travail dans son conteneur de développement. Cela peut prendre quelques minutes pour installer toutes les couches de conteneur et vous amener à une invite bash. Assurez-vous que Docker est en cours d'exécution ;)
3. Connectez-vous à Azure CLI
Dans le terminal bash de VS Code, émettez leconnexion az
commande etaz account set --subscription
pour vous connecter à Azure et cibler l'abonnement dans lequel vous souhaitez déployer l'exemple.
4. Créer un principal de service
Pour rendre le déploiement de l'application logique entièrement autonome et lui permettre de s'authentifier auprès d'Event Grid sans flux OAuth, vous allez créer un principal de service sur votre abonnement Azure en émettant leaz ad sp créer-pour-rbac
commande. Une fois cette opération terminée, vous obtiendrez une sortie qui ressemble à ceci :
{ "appId": "...", "displayName": "...", "name": "...", "password": "...", "locataire": "..." }
Sauver laID d'application
etmot de passe
champs de cette sortie pour l'étape suivante
5. Déployer via Terraform
Dans la fenêtre du terminal de VSCode, lancez les commandes suivantes :
cd terraformterraform apply -var prefix= -var sp_client_id= -var sp_client_secret=
Cela affichera d'abord toutes les modifications qui seront apportées à votre abonnement Azure dans le cadre du déploiement de Terraform, et attendra que vous tapiez "oui" pour que l'application ait lieu. Pour cet exemple, les ressources suivantes sont déployées :
- Un nouveau groupe de ressources nommé `serverless-sample-' contenant :
- Connexion de l'API Logic Apps à Event Grid
- 2 instances Application Insights
- Coffre à clés
- Plan de service d'application de consommation
- Fonction Azure
- Application logique
- Espace de travail Log Analytics
- Compte de stockage
Tapez "oui" et Terraform fonctionnera sa magie.
6. Ajoutez le paramètre d'application pour le secret Application Insights KeyVault à l'application de fonction
Une sortie de Terraform est un script de déploiement que vous devez exécuter afin de remplir le paramètre d'application de l'application de fonction pour Application Insights ainsi que de déployer réellement le code de fonction. Dans votre fenêtre de terminal bash VSCode, exécutez simplement
./deploy_app.sh
Remarque : Vous devrez peut-être actualiser les fichiers dans le panneau de l'explorateur dans VS Code pour voir le fichier généré.
deploy_app.sh
déposer sousterraformer
dossier.
duterraformer/
répertoire dans lequel vous vous trouvez après l'exécutionterraform appliquer
.
Remarque : nous ne pouvons pas (encore) définir la valeur APPINSIGHTS_INSTRUMENTATIONKEY via Terraform, car elle effacera tous les autres paramètres d'application si nous déployons via le modèle ARM, et il existe une condition de concurrence entre l'application de fonction et KeyVault si nous essayons de l'intégrer dans le cadre du déploiement de la Function App. Dans un scénario de production, cela serait fait dans le cadre du pipeline DevOps utilisé pour exécuter le plan Terraform. De même, le pipeline DevOps créerait et déploierait l'application Function.
7. Observez le résultat
La fonction Azure
Dans votre portail, accédez à la fonction Azure nouvellement créée. Son nom sera le
valeur que vous avez mise lors du déploiement de Terraform.
Il y a quelques choses à remarquer :
- L'application Function a une fonction :
Minuterie5sec
- Sous
Configuration
vous trouverez la référence Application Setting KeyVault pourAPPINSIGHTS_INSTRUMENTATIONKEY
\
Remarque : Il est important de noter lemanqued'un spécificateur de version secret dans l'URL. En utilisant cette méthode, nous récupérons toujours la dernière version du secret, permettant le comportement souhaité. Vous pouvez également créer un processus quimises à jourle
APPINSIGHTS_INSTRUMENTATIONKEY
paramètre d'application avec l'URL qui apparaît dans le cadre de l'événement Event Grid pourNouvelleVersionSecrète
.
Remarquez le
Statut
marqueur sur la référence ; cela vous indique que la connexion entre l'application Function et KeyVault est bonne, et qu'elle est capable d'extraire la valeur de KeyVault comme prévu
- Dans la zone IAM (contrôle d'accès) de l'application de fonction, sous affectations de rôle, vous trouverez une entrée pour l'application logique.
Cela existe pour donner à l'application logique les autorisations nécessaires pour émettre la demande de réinitialisation logicielle à l'application de fonction. Sans cela, la demande d'API REST Azure effectuée par l'application logique reçoit un403 INTERDIT
réponse.
Le lien entre l'application logique et la fonction Azure est réalisé par cette partie dansmain.tf:
################################################# ################################# Affectation des rôles############### ################################################# #################ressource "azurerm_role_assignment" "laToFunction" { scope = azurerm_function_app.fxn.id role_definition_name = "Contributeur du site Web" principal_id = azurerm_template_deployment.logicapp.outputs["logicAppServicePrincipalId"] }
et le fait que l'application logique a été créée avec une identité de service géré qui lui est attribuée dans le cadre du déploiement de son modèle ARM :
"identity": { "type": "SystemAssigned"},
- L'application de fonction elle-même a une identité de service gérée :
Cela fait partie de la configuration de la fonction Azure pour utiliser les références KeyVault et permet à KeyVault de restreindre l'accès aux clés, secrets et autres éléments à certaines identités uniquement. Cet accès est appliqué par cette partie de notre déploiement Terraform :
# stratégie d'accès pour la fonction azur access_policy { object_id = azurerm_function_app.fxn.identity[0].principal_id tenant_id = data.azurerm_client_config.current.tenant_id secret_permissions = [ "get", ] }
qui garantit que même si quelqu'un devait soumettre un code de fonction qui tentait de modifier une valeur dans le KeyVault, cela ne serait pas autorisé ; la fonction n'a que les autorisations "Get Secret", c'est tout ce dont elle a besoin.
L'application logique
Dans votre portail, accédez à l'application logique nouvellement créée. Son nom sera
où
est la valeur que vous mettez lors du déploiement de Terraform.
Logique d'exécution
Cliquez surConcepteur d'applications logiques
dans la partie gauche du panneau afin que vous puissiez voir la surface de conception de l'application logique.
Cliquer sur la barre de titre de chaque bloc dans l'application logique développera son contenu pour ressembler à ceci :
Examinons chaque bloc de Logic.
Ce bloc câble ledéclencherde l'application logique. Lorsque nous le créons via le déploiement de modèles ARM dans Terraform, il demande automatiquement un abonnement Event Grid à la ressource indiquée dans
Nom de la ressource
et écoute le type d'événement indiqué dansÉlément de type d'événement - 1
. Le déclencheur de l'application logique prend en charge l'événement Event Grid Subscription Validation afin que tout puisse communiquer sans problème.Dans le cadre de notre Terraform, nous remplissons la valeur de cette variable d'application logique avec les noms secrets que nous avons mis dans KeyVault.
Nous utilisons cette instruction "si" (alias bloc de condition) pour dire "si le sujet de l'événement que nous avons obtenu (qui correspond au nom du secret qui a déclenché le
NouvelleVersionSecrète
événement) est dans notrekeysToWatch
variable de tableau" afin que nous puissions ignorer les modifications apportées aux autres secrets dans le même coffre.Ici, nous utilisons l'API Azure REST pour obtenir la liste des paramètres d'application actuels pour l'application de fonction, car lorsque nous mettons à jour, nous devons donnertousles valeurs de réglage de l'application, pas seulement celles qui ont été modifiées.
Nous analysons la réponse du
OBTENIR
appeler et émettre leMETTRE
appel aux paramètres lors de l'utilisation de Logic AppssetProperty
fonction pour régler la valeur de laAPPINSIGHTS_INSTRUMENTATIONKEY
réglage à la nouvelle valeur.
Vous remarquerez que les deux appels REST utilisent l'authentification Managed Identity en prenant l'identité que nous avons attribuée à l'application logique, et le rôle d'accès utilisateur indiqué précédemment qui aContributeur de site Web
accès à l'application de fonction. Si ce rôle d'accès utilisateur est manquant, ce bloc de l'application logique échouera.
Configuration
La partie importante de la configuration de l'application logique est que notre déploiement Terraform lui a attribué une identité gérée. Vous pouvez voir cela dans leIdentité
zone de l'application logique :
Coffre à clés
Dans votre portail, accédez au coffre de clés nouvellement créé. Son nom sera le
valeur que vous avez mise lors du déploiement de Terraform.
Les éléments importants du coffre de clés pour cet exemple sont lesÉvénements
etPolitiques d'accès
zone
Configuration des événements
Précédemment, vous avez vu le déclencheur Logic App Event Grid configuré pour recevoir des événements de la ressource Key Vault. Lorsque Logic App est déployé avec ce connecteur en place, il crée automatiquement l'abonnement Event Grid à partir de l'instance Key Vault. Clique leÉvénements
zone de votre KeyVault et notez leAbonnements
zone près du bas :
Ici, vous voyez que l'application logique s'est enregistrée en tant que récepteur de webhook pour les événements du KeyVault.
Politiques d'accès
Pour que la Function App puisse lire les valeurs des secrets Key Vault, rappelez-vous, notre Terraform lui a accordé cette autorisation dans la configuration du KeyVault. Vous pouvez le voir dans la zone Stratégies d'accès :
Rassembler le tout
Si vous ouvrez le flux en direct pour la première instance d'Application Insights (avec le-d'abord
suffixe), vous verrez la fonction enregistrer joyeusement les messages toutes les 5 secondes environ :
Passer à Application Insights secondaire (avec le-deuxième
suffixe), vous verrez probablement un écran comme celui-ci :
Mais si vous prenez la clé d'instrumentation de l'instance secondaire et mettez à jour le secret KeyVaultappinsights-instrumentationkey
avec elle, vous verrez ce comportement changer à mesure que l'événement se propage dans le système et l'application de fonction est réinitialisée en douceur pour récupérer la nouvelle valeur de KeyVault !
FAQs
How do you rotate secrets in Azure key vault? ›
You can assign a "Key Vault Crypto Officer" role to manage rotation policy and on-demand rotation. If you use an access policies permission model, it is required to set 'Rotate', 'Set Rotation Policy', and 'Get Rotation Policy' key permissions to manage rotation policy on keys.
How do I use Keyvault in Azure function? ›In the Resource Group, click “Add” to add a new service and search for “Key Vault”. Select “Key Vault, followed by “Create” in order to open the configuration of your new “Key Vault” service. Provide a name for the Key Vault, select your subscription and add it to a new or existing resource group.
What is key rotation in Azure key vault? ›Azure Key Vault rotation integration with Event Grid
Integrate Azure Key Vault with Event Grid to receive notifications. It is possible to go one step further and provide an approval process that automatically rotates the keys based on the approval. Access the key vault and click Events to enable event grid monitoring.
Azure Key Vault is a cloud service to store secrets and sensitive information. It eliminates the need to maintain configuration files or environment variables to store sensitive information.
How do I access the secret from the key vault? ›If you select on the current version, you can see the value you specified in the previous step. By clicking "Show Secret Value" button in the right pane, you can see the hidden value. You can also use Azure CLI, or Azure PowerShell to retrieve previously created secret.
How do I access Azure key vault secrets through REST API? ›- Within Postman we'd first fetch the token.
- Get the URL from endpoints.
- Format – https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/token. ...
- Create the new Get request and pass the Secret identifier with the API version.
- Create a key vault by following the Key Vault quickstart.
- Create a managed identity for your application. ...
- Create an access policy in Key Vault for the application identity you created earlier.
With Key Vault, Microsoft doesn't see or extract your keys. Monitor and audit your key use with Azure logging—pipe logs into Azure HDInsight or your security information and event management (SIEM) solution for more analysis and threat detection.
How do I access Keyvault from Azure app service? ›- Log in to the Azure Portal.
- In the left-pane menu, click Key vaults.
- Click your key vault, then select Access policies.
- Click Add Access Policy.
Authorization may be done via Azure role-based access control (Azure RBAC) or Key Vault access policy. Azure RBAC can be used for both management of the vaults and access data stored in a vault, while key vault access policy can only be used when attempting to access data stored in a vault.
What is private key rotation? ›
Key rotation is the process of retiring an encryption key and replacing it with a new encryption key. See Also: What Are the PCI DSS Encryption Requirements. By rotating keys regularly, you may stay in compliance with industry standards and cryptographic best practices.
What is the default Azure key Vault virtual network access setting? ›By default, when you create a new key vault, the Azure Key Vault firewall is disabled. All applications and Azure services can access the key vault and send requests to the key vault.
Is Azure key Vault a secret or key? ›Azure Key Vault is a cloud service for securely storing and accessing secrets. A secret is anything that you want to tightly control access to, such as API keys, passwords, certificates, or cryptographic keys. Key Vault service supports two types of containers: vaults and managed hardware security module(HSM) pools.
How many key vaults should you use Azure? ›Our recommendation is to use a vault per application per environment (development, pre-production, and production), per region. This helps you not share secrets across environments and regions.
What type of key is Azure key vault? ›Azure Key Vault provides two types of resources to store and manage cryptographic keys. Vaults support software-protected and HSM-protected (Hardware Security Module) keys. Managed HSMs only support HSM-protected keys.
Can I use Azure key Vault as password manager? ›Azure Key Vault is a service that you can use within your Azure Subscription to securely store passwords (secrets), keys, and certificates in one centralized location.
How do I connect to Azure key vault in .NET core? ›- Select the Create a resource option in the upper-left corner of the Azure portal:
- In the search box, type Key Vault and select Key Vault from the drop-down.
- From the results list, select Key vaults on the left.
- In Key vaults, select Add.
- On the right in Create key vault, provide the following information:
Select the key vault from the list to which you want to add a private endpoint. Select the "Networking" tab under Settings. Select the "Private endpoint connections" tab at the top of the page. Select the "+ Create" button at the top of the page.
How do I find my Azure access key and secret key? ›View account access keys
In the Azure portal, go to your storage account. Under Security + networking, select Access keys. Your account access keys appear, as well as the complete connection string for each key. Select Show keys to show your access keys and connection strings and to enable buttons to copy the values.
In your key vault -> Access policies -> Add Access Policy, search this managed identity to grant Get and List permissions in the Secret permissions dropdown. It allows this designated factory to access secret in key vault.
How do I find my key vault client ID and secret? ›
- Login to the Azure Portal.
- Navigate to Azure Active Directory.
- Select App Registrations , locate the Azure AD App that you're trying to find the Client ID and Client Secret Key for.
- Within the Azure AD App, select Certificates & Secrets.
Vault does not store the key on disk. It's stored in memory all the time.
What is an example of Azure key vault? ›Azure Key Vault is a cloud service for securely storing and accessing secrets. API keys, passwords, certificates, and cryptographic keys are examples of things you might want to keep private.
What is Azure key vault for app secrets? ›Azure Key Vault allows you to securely store service or application credentials like passwords and access keys as secrets. All secrets in your key vault are encrypted with a software key. When you use Key Vault, you no longer need to store security information in your applications.
How do I access Azure App Service app settings? ›Configure general settings. In the Azure portal, search for and select App Services, and then select your app. In the app's left menu, select Configuration > General settings. Here, you can configure some common settings for the app.
What is the difference between Azure App Service configuration and key vault? ›Azure Key Vault is a cloud service that provides secure storage and access to secrets. Azure App Configuration is a cloud service that provides access to centrally managed application settings and provides an interface for fetching Azure Key Vault secrets.
What does it mean if a service is in private preview mode? ›Private preview – During this phase we invite a few customers to take part in early access to new concepts and features. This phase does not include formal support. Public preview – During this phase we allow any customer with the proper Azure AD license to evaluate the new feature.
What makes Azure key Vault secure? ›Azure Key Vault protects cryptographic keys, certificates (and the private keys associated with the certificates), and secrets (such as connection strings and passwords) in the cloud.
What is phantom private key? ›Your private key is a list of letters and numbers—different to your Secret Recovery Phrase. On Phantom, you can find this via the 'settings cog' in the bottom right-hand corner and click 'export Private Key'. It's essential never to save this in text documents and do not share it with others.
What does private key in keychain mean? ›A private key, also known as a secret key, is a variable in cryptography that is used with an algorithm to encrypt and decrypt data. Secret keys should only be shared with the key's generator or parties authorized to decrypt the data.
What is my private key used for? ›
The private key is used to compute a digital signature that may be verified by the corresponding public key. A cryptographic key used with a public-key cryptographic algorithm that is uniquely associated with an entity and is not made public. The private key has a corresponding public key.
What is Azure private link? ›Azure Private Link provides private connectivity from a virtual network to Azure platform as a service (PaaS), customer-owned, or Microsoft partner services. It simplifies the network architecture and secures the connection between endpoints in Azure by eliminating data exposure to the public internet.
What is the access port for Keyvault? ›All traffic to a key vault for all three functions (authentication, management, and data plane access) goes over HTTPS: port 443. However, there will occasionally be HTTP (port 80) traffic for CRL.
How do you allow public access from specific virtual networks and IP addresses? ›Locate the Networking settings under Security + networking. Choose which type of public network access you want to allow: To allow traffic from all networks, select Enabled from all networks. To allow traffic only from specific virtual networks, select Enabled from selected virtual networks and IP addresses.
How do you rotate keys in vault? ›To rotate the key value, generate a new key in a different key label in the HSM and update Vault's configuration with the new key label value. Restart your Vault instance to pick up the new key label and all new encryption operations will use the updated key label.
What is secret key rotation? ›It is the process by which the encryption key, used for securing Secret data, is changed and Secret data is re-encrypted. Each Secret receives a new, unique AES-256 encryption key. Secret key rotation can be used to meet compliance requirements that mandate encryption keys be changed on a regular basis.
What is key rotation in secrets manager? ›Rotation is the process of periodically updating a secret. When you rotate a secret, you update the credentials in both the secret and the database or service. In Secrets Manager, you can set up automatic rotation for your secrets.
When should vault keys be rotated? ›Periodic rotation of the encryption keys is recommended, even in the absence of compromise. Due to the nature of the AES-256-GCM encryption used, keys should be rotated before approximately 232 encryptions have been performed, following the guidelines of NIST publication 800-38D.
What are key vault keys? ›Microsoft Azure Key Vault is a cloud-based security service offered by Microsoft as part of its Azure platform. It provides a secure and centralized storage solution for cryptographic keys and secrets, such as passwords, certificates and keys used for encryption.
What is vault master key? ›Oracle Cloud Infrastructure Vault is a key management service that stores and manages master encryption keys and secrets for secure access to resources. This topic gives an overview of Vault key management service and its key concepts.
What is secret key Android? ›
The Keystore API uses both types of cryptography in order to safeguard secrets. A public/private key RSA pair is generated, which is stored in the Android device's keystore and protected usually by the device PIN. An AES-based symmetric key is also generated, which is used to encrypt and decrypt the secrets.
How do I enable secret Autorotation? ›To enable auto rotation, enable the --enable-secret-rotation feature gate for the secrets-store container in the Secrets Store CSI Driver pods. The rotation poll interval can be configured using --rotation-poll-interval . The default rotation poll interval is 2m .
What is secret ID in secret manager? ›A secret in Secrets Manager consists of both the protected secret data and the important information needed to manage the secret. For secrets that use managed rotation, you need to create the secret through the managing service. For more information, see Secrets Manager secrets managed by other AWS services.