Managing secrets and secure access in Azure applications
Example of managing the secrets and permissions via services and features like KeyVault, AD Managed Identity, AD RBAC in Python
This example lives in the pulumi/examples repository. Check out just this directory to use it:
git clone --filter=blob:none --sparse https://github.com/pulumi/examples pulumi-examplesgit -C pulumi-examples sparse-checkout set classic-azure-py-msi-keyvault-rbaccd pulumi-examples/classic-azure-py-msi-keyvault-rbacManaged identities for Azure resources provides Azure services with an automatically managed identity in Azure Active Directory (Azure AD).
This example demonstrates using a managed identity with Azure App Service to access Azure KeyVault, Azure Storage, and Azure SQL Database without passwords or secrets.
The application consists of several parts:
- An ASP.NET Application which reads data from a SQL Database and from a file in Blob Storage
- App Service which host the application. The application binaries are placed in Blob Storage, with Blob Url placed as a secret in Azure Key Vault
- App Service has a Managed Identity enabled
- The identify is granted access to the SQL Server, Blob Storage, and Key Vault
- No secret information is placed in App Service configuration: all access rights are derived from Active Directory
Prerequisites#
- Install Pulumi
- Configure Azure credentials
- Install Python
- Install .NET (to build and publish the ASP.NET Core web app)
Deploying the example#
-
Create a new stack:
Terminal window pulumi stack init dev -
Log in to the Azure CLI (you will be prompted to do this during deployment if you forget this step):
Terminal window az login -
Set an appropriate Azure location and subscription:
Terminal window pulumi config set azure:location westuspulumi config set azure:subscriptionId <YOUR_SUBSCRIPTION_ID> -
Install dependencies:
Terminal window python3 -m venv venvsource venv/bin/activatepip install -r requirements.txt -
Build and publish the ASP.NET Core project:
Terminal window dotnet publish webapp -
Run
pulumi upto preview and deploy changes:Terminal window pulumi upPreviewing changes:...Performing changes:...info: 15 changes performed:+ 15 resources createdUpdate duration: 4m16s -
Check the deployed website endpoint:
Terminal window pulumi stack output endpointcurl "$(pulumi stack output endpoint)"https://app129968b8.azurewebsites.net/Hello 311378b3-16b7-4889-a8d7-2eb77478beba@50f73f6a-e8e3-46b6-969c-bf026712a650! Here is your...
Cleaning up#
Once you are done, destroy the stack and remove it:
pulumi destroypulumi stack rm