Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menjelaskan cara mengautentikasi Terraform ke Azure dengan perwakilan layanan.
Dalam artikel ini, Anda akan mempelajari cara:
- Membuat perwakilan layanan
- Menentukan kredensial perwakilan layanan dalam variabel lingkungan
- Tentukan info masuk perwakilan layanan dalam blok penyedia Terraform
Membuat perwakilan layanan
Jika Anda tidak memiliki akses ke perwakilan layanan, lanjutkan dengan bagian ini untuk membuat perwakilan layanan baru. Jika Anda memiliki perwakilan layanan yang dapat Anda gunakan, lewati ke bagian , Tentukan kredensial perwakilan layanan.
Alat otomatis yang menyebarkan atau menggunakan layanan Azure - seperti Terraform - harus selalu memiliki izin terbatas. Selain masuk aplikasi sebagai pengguna yang memiliki hak istimewa, Azure menawarkan prinsipal layanan.
Pola yang paling umum ialah masuk secara interaktif ke Azure, membuat perwakilan layanan, menguji perwakilan layanan, kemudian menggunakan perwakilan layanan tersebut untuk autentikasi di masa mendatang (baik secara interaktif atau dari skrip Anda).
Untuk membuat perwakilan layanan, masuk ke Azure. Setelah mengautentikasi ke Azure melalui akun Microsoft, kembali ke sini.
Jika Anda membuat perwakilan layanan dari Git Bash, atur variabel lingkungan
MSYS_NO_PATHCONV. (Langkah ini tidak diperlukan jika Anda menggunakan Cloud Shell.)export MSYS_NO_PATHCONV=1Poin utama:
- Anda dapat mengatur variabel lingkungan
MSYS_NO_PATHCONVsecara global (untuk semua sesi terminal) atau secara lokal (hanya untuk sesi saat ini). Karena membuat perwakilan layanan bukanlah sesuatu yang sering Anda lakukan, sampel menetapkan nilai untuk sesi saat ini. Untuk mengatur variabel lingkungan ini secara global, tambahkan pengaturan ke file~/.bashrc.
- Anda dapat mengatur variabel lingkungan
Untuk membuat perwakilan layanan, jalankan az ad sp create-for-rbac.
az ad sp create-for-rbac --name <service_principal_name> --role Contributor --scopes /subscriptions/<subscription_id>Poin utama:
- Anda dapat mengganti
<service-principal-name>dengan nama khusus untuk lingkungan Anda atau menghilangkan parameter sepenuhnya. Jika Anda menghilangkan parameter, nama prinsipal layanan dibuat berdasarkan tanggal dan waktu saat ini. - Setelah berhasil diselesaikan,
az ad sp create-for-rbacmenampilkan beberapa nilai. NilaiappId,password, dantenantdigunakan di langkah berikutnya. - Kata sandi tidak dapat diambil kembali jika hilang. Maka dari itu, Anda harus menyimpan kata sandi Anda di tempat yang aman. Jika Anda lupa kata sandi, Anda bisa mereset info masuk perwakilan layanan.
- Untuk artikel ini, perwakilan layanan dengan peran Kontributor sedang digunakan. Untuk informasi selengkapnya tentang peran Role-Based Access Control (RBAC), lihat RBAC: Peran bawaan.
- Output dari pembuatan perwakilan layanan ini mencakup info masuk sensitif. Pastikan Anda tidak menyertakan info masuk ini dalam kode atau memasukkan info masuk ke dalam kontrol sumber Anda.
- Untuk informasi selengkapnya tentang opsi saat membuat perwakilan layanan dengan Azure CLI, lihat artikel Buat perwakilan layanan Azure menggunakan Azure CLI.
- Anda dapat mengganti
Tentukan kredensial perwakilan layanan
Ada beberapa cara untuk menentukan kredensial perwakilan layanan Anda. Namun, untuk alasan keamanan, kami menyarankan untuk tidak menyimpan kredensial di blok penyedia. Teknik itu hanya ditampilkan untuk kelengkapan dan tujuan pengujian.
- Tentukan kredensial perwakilan layanan dalam variabel lingkungan
- Tentukan kredensial perwakilan layanan dalam blok penyedia Terraform
Tentukan info masuk perwakilan layanan dalam variabel lingkungan
Setelah membuat perwakilan layanan, Anda dapat menentukan info masuknya ke Terraform melalui variabel lingkungan.
Edit file
~/.bashrcdengan menambahkan variabel lingkungan berikut.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>"Untuk menjalankan skrip
~/.bashrc, jalankansource ~/.bashrc(atau singkatannya yang setara. ~/.bashrc). Anda juga dapat keluar dan membuka kembali Cloud Shell agar skrip dapat berjalan secara otomatis.. ~/.bashrcSetelah variabel lingkungan ditetapkan, Anda dapat memverifikasi nilainya sebagai berikut:
printenv | grep ^ARM*Poin utama:
- Untuk informasi selengkapnya tentang bekerja dengan variabel lingkungan di Terraform HCL, lihat Membaca dan menggunakan variabel lingkungan dalam eksekusi Terraform.
- Membuat dan menerapkan paket eksekusi Terraform menimbulkan perubahan pada langganan Azure yang terkait dengan perwakilan layanan. Fakta ini terkadang membingungkan jika Anda masuk ke satu langganan Azure dan variabel lingkungan mengarah ke langganan Azure kedua. Mari kita lihat contoh berikut untuk penjelasannya. Katakanlah Anda memiliki dua langganan Azure: SubA dan SubB. Jika langganan Azure saat ini adalah SubA (ditentukan melalui
az account show) sementara variabel lingkungan mengarah ke SubB, setiap perubahan yang dibuat oleh Terraform ada di SubB. Oleh karena itu, Anda harus masuk ke langganan SubB Anda untuk menjalankan perintah Azure CLI atau perintah Azure PowerShell guna melihat perubahan Anda.
Lewati ke bagian , Langkah berikutnya
Tentukan info masuk perwakilan layanan dalam blok penyedia Terraform
Perhatian
Kemampuan untuk menentukan info masuk langganan Azure Anda dalam file konfigurasi Terraform bisa sangat mudah - terutama saat pengujian. Namun, tidak disarankan untuk menyimpan info masuk dalam file teks yang jelas yang dapat dilihat oleh individu yang tidak tepercaya.
Blok penyedia Azure mendefinisikan sintaksis yang memungkinkan Anda menentukan informasi autentikasi langganan 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