Objectives
Iteration 1
Iterations 2 & 3
Iteration 4 and MVP review
Benefits
|
|---|
Acceptance Criteria
Mirroring a client engagement, it is important to define acceptance criteria that, in conjunction with technical peer review will feed into an evolving a “definition of done“ that encompasses all major customer requirements, appropriate review and tweaking of the solution for indication and progress, a traffic light system |
| |
|---|---|---|
| not started to in progress (to be reviewed) | |
| going well to complete (reviewed - OK) | |
| not going well to failed (reviewed - FAIL) | |
| completed and accepted or rejected |
Functionality, Features, Usability and Automation
Review
Compliance
Documentation
Integration
Design
Requirements Definiton
|
|---|
Solution Overview and Breakdown
|
|---|
High Level Designcreate the resources and mechanism's such that we can
Always process the general section for user details We now have an extensible templated solution that can be added to with additional requirements If defined subscription: section
If defined service_principal: section If defined automation: section |
|---|
Components - High Levelstorage, management and processing
configuration deployment
resources and services
|
|---|
Components - Technology Selection
|
|---|
Detailed DesignINterface/WebUIProcessing config filesLorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. Deployment :AAD Tenant Guest AccessLorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. Section Processing: SubscriptionsSection Processing: Service Principal Section Processing: GitHub Repo Post Processing: Outout |
|---|
Planning
iteration 1 - a simple startwith access to an EA Account, you want to
in this simple configuration, your users will be provided a new account to the tenant and login to access their subscription Azureaz login az login -t YourTenantName.onmicrosoft.com --use-device-code az Enterprise Billingaz Azure Subscription Resources Creation
summary #!/bin/bash |
|---|
iteration 2 - adding cross-tenant complexityBuilding on the initial simple config where as an Administrator in the new Tenant, we can create a new EA Subscription either via portal or simple CLI, while using the Azure Billing Enrolment Account originally we use a single tenant, but to add to the complexity:
Summary#!/bin/bash |
|---|
iteration 3 - graduating to IaC - Service PrincipalsNow that we have
we essentially have a way for an admin user to create subscriptions - or to script that automation via az-cli now we have the process and permissions, we will switch from using a manual user, in favor of a service principal
### Define app registration name, etc.
appregname=myappregtest1
clientid=$(az ad app create --display-name $appregname --query appId --output tsv)
objectid=$(az ad app show --id $clientid --query objectId --output tsv)
default_scope=$(az ad app show --id $clientid | jq '.oauth2Permissions[0].isEnabled = false' | jq -r '.oauth2Permissions')
az ad app update --id $clientid --set oauth2Permissions="$default_scope"
az ad app update --id $clientid --set oauth2Permissions="[]"
az rest -m post -u https://graph.microsoft.com/v1.0/applications --headers 'Content-Type=application/json' --body '{"displayName": "xxx"}'
### Use --query to obtain the client app id
clientid=$(az rest -m post -u https://graph.microsoft.com/v1.0/applications --headers 'Content-Type=application/json' --body '{"displayName": "myappregtest1"}' --query appId --output tsv)
as above
az rest -m GET -u "https://management.azure.com/providers/Microsoft.Billing/enrollmentAccounts?api-version=2018-03-01-preview"
az role assignment create --role Owner --assignee-object-id <userObjectId> --scope /providers/Microsoft.Billing/enrollmentAccounts/<enrollmentAccountObjectId>
RERQUEST_BODY=$(cat <<EOF
{
"properties": {
"principalId": "99a1a759-30dd-42c2-828c-db398826bb67",
"principalTenantId": "7ca289b9-c32d-4f01-8566-7ff93261d76f",
"roleDefinitionId": "/providers/Microsoft.Billing/billingAccounts/7898901/enrollmentAccounts/225314/billingRoleDefinitions/a0bcee42-bf30-4d1b-926a-48d21664ef71"
}
}
EOF
)
az rest -m POST -u "PUT https://management.azure.com/providers/Microsoft.Billing/billingAccounts/{billingAccountName}/enrollmentAccounts/{enrollmentAccountName}/billingRoleAssignments/{billingRoleAssignmentName}?api-version=2019-10-01-preview" --body "${REQUEST_BODY}""
Summary#!/bin/bash |
|---|
iteration 4 - Hands-off non-interactiveWe now have
We can start to build the process in terraform - taking each manual or scripted stage and identify what terraform resources we will need to read and create. For each step of the process, you can verify your code as you work - doing terraform plan after each new resource is added to the terraform
Summary#!/bin/bash az rest --method GET --url https://graph.microsoft.com/v1.0/users az rest --method GET --url https://graph.microsoft.com/v1.0/users | jq '.value | .[]| select(.userPrincipalName == "paul.kelleher@contino.io")'`cccc |
|---|
Welcome to MVP world - population you! |
|---|
iteration 5 - Feature DevelopmentSummary |
|---|
iteration 6 -WebUIinfo Summary |
|---|
Conclusions
Lorem Ipsum |
|---|
References
Lorem Ipsum |
|---|
To be removed before publication












