서비스 주체를 사용하여 Azure에 인증
이 문서에서는 서비스 주체를 사용하여 Azure에 Terraform을 인증하는 방법을 설명합니다.
이 문서에서는 다음 방법을 설명합니다.
- 서비스 주체 만들기
- 환경 변수에서 서비스 주체 자격 증명 지정
- Terraform 공급자 블록에서 서비스 주체 자격 증명 지정
서비스 주체 만들기
서비스 주체에 대한 액세스 권한이 없는 경우 이 섹션을 계속 진행하여 새 서비스 주체를 만듭니다. 사용할 수 있는 서비스 주체가 있는 경우 섹션 으로 건너뛰고 서비스 주체 자격 증명을 지정합니다.
Azure 서비스를 배포하거나 사용하는 자동화된 도구(예: Terraform)에는 항상 제한된 권한이 있어야 합니다. 애플리케이션이 완전한 권한이 있는 사용자로 로그인하는 대신 Azure는 서비스 주체를 제공합니다.
가장 일반적인 패턴은 Azure에 대화형으로 로그인하고, 서비스 주체를 만들고, 서비스 주체를 테스트한 다음, 향후 인증을 위해 해당 서비스 주체를 사용하는 것입니다(대화형 또는 스크립트에서).
서비스 주체를 만들려면 Azure에 로그인합니다. Microsoft 계정을 통해 Azure에 인증한 후 여기로 돌아갑니다.
Git Bash에서 서비스 주체를 만드는 경우
MSYS_NO_PATHCONV
환경 변수를 설정합니다. (Cloud Shell을 사용하는 경우에는 이 단계가 필요하지 않습니다.)export MSYS_NO_PATHCONV=1
주요 정보:
MSYS_NO_PATHCONV
환경 변수를 전역(모든 터미널 세션의 경우) 또는 로컬(현재 세션에만 해당)로 설정할 수 있습니다. 서비스 주체를 만드는 것은 자주 있는 일이 아니기 때문에 샘플은 현재 세션의 값을 설정합니다. 이 환경 변수를 전역적으로 설정하려면 설정을~/.bashrc
파일에 추가합니다.
서비스 주체를 만들려면 az ad sp create-for-rbac를 실행합니다.
az ad sp create-for-rbac --name <service_principal_name> --role Contributor --scopes /subscriptions/<subscription_id>
주요 정보:
<service-principal-name>
을 환경의 사용자 지정 이름으로 바꾸거나 매개 변수를 완전히 생략할 수 있습니다. 매개 변수를 생략하면 현재 날짜 및 시간을 기반으로 서비스 사용자 이름이 생성됩니다.- 성공적으로 완료되면
az ad sp create-for-rbac
에서 여러 값을 표시합니다.appId
,password
및tenant
값은 다음 단계에서 사용됩니다. - 분실한 암호는 복구할 수 없습니다. 따라서 암호를 안전한 장소에 저장해야 합니다. 암호를 잊어버린 경우 서비스 주체 자격 증명을 다시 설정할 수 있습니다.
- 이 문서에서는 기여자 역할을 사용하여 서비스 주체가 사용됩니다. RBAC(역할 기반 액세스 제어) 역할에 대한 자세한 내용은 RBAC: 기본 제공 역할을 참조하세요.
- 서비스 주체를 만들 때의 출력에는 중요한 자격 증명이 포함됩니다. 이러한 자격 증명을 코드에 포함하지 않도록 하거나 소스 제어에 자격 증명을 확인해야 합니다.
- Azure CLI를 사용하여 서비스 주체를 만들 때 옵션에 대한 자세한 내용은 Azure CLI로 Azure 서비스 주체 만들기 문서를 참조하세요.
서비스 주체 자격 증명 지정
서비스 주체 자격 증명을 지정하는 몇 가지 방법이 있습니다. 그러나 보안상의 이유로 공급자 블록에 자격 증명을 저장하지 않는 것이 좋습니다. 이 기술은 완전성 및 테스트 목적으로만 표시됩니다.
환경 변수에서 서비스 주체 자격 증명 지정
서비스 주체를 만든 후에는 환경 변수를 통해 Terraform에 대한 자격 증명을 지정할 수 있습니다.
다음 환경 변수를 추가하여
~/.bashrc
파일을 수정합니다.export ARM_SUBSCRIPTION_ID="<azure_subscription_id>" export ARM_TENANT_ID="<azure_subscription_tenant_id>" export ARM_CLIENT_ID="<service_principal_appid>" export ARM_CLIENT_SECRET="<service_principal_password>"
~/.bashrc
스크립트를 실행하려면source ~/.bashrc
(또는 이에 상응하는 약어. ~/.bashrc
)를 실행합니다. 스크립트가 자동으로 실행되도록 Cloud Shell을 종료하고 다시 열 수도 있습니다.. ~/.bashrc
환경 변수를 설정한 후에는 다음과 같이 해당 값을 확인할 수 있습니다.
printenv | grep ^ARM*
주요 정보:
- Terraform HCL에서 환경 변수를 사용하는 방법에 대한 자세한 내용은 Terraform 실행에서 환경 변수 읽기 및 사용을 참조하세요.
- Terraform 실행 계획을 만들고 적용하면 서비스 주체와 연결된 Azure 구독이 변경됩니다. 하나의 Azure 구독에 로그인하고 환경 변수가 두 번째 Azure 구독을 가리키는 경우 이 팩트가 혼동될 수 있습니다. 설명을 위해 다음 예제를 살펴보겠습니다. 두 개의 Azure 구독(SubA 및 SubB)이 있다고 가정해 보겠습니다. 현재 Azure 구독이 SubA(
az account show
를 통해 결정됨)인 경우 환경 변수가 SubB를 가리키면 Terraform의 모든 변경 내용이 SubB에 있게 됩니다. 따라서 Azure CLI 명령 또는 Azure PowerShell 명령을 실행하여 변경 내용을 보려면 SubB 구독에 로그인해야 합니다.
섹션으로 건너뛰기, 다음 단계
Terraform 공급자 블록에서 서비스 주체 자격 증명 지정
주의
Terraform 구성 파일에서 Azure 구독 자격 증명을 지정하는 기능은 특히 테스트할 때 편리할 수 있습니다. 그러나 신뢰할 수 없는 사용자가 볼 수 있는 일반 텍스트 파일에는 자격 증명을 저장하지 않는 것이 좋습니다.
Azure 공급자 블록은 Azure 구독의 인증 정보를 지정할 수 있는 구문을 정의합니다.
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>3.0"
}
}
}
provider "azurerm" {
features {}
subscription_id = "<azure_subscription_id>"
tenant_id = "<azure_subscription_tenant_id>"
client_id = "<service_principal_appid>"
client_secret = "<service_principal_password>"
}
# Your code goes here