@@ -181,6 +181,8 @@ IOT_HUB_PUBSUB_CONSUMER_GROUP_VAR_NAME="AzureIotHubPubsubConsumerGroup"
181181
182182KEYVAULT_CERT_NAME=" AzureKeyVaultSecretStoreCert"
183183KEYVAULT_CLIENT_ID_VAR_NAME=" AzureKeyVaultSecretStoreClientId"
184+ KEYVAULT_SERVICE_PRINCIPAL_CLIENT_SECRET_VAR_NAME=" AzureKeyVaultSecretStoreServicePrincipalClientSecret"
185+ KEYVAULT_SERVICE_PRINCIPAL_CLIENT_ID_VAR_NAME=" AzureKeyVaultSecretStoreServicePrincipalClientId"
184186KEYVAULT_TENANT_ID_VAR_NAME=" AzureKeyVaultSecretStoreTenantId"
185187KEYVAULT_NAME_VAR_NAME=" AzureKeyVaultName"
186188
@@ -297,11 +299,17 @@ echo "INFO: SQL_SERVER_ADMIN_NAME=${SQL_SERVER_ADMIN_NAME}"
297299# Give the service principal used by the SDK write access to the entire resource group
298300MSYS_NO_PATHCONV=1 az role assignment create --assignee " ${SDK_AUTH_SP_ID} " --role " Contributor" --scope " /subscriptions/${SUB_ID} /resourceGroups/${RESOURCE_GROUP_NAME} "
299301
300- # Create Identity
302+ # Create Identity if it doesn't exist
301303# We use the standard name "azure-managed-identity" for the identity so we can easily query for it later using the CLI
302- echo " Creating Identity azure-managed-identity"
303- MANAGED_IDENTITY_SP=" $( az identity create -g ${RESOURCE_GROUP_NAME} -n azure-managed-identity --location ${DEPLOY_LOCATION} --query principalId -otsv) "
304- # This identity can later be injected into services for managed identity authentication
304+ if az identity show -g ${RESOURCE_GROUP_NAME} -n azure-managed-identity --query id -otsv; then
305+ echo " Reusing Identity azure-managed-identity"
306+ MANAGED_IDENTITY_SP=" $( az identity show -g ${RESOURCE_GROUP_NAME} -n azure-managed-identity --query principalId -otsv) "
307+ else
308+ echo " Creating Identity azure-managed-identity"
309+ MANAGED_IDENTITY_SP=" $( az identity create -g ${RESOURCE_GROUP_NAME} -n azure-managed-identity --location ${DEPLOY_LOCATION} --query principalId -otsv) "
310+ # This identity can later be injected into services for managed identity authentication
311+ fi
312+
305313MANAGED_IDENTITY_ID=" $( az identity show -g ${RESOURCE_GROUP_NAME} -n azure-managed-identity --query id -otsv) "
306314echo " Created Identity ${MANAGED_IDENTITY_ID} "
307315
@@ -313,6 +321,15 @@ az keyvault set-policy --name "${KEYVAULT_NAME}" -g "${RESOURCE_GROUP_NAME}" --s
313321# Other tests verifying managed identity will want to grant permission like so:
314322# MSYS_NO_PATHCONV=1 az role assignment create --assignee-object-id "${MANAGED_IDENTITY_SP}" --assignee-principal-type ServicePrincipal --role "Azure Service Bus Data Owner" --scope "/subscriptions/${SUB_ID}/resourceGroups/${RESOURCE_GROUP_NAME}/providers/Microsoft.ServiceBus/namespaces/${SERVICE_BUS_NAME}"
315323
324+ # Creating service principal for service principal authentication with KeyVault
325+ AKV_SPAUTH_SP_NAME=" ${PREFIX} -akv-spauth-conf-test-sp"
326+ echo " Creating service principal ${AKV_SPAUTH_SP_NAME} for use with KeyVault ${KEYVAULT_NAME} "
327+ { read AKV_SPAUTH_SP_CLIENT_ID ; read AKV_SPAUTH_SP_CLIENT_SECRET ; } < <( az ad sp create-for-rbac --name ${AKV_SPAUTH_SP_NAME} --skip-assignment --years 1 --query " [appId,password]" -otsv)
328+
329+ # Give the service principal read access to the KeyVault Secrets
330+ AKV_SPAUTH_SP_OBJECTID=" $( az ad sp show --id ${AKV_SPAUTH_SP_CLIENT_ID} --query objectId -otsv) "
331+ az keyvault set-policy --name " ${KEYVAULT_NAME} " -g " ${RESOURCE_GROUP_NAME} " --secret-permissions get list --object-id " ${AKV_SPAUTH_SP_OBJECTID} "
332+
316333# Update service principal credentials and roles for created resources
317334echo " Creating ${CERT_AUTH_SP_NAME} certificate ..."
318335az ad sp credential reset --name " ${CERT_AUTH_SP_NAME} " --create-cert --cert " ${KEYVAULT_CERT_NAME} " --keyvault " ${KEYVAULT_NAME} "
@@ -418,6 +435,13 @@ KEYVAULT_CLIENT_ID="$(az ad sp list --display-name "${CERT_AUTH_SP_NAME}" --quer
418435echo export ${KEYVAULT_CLIENT_ID_VAR_NAME} =\" ${KEYVAULT_CLIENT_ID} \" >> " ${ENV_CONFIG_FILENAME} "
419436az keyvault secret set --name " ${KEYVAULT_CLIENT_ID_VAR_NAME} " --vault-name " ${KEYVAULT_NAME} " --value " ${KEYVAULT_CLIENT_ID} "
420437
438+ KEYVAULT_SERVICE_PRINCIPAL_CLIENT_ID=${AKV_SPAUTH_SP_CLIENT_ID}
439+ echo export ${KEYVAULT_SERVICE_PRINCIPAL_CLIENT_ID_VAR_NAME} =\" ${KEYVAULT_SERVICE_PRINCIPAL_CLIENT_ID} \" >> " ${ENV_CONFIG_FILENAME} "
440+ az keyvault secret set --name " ${KEYVAULT_SERVICE_PRINCIPAL_CLIENT_ID_VAR_NAME} " --vault-name " ${KEYVAULT_NAME} " --value " ${KEYVAULT_SERVICE_PRINCIPAL_CLIENT_ID} "
441+
442+ KEYVAULT_SERVICE_PRINCIPAL_CLIENT_SECRET=${AKV_SPAUTH_SP_CLIENT_SECRET}
443+ echo export ${KEYVAULT_SERVICE_PRINCIPAL_CLIENT_SECRET_VAR_NAME} =\" ${KEYVAULT_SERVICE_PRINCIPAL_CLIENT_SECRET} \" >> " ${ENV_CONFIG_FILENAME} "
444+ az keyvault secret set --name " ${KEYVAULT_SERVICE_PRINCIPAL_CLIENT_SECRET_VAR_NAME} " --vault-name " ${KEYVAULT_NAME} " --value " ${KEYVAULT_SERVICE_PRINCIPAL_CLIENT_SECRET} "
421445# ------------------------------------
422446# Populate Blob Storage test settings
423447# ------------------------------------
0 commit comments