#ansible #terraform #azure-ad-b2c #azure-cli
#ansible #terraform #azure-ad-b2c #azure-cli
Вопрос:
Я следовал нескольким руководствам Microsoft по настройке Azure B2C с помощью моего веб-приложения и rest api. например https://learn.microsoft.com/en-ca/azure/active-directory-b2c/tutorial-single-page-app-webapi?tabs=app-reg-ga
Было много вопросов, и теперь это работает.
Вся настройка была выполнена на портале, и теперь она кажется очень хрупкой, поскольку мне потребовалось несколько попыток, чтобы все было правильно.
Остальная часть моего развертывания Azure настроена с помощью Terraform, Ansible и Azure CLI.
Я не видел никакой поддержки B2C ни для одного из них.
Есть ли альтернатива? Можете ли вы экспортировать конфигурацию в файл в качестве резервной копии?
Что, если что-то сломается? Как мне вернуться к предыдущей рабочей версии?
Комментарии:
1. Почему вы думаете, что это хрупко? Согласно документации, процесс настройки не является сложным. Вообще говоря, ваша конфигурация в другом месте не влияет на конфигурацию B2C. Я думаю, наиболее вероятным изменением является разрешение конфигурации ( learn.microsoft.com/en-ca/azure/active-directory-b2c /… -ga#предоставить-разрешения), но это относительно легко контролировать.
2. Он хрупкий, потому что мне пришлось создать его в графическом интерфейсе, и он не сработал с первого раза, и мне пришлось внести несколько изменений, чтобы заставить его работать, так что теперь я не на 100% соответствую конфигурации. Это тот же основной аргумент для всей инфраструктуры, что и код.
3. Можете ли вы экспортировать конфигурацию в файл в качестве резервной копии? Да — используйте ссылку «Загрузить» в верхней части каждой пользовательской политики.
4. @AllenWu Сегодня мой интерфейс (для разработчиков) не работал, потому что у меня не было правильных утверждений. Я пытался исправить некоторые вещи, следуя руководству, и я изменил атрибуты пользователя. Только когда веб-приложение сломалось, я понял, что произошло. Следовательно, конфигурация хрупкая.
Ответ №1:
Вы можете использовать graph api и управлять им с помощью конвейера CICD.
https://learn.microsoft.com/en-us/azure/active-directory-b2c/microsoft-graph-operations
https://learn.microsoft.com/en-us/azure/active-directory-b2c/deploy-custom-policies-devops
Ответ №2:
Вы можете автоматизировать процесс, используя приведенный ниже сценарий Powershell для создания service principal
и provider.tf
:
#!/bin/bash
error()
{
if [[ -n "$@" ]]
then
tput setaf 1
echo "ERROR: $@" >amp;2
tput sgr0
fi
exit 1
}
yellow() { tput setaf 3; cat - ; tput sgr0; return; }
cyan() { tput setaf 6; cat - ; tput sgr0; return; }
# Grab the Azure subscription ID
subId=$(az account show --output tsv --query id)
[[ -z "$subId" ]] amp;amp; error "Not logged into Azure as expected."
# Check for existing provider.tf
if [[ -f provider.tf ]]
then
echo -n "The provider.tf file exists. Do you want to overwrite? [Y/n]: "
read ans
[[ "${ans:-Y}" != [Yy] ]] amp;amp; exit 0
fi
sname="terraform-${subId}-sp"
name="http://${sname}"
# Create the service principal
echo "az ad sp create-for-rbac --name "$name"" | yellow
spout=$(az ad sp create-for-rbac --role="Contributor" --scopes="/subscriptions/$subId" --name "$sname" --output json)
# If the service principal has been created then offer to reset credentials
if [[ "$?" -ne 0 ]]
then
echo -n "Service Principal already exists. Do you want to reset credentials? [Y/n]: "
read ans
if [[ "${ans:-Y}" = [Yy] ]]
then spout=$(az ad sp credential reset --name "$name" --output json)
else exit 1
fi
fi
[[ -z "$spout" ]] amp;amp; error "Failed to create / reset the service principal $name"
# Echo the json output
echo "$spout" | yellow
# Derive the required variables
clientId=$(jq -r .appId <<< $spout)
clientSecret=$(jq -r .password <<< $spout)
tenantId=$(jq -r .tenant <<< $spout)
echo -e "nWill now create a provider.tf file. Choose output type."
PS3='Choose provider block type: '
options=("Populated azurerm block" "Empty azurerm block with environment variables" "Quit")
select opt in "${options[@]}"
do
case $opt in
"Populated azurerm block")
cat > provider.tf <<-END-OF-STANZA
provider "azurerm" {
subscription_id = "$subId"
client_id = "$clientId"
client_secret = "$clientSecret"
tenant_id = "$tenantId"
}
END-OF-STANZA
echo -e "nPopulated provider.tf:"
cat provider.tf | yellow
echo
break
;;
"Empty azurerm block with environment variables")
echo "provider "azurerm" {}" > provider.tf
echo -e "nEmpty provider.tf:"
cat provider.tf | yellow
echo >amp;2
export ARM_SUBSCRIPTION_ID="$subId"
export ARM_CLIENT_ID="$clientId"
export ARM_CLIENT_SECRET="$clientSecret"
export ARM_TENANT_ID="$tenantId"
echo "Copy the following environment variable exports and paste into your .bashrc file:"
cat <<-END-OF-ENVVARS | cyan
export ARM_SUBSCRIPTION_ID="$subId"
export ARM_CLIENT_ID="$clientId"
export ARM_CLIENT_SECRET="$clientSecret"
export ARM_TENANT_ID="$tenantId"
END-OF-ENVVARS
break
;;
"Quit")
exit 0
;;
*) echo "invalid option $REPLY";;
esac
done
echo "To log in as the Service Principal then run the following command:"
echo "az login --service-principal --username "$clientId" --password "$clientSecret" --tenant "$tenantId"" | cyan
exit 0
Скрипт будет интерактивно:
- Создайте участника службы (или сбросьте учетные данные, если он уже существует)
- Запрашивает выбор заполненного или пустого
provider.tf
блока поставщика azurerm экспортирует переменные среды, если вы выбрали пустой блок (и отображаете команды) - Отобразите
az login
команду для входа в систему в качестве участника службы
Следующая команда загрузит и запустит его:
uri=https://raw.githubusercontent.com/azurecitadel/azurecitadel.github.io/master/automation/terraform/createTerraformServicePrincipal.sh
curl -sL $uri > createTerraformServicePrincipal.sh amp;amp; chmod 750 createTerraformServicePrincipal.sh
./createTerraformServicePrincipal.sh
Обратитесь к этой замечательной статье Ричарда Чейни об этом — https://azurecitadel.com/automation/terraform/lab5 /
Комментарии:
1. Для меня это очень похоже на сценарий bash 🙂