Files
AzAppRegistrationExpiry/README.md
2025-01-28 18:14:55 +00:00

2.5 KiB

Azure Function App for Secret Expiry Notifications

This Azure Function App fetches Azure App Registrations, checks for expiring secrets, and sends email notifications to the owners.

Prerequisites

  • Azure Subscription
  • Azure CLI
  • Python 3.11
  • Azure DevOps account
  • Self-hosted agent (optional)

Setup

Local Development

  1. Clone the repository:

    git clone https://github.com/OliPassey/AzAppRegistrationExpiry.git  
    cd AzAppRegistrationExpiry  
    
  2. Create local dev environment & Install dependencies: Make sure you have Python3.11 installed, then run:

       python3.11 -m venv .venv
       source .venv/bin/activate
       pip install -r requirements.txt
    
  3. Configure environment variables: Create a local.settings.json file in the root of the function app directory with the following contents
    {
    "IsEncrypted": false,
    "Values": {
    "AzureWebJobsStorage": "",
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "AZURE_CLIENT_ID": "",
    "AZURE_CLIENT_SECRET": "",
    "AZURE_TENANT_ID": "",
    "SMTP_SERVER": "",
    "SMTP_PORT": "",
    "SMTP_USERNAME": "",
    "SMTP_PASSWORD": "",
    "FROM_EMAIL": "",
    "FROM_NAME": "",
    "TO_EMAIL": ""
    }
    }

  4. Run the function locally: Use the Azure Functions Core Tools to run the function:

    func start
    

Usage

Once the function is running, it will run every week day morning at 9am and send an email with results. The TO_EMAIL should be the administrator email for EntraID or whoever looks after App Registrations. It will also CC: all App Owners as listed in the App Registration.

Deployment

  1. Create an Azure DevOps Project (Private)
  2. Create a Variable Group in Azure DevOps:

Go to Pipelines > Library.

Click on + Variable group.

Name your variable group (e.g., MyVariableGroup).

Add the following variables and mark sensitive variables as secrets:

AzureWebJobsStorage
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
AZURE_TENANT_ID
SMTP_SERVER
SMTP_PORT
SMTP_USERNAME
SMTP_PASSWORD
FROM_EMAIL
FROM_NAME
TO_EMAIL

  1. Create a Pipeline from the Azure-pipeline.yaml file in the root of the repo
  2. Run the Pipeline:

Trigger the pipeline to deploy the infrastructure and the function app code.