Как я могу настроить Azure B2C автоматически?

#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
  

Скрипт будет интерактивно:

  1. Создайте участника службы (или сбросьте учетные данные, если он уже существует)
  2. Запрашивает выбор заполненного или пустого provider.tf блока поставщика azurerm экспортирует переменные среды, если вы выбрали пустой блок (и отображаете команды)
  3. Отобразите 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 🙂