1. Azure CLI를 통한 인증
- Terraform을 공유 환경에서 실행할 때는 서비스 주체를 사용하고, 로컬 환경에서 실행할 때는 Azure CLI를 사용하는 것이 좋다.
- Azure CLI를 통해 인증할 때 Terraform 는 자동으로 기본 구독에 연결된다.
- Azure CLI를 통한 인증은 사용자 계정을 사용할 때만 지원된다.
az login
az account set --subscription "<subscription_id_or_subscription_name>"
# provider.tf
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>3.0"
}
random = {
source = "hashicorp/random"
version = "~>3.0"
}
}
}
provider "azurerm" {
features {}
}
2. 서비스 주체(Service Principal) 를 통한 인증
1) Terraform 공급자 블록에서 서비스 주체 자격 증명 지정 (권장하지 않음)
- Terraform 구성 파일에서 Azure 구독 자격 증명을 지정하는 기능은 테스트할 때 편리할 수 있다.
- 하지만 외부에 공개될 경우 인증정보가 그대로 노출되므로 절대 인증정보를 provider block에 설정하면 안된다.
# provider.tf
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>2.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>"
}
2) 환경변수로 인증정보 설정
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>"
3) provider 설정파일에 직접 인증정보를 설정
- 테라폼은 provider에 인증정보가 없고 환경변수도 설정이 안되어 있으면 provider 설정파일을 바라본다.
- Azure에서는 az configure명령어로 인증정보를 파일에 저장할 수 있다.
- 파일 위치: C:\Users\<user name>\.azure\config
- AWS에서는 aws configure 명령어로 인증정보를 파일에 저장할 수 있다.
※ 번외: 서비스 주체(Service Principal)을 사용할 경우 권한 부여 필요
# Service Principal에 기여자 권한 부여
az role assignment create --assignee "{Service Principald appId}" \
--role "Contributor" \
--subscription "{subscriptionNameOrId}"
# Service Principal에 사용자 액세스 관리자 권한 부여
az role assignment create --assignee "{Service Principald appId}" \
--role "User Access Administrator" \
--subscription "{subscriptionNameOrId}"
참고
Terraform - Azure 공급자: Azure CLI를 사용하여 인증
Documentation Contributors GitHub
runebook.dev
Terraform - Azure 공급자: 서비스 주체를 사용하여 인증
Documentation Contributors GitHub
runebook.dev
'IaC > Terraform' 카테고리의 다른 글
[Terraform] 다중 Provider 구성 (0) | 2023.12.29 |
---|---|
[Terraform] 기본 명령어 및 파일/디렉터리 (1) | 2023.12.28 |
[Terraform] Sensitive variable (0) | 2023.12.28 |