컨트롤 플레인 배포

SAP 배포 자동화 프레임워크의 컨트롤 플레인 배포는 다음으로 구성됩니다.

  • 배포자
  • SAP 라이브러리

Diagram that shows the control plane.

배포 자격 증명 준비

SAP 배포 자동화 프레임워크는 배포를 위해 서비스 주체를 사용합니다. 컨트롤 플레인 배포를 위한 서비스 주체를 만들려면 서비스 주체를 만들 수 있는 권한이 있는 계정을 사용합니다.

az ad sp create-for-rbac --role="Contributor" --scopes="/subscriptions/<subscriptionID>" --name="<environment>-Deployment-Account"
  

Important

서비스 주체의 이름은 고유해야 합니다.

명령의 출력 값을 기록합니다.

  • appId
  • password
  • 테넌트

선택적으로 서비스 주체에게 다음 권한을 할당합니다.

az role assignment create --assignee <appId> --role "User Access Administrator" --scope /subscriptions/<subscriptionID>

리소스 그룹으로만 범위가 지정된 사용자 액세스 관리자 역할을 제공하려면 다음 명령을 사용합니다.


az role assignment create --assignee <appId> --role "User Access Administrator" --scope /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>

컨트롤 플레인 배포

컨트롤 플레인을 배포하는 데 필요한 모든 아티팩트는 GitHub 리포지토리에 있습니다.

다음 명령을 사용하여 리포지토리를 복제하여 컨트롤 플레인 배포를 준비합니다.

mkdir -p ~/Azure_SAP_Automated_Deployment; cd $_

git clone https://github.com/Azure/sap-automation.git sap-automation

git clone https://github.com/Azure/sap-automation-samples.git samples

샘플 배포자 구성 파일 MGMT-WEEU-DEP00-INFRASTRUCTURE.tfvars~/Azure_SAP_Automated_Deployment/samples/Terraform/WORKSPACES/DEPLOYER/MGMT-WEEU-DEP00-INFRASTRUCTURE 폴더에 있습니다.

샘플 SAP 라이브러리 구성 파일 MGMT-WEEU-SAP_LIBRARY.tfvars~/Azure_SAP_Automated_Deployment/samples/Terraform/WORKSPACES/LIBRARY/MGMT-WEEU-SAP_LIBRARY 폴더에 있습니다.

샘플 구성 파일을 복사하여 배포 자동화 프레임워크 테스트를 시작할 수 있습니다.

DEPLOYER에 대한 최소 Terraform 파일은 다음 예와 같습니다.

# The environment value is a mandatory field, it is used for partitioning the environments.
environment = "MGMT"
# The location/region value is a mandatory field, it is used to control where the resources are deployed
location = "westeurope"

# management_network_address_space is the address space for management virtual network
management_network_address_space = "10.10.20.0/25"
# management_subnet_address_prefix is the address prefix for the management subnet
management_subnet_address_prefix = "10.10.20.64/28"

# management_firewall_subnet_address_prefix is the address prefix for the firewall subnet
management_firewall_subnet_address_prefix = "10.10.20.0/26"
firewall_deployment = false

# management_bastion_subnet_address_prefix is the address prefix for the bastion subnet
management_bastion_subnet_address_prefix = "10.10.20.128/26"
bastion_deployment = true

# deployer_enable_public_ip controls if the deployer Virtual machines will have Public IPs
deployer_enable_public_ip = false

# deployer_count defines how many deployer VMs will be deployed
deployer_count = 1

# use_service_endpoint defines that the management subnets have service endpoints enabled
use_service_endpoint = true

# use_private_endpoint defines that the storage accounts and key vaults have private endpoints enabled
use_private_endpoint = false

# enable_firewall_for_keyvaults_and_storage defines that the storage accounts and key vaults have firewall enabled
enable_firewall_for_keyvaults_and_storage = false

# public_network_access_enabled controls if storage account and key vaults have public network access enabled
public_network_access_enabled = true

나중에 배포 중의 편집을 위해 Terraform 변수 파일 위치를 기록해 둡니다.

LIBRARY에 대한 최소 Terraform 파일은 다음 예와 같습니다.

# The environment value is a mandatory field, it is used for partitioning the environments, for example, PROD and NP.
environment = "MGMT"
# The location/region value is a mandatory field, it is used to control where the resources are deployed
location = "westeurope"

#Defines the DNS suffix for the resources
dns_label = "azure.contoso.net"

# use_private_endpoint defines that the storage accounts and key vaults have private endpoints enabled
use_private_endpoint = false

나중에 배포 중의 편집을 위해 Terraform 변수 파일 위치를 기록해 둡니다.

다음 명령을 실행하여 배포자와 SAP 라이브러리를 만듭니다. 이 명령은 배포 키 자격 증명 모음에 서비스 주체 세부 정보를 추가합니다.

서비스 주체에 대한 환경 변수를 설정합니다.


export ARM_SUBSCRIPTION_ID="<subscriptionId>"
export       ARM_CLIENT_ID="<appId>"
export   ARM_CLIENT_SECRET="<password>"
export       ARM_TENANT_ID="<tenantId>"

다음 명령을 실행하여 컨트롤 플레인을 배포합니다.


export            env_code="MGMT"
export         region_code="WEEU"
export           vnet_code="DEP00"

export DEPLOYMENT_REPO_PATH="${HOME}/Azure_SAP_Automated_Deployment/sap-automation"
export CONFIG_REPO_PATH="${HOME}/Azure_SAP_Automated_Deployment/WORKSPACES"
export SAP_AUTOMATION_REPO_PATH="${HOME}/Azure_SAP_Automated_Deployment/sap-automation"

az logout
az login --service-principal -u "${ARM_CLIENT_ID}" -p="${ARM_CLIENT_SECRET}" --tenant "${ARM_TENANT_ID}"

cd ~/Azure_SAP_Automated_Deployment/WORKSPACES


deployer_parameter_file="${CONFIG_REPO_PATH}/DEPLOYER/${env_code}-${region_code}-${vnet_code}-INFRASTRUCTURE/${env_code}-${region_code}-${vnet_code}-INFRASTRUCTURE.tfvars"
library_parameter_file="${CONFIG_REPO_PATH}/LIBRARY/${env_code}-${region_code}-SAP_LIBRARY/${env_code}-${region_code}-SAP_LIBRARY.tfvars"

${SAP_AUTOMATION_REPO_PATH}/deploy/scripts/deploy_controlplane.sh  \
    --deployer_parameter_file "${deployer_parameter_file}"         \
    --library_parameter_file "${library_parameter_file}"            \
    --subscription "${ARM_SUBSCRIPTION_ID}"                        \
    --spn_id "${ARM_CLIENT_ID}"                                    \
    --spn_secret "${ARM_CLIENT_SECRET}"                            \
    --tenant_id "${ARM_TENANT_ID}"

Azure Bastion을 사용하여 가상 머신을 SDAF 배포자로 수동으로 구성

배포자에 연결하려면 다음을 수행합니다.

  1. Azure Portal에 로그인합니다.

  2. 배포자 VM(가상 머신)이 포함된 리소스 그룹으로 이동합니다.

  3. Azure Bastion을 사용하여 VM에 연결합니다.

  4. 기본 사용자 이름은 azureadm입니다.

  5. Azure Key Vault의 SSH 프라이빗 키를 선택합니다.

  6. 컨트롤 플레인을 포함하는 구독을 선택합니다.

  7. 배포자 키 자격 증명 모음을 선택합니다.

  8. 비밀 목록에서 -sshkey로 끝나는 비밀을 선택합니다.

  9. VM에 연결합니다.

다음 스크립트를 실행하여 배포자를 구성합니다.


mkdir -p ~/Azure_SAP_Automated_Deployment; cd $_

wget https://raw.githubusercontent.com/Azure/sap-automation/main/deploy/scripts/configure_deployer.sh -O configure_deployer.sh	
chmod +x ./configure_deployer.sh
./configure_deployer.sh

# Source the new variables

. /etc/profile.d/deploy_server.sh

스크립트는 Terraform 및 Ansible을 설치하고 배포자를 구성합니다.

가상 머신을 SDAF 배포자로 수동 구성

Azure Virtual Network에 연결할 수 있는 컴퓨터에서 배포자 VM에 연결합니다.

배포자에 연결하려면 다음을 수행합니다.

  1. Azure Portal에 로그인합니다.

  2. 키 자격 증명 모음을 선택하거나 검색합니다.

  3. 키 자격 증명 모음 페이지에서 배포자 키 자격 증명 모음을 찾습니다. 이름은 MGMT[REGION]DEP00user로 시작합니다. 필요한 경우 리소스 그룹 또는 위치로 필터링합니다.

  4. 왼쪽 창의 설정 섹션에서 비밀을 선택합니다.

  5. sshkey를 포함하는 비밀을 찾아 선택합니다. MGMT-[REGION]-DEP00-sshkey인 것처럼 보일 수 있습니다.

  6. 비밀 페이지에서 현재 버전을 선택합니다. 그런 다음, 비밀 값을 복사합니다.

  7. 일반 텍스트 편집기를 엽니다. 비밀 값을 복사합니다.

  8. SSH 키가 담긴 파일을 저장합니다. 예제는 C:\Users\<your-username>\.ssh입니다.

  9. 파일을 저장합니다. 저장 형식 메시지가 표시될 경우 SSH가 옵션에 없으면 모든 파일을 선택합니다. 예를 들면 deployer.ssh를 사용합니다.

  10. Visual Studio Code와 같은 모든 SSH 클라이언트를 통해 배포자 VM에 연결합니다. 배포자의 개인 IP 주소와 다운로드한 SSH 키를 사용합니다. Visual Studio Code를 사용하여 배포자에 연결하는 방법에 대한 지침은 Visual Studio Code를 사용하여 배포자에 연결을 참조하세요. PuTTY를 사용하는 경우 먼저 PuTTYGen을 사용하여 SSH 키 파일을 변환합니다.

참고 항목

기본 사용자 이름은 azureadm입니다.

다음 스크립트를 사용하여 배포자를 구성합니다.

mkdir -p ~/Azure_SAP_Automated_Deployment; cd $_

wget https://raw.githubusercontent.com/Azure/sap-automation/main/deploy/scripts/configure_deployer.sh -O configure_deployer.sh	
chmod +x ./configure_deployer.sh
./configure_deployer.sh

# Source the new variables

. /etc/profile.d/deploy_server.sh

스크립트는 Terraform 및 Ansible을 설치하고 배포자를 구성합니다.

컨트롤 플레인 보안

컨트롤 플레인은 SAP 자동화 프레임워크에서 가장 중요한 부분입니다. 컨트롤 플레인을 보호하는 것은 중요합니다. 다음 단계는 컨트롤 플레인을 보호하는 데 도움이 됩니다. 외부 가상 머신이나 Cloud Shell을 사용하여 컨트롤 플레인을 만든 경우 스토리지 계정 및 키 자격 증명 모음에 대한 프라이빗 엔드포인트를 구현하여 컨트롤 플레인을 보호해야 합니다.

컨트롤 플레인 구성 파일을 배포자 VM에 복사하기 위해 sync_deployer.sh 스크립트를 사용할 수 있습니다. 배포자 VM에 로그인하고 다음 명령을 실행합니다.


cd ~/Azure_SAP_Automated_Deployment/WORKSPACES

../sap-automation/deploy/scripts/sync_deployer.sh --storageaccountname mgtneweeutfstate### --state_subscription xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

DEPLOYERLIBRARY 구성 파일에서 use_private_endpoint 변수가 true로 설정되어 있는지 확인합니다. 또한 DEPLOYER 구성 파일에서 public_network_access_enabledfalse로 설정되어 있는지 확인합니다.


# use_private_endpoint defines that the storage accounts and key vaults have private endpoints enabled
use_private_endpoint = true

# public_network_access_enabled controls if storage account and key vaults have public network access enabled
public_network_access_enabled = false

스토리지 계정 및 키 자격 증명 모음에 대해 프라이빗 엔드포인트를 사용하도록 설정하려면 컨트롤 플레인 배포를 다시 실행합니다.



export            env_code="MGMT"
export         region_code="WEEU"
export           vnet_code="DEP00"
export  storageaccountname=<storageaccountname>

export DEPLOYMENT_REPO_PATH="${HOME}/Azure_SAP_Automated_Deployment/sap-automation"
export CONFIG_REPO_PATH="${HOME}/Azure_SAP_Automated_Deployment/WORKSPACES"
export SAP_AUTOMATION_REPO_PATH="${HOME}/Azure_SAP_Automated_Deployment/sap-automation"

az logout
az login --service-principal -u "${ARM_CLIENT_ID}" -p="${ARM_CLIENT_SECRET}" --tenant "${ARM_TENANT_ID}"

cd ~/Azure_SAP_Automated_Deployment/WORKSPACES

deployer_parameter_file="${CONFIG_REPO_PATH}/DEPLOYER/${env_code}-${region_code}-${vnet_code}-INFRASTRUCTURE/${env_code}-${region_code}-${vnet_code}-INFRASTRUCTURE.tfvars"
library_parameter_file="${CONFIG_REPO_PATH}/LIBRARY/${env_code}-${region_code}-SAP_LIBRARY/${env_code}-${region_code}-SAP_LIBRARY.tfvars"

${SAP_AUTOMATION_REPO_PATH}/deploy/scripts/deploy_controlplane.sh  \
    --deployer_parameter_file "${deployer_parameter_file}"         \
    --library_parameter_file "${library_parameter_file}"            \
    --subscription "${ARM_SUBSCRIPTION_ID}"                        \
    --spn_id "${ARM_CLIENT_ID}"                                    \
    --spn_secret "${ARM_CLIENT_SECRET}"                            \
    --tenant_id "${ARM_TENANT_ID}"                                 \
    --storageaccountname "${storageaccountname}"                   \
    --recover

웹앱 준비

이 단계는 선택 사항입니다. SAP 워크로드 영역 및 시스템 구성에 도움이 되는 브라우저 기반 UX를 원하는 경우 컨트롤 플레인을 배포하기 전에 다음 명령을 실행합니다.

echo '[{"resourceAppId":"00000003-0000-0000-c000-000000000000","resourceAccess":[{"id":"e1fe6dd8-ba31-4d61-89e7-88639da4683d","type":"Scope"}]}]' >> manifest.json

region_code=WEEU

export TF_VAR_app_registration_app_id=$(az ad app create \
    --display-name ${region_code}-webapp-registration \
    --enable-id-token-issuance true \
    --sign-in-audience AzureADMyOrg \
    --required-resource-access @manifest.json \
    --query "appId" | tr -d '"')

export TF_VAR_webapp_client_secret=$(az ad app credential reset \
    --id $TF_VAR_app_registration_app_id --append               \
    --query "password" | tr -d '"')

export TF_VAR_use_webapp=true
rm manifest.json

다음 단계