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.
Pengembang sering kali perlu menjalankan dan menguji aplikasi mereka secara lokal saat membangun aplikasi cloud. Bahkan selama pengembangan lokal, aplikasi harus mengautentikasi ke layanan Azure apa pun yang berinteraksi dengannya. Artikel ini menjelaskan cara mengonfigurasi identitas perwakilan layanan khusus khusus untuk digunakan selama pengembangan lokal.
Prinsipal layanan aplikasi khusus untuk pengembangan lokal mengikuti prinsip hak istimewa paling sedikit. Mereka memberikan akses hanya ke sumber daya Azure yang dibutuhkan aplikasi selama pengembangan. Akses terbatas ini mengurangi risiko tidak sengaja menjangkau sumber daya lain. Ini juga membantu mencegah bug terkait izin saat pindah ke produksi, di mana izin yang lebih luas dapat menyebabkan masalah.
Saat mendaftarkan aplikasi untuk pengembangan lokal di Azure:
- Membuat pendaftaran aplikasi terpisah untuk setiap pengembang: Pendekatan ini memberi setiap pengembang perwakilan layanan mereka sendiri, menghindari kebutuhan untuk berbagi kredensial dan memungkinkan kontrol akses yang lebih terperinci.
- Membuat pendaftaran aplikasi terpisah untuk setiap aplikasi: Pendekatan ini memastikan setiap aplikasi hanya memiliki izin yang dibutuhkan, mengurangi potensi permukaan serangan.
Untuk mengaktifkan autentikasi selama pengembangan lokal, atur variabel lingkungan dengan kredensial prinsipal layanan aplikasi. Azure SDK untuk Python mendeteksi variabel ini dan menggunakannya untuk mengautentikasi permintaan ke layanan Azure.
Mendaftarkan aplikasi di Azure
Objek prinsipal layanan aplikasi dibuat saat Anda mendaftarkan aplikasi di Azure. Pendaftaran ini dapat dilakukan menggunakan portal Microsoft Azure atau Azure CLI. Proses pendaftaran membuat pendaftaran aplikasi di Microsoft Entra ID dan menghasilkan objek principal layanan untuk aplikasi. Objek prinsipal layanan digunakan untuk mengautentikasi aplikasi terhadap layanan Azure.
Proses pendaftaran aplikasi juga menghasilkan rahasia klien (kata sandi) untuk aplikasi. Rahasia ini digunakan untuk mengautentikasi aplikasi ke layanan Azure. Rahasia klien tidak pernah disimpan dalam kontrol sumber, melainkan dalam .env file di direktori aplikasi. Saat runtime, aplikasi membaca file .env dan mengatur variabel lingkungan yang digunakan oleh Azure SDK Python untuk mengautentikasi aplikasi.
Langkah-langkah berikut menunjukkan cara mendaftarkan aplikasi di Azure dan membuat perwakilan layanan untuk aplikasi. Langkah-langkah ditampilkan untuk Azure CLI dan portal Microsoft Azure.
Perintah Azure CLI dapat dijalankan di Azure Cloud Shell atau pada stasiun kerja dengan Azure CLI terpasang.
Pertama, gunakan perintah az ad sp create-for-rbac untuk membuat perwakilan layanan baru untuk aplikasi. Perintah ini juga membuat pendaftaran aplikasi untuk aplikasi secara bersamaan.
SERVICE_PRINCIPAL_NAME=<service-principal-name>
az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAME
Output perintah ini mirip dengan yang berikut ini. Catat nilai-nilai ini atau biarkan jendela ini terbuka karena Anda akan memerlukan nilai-nilai ini di langkah berikutnya dan tidak akan dapat melihat nilai kata sandi (rahasia klien) lagi. Namun, Anda dapat menambahkan kata sandi baru nanti tanpa membuat prinsip layanan atau kata sandi yang ada menjadi tidak valid, jika diperlukan.
{
"appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"displayName": "<service-principal-name>",
"password": "Ee5Ff~6Gg7.-Hh8Ii9Jj0Kk1Ll2Mm3_Nn4Oo5Pp6",
"tenant": "aaaabbbb-0000-cccc-1111-dddd2222eeee"
}
Selanjutnya, Anda perlu mendapatkan appID nilai dan menyimpannya ke dalam variabel. Nilai ini digunakan untuk mengatur variabel lingkungan di lingkungan pengembangan lokal Anda sehingga Azure SDK untuk Python dapat mengautentikasi ke Azure menggunakan perwakilan layanan.
APP_ID=$(az ad sp list \
--all \
--query "[?displayName=='$SERVICE_PRINCIPAL_NAME'].appId | [0]" \
--output tsv)
Membuat grup keamanan Microsoft Entra untuk pengembangan lokal
Karena beberapa pengembang biasanya bekerja pada aplikasi yang sama, lebih baik mengelola izin melalui grup keamanan Microsoft Entra. Buat grup keamanan yang berisi peran yang dibutuhkan aplikasi untuk pengembangan lokal, alih-alih menetapkan peran ke masing-masing perwakilan layanan pengembang satu per satu. Menggunakan grup keamanan menawarkan keuntungan berikut:
- Setiap pengembang dipastikan memiliki peran yang sama karena peran ditetapkan di tingkat grup.
- Jika peran baru diperlukan untuk aplikasi, peran tersebut hanya perlu ditambahkan ke grup Microsoft Entra untuk aplikasi tersebut.
- Jika pengembang baru bergabung dengan tim, perwakilan layanan aplikasi baru dibuat untuk pengembang dan ditambahkan ke grup, memastikan pengembang memiliki izin yang tepat untuk mengerjakan aplikasi.
Perintah az ad group create digunakan untuk membuat grup keamanan di ID Microsoft Entra. Parameter --display-name dan --main-nickname diperlukan. Nama yang diberikan ke grup harus didasarkan pada nama aplikasi. Akan sangat berguna untuk menyertakan frasa seperti 'local-dev' dalam nama grup untuk menunjukkan tujuan grup.
GROUP_DISPLAY_NAME="<group-name>"
GROUP_MAIL_NICKNAME="<group-mail-nickname>"
GROUP_DESCRIPTION="<group-description>"
az ad group create \
--display-name $GROUP_DISPLAY_NAME \
--mail-nickname $GROUP_MAIL_NICKNAME \
--description $GROUP_DESCRIPTION
Untuk menambahkan anggota ke grup, Anda memerlukan ID objek dari perwakilan layanan aplikasi, yang berbeda dari ID aplikasi. Gunakan az ad sp list untuk mencantumkan service principal yang tersedia. Perintah --filter parameter menerima filter gaya OData dan dapat digunakan untuk memfilter daftar seperti yang ditunjukkan. Parameter --query membatasi kolom hanya untuk kolom yang Anda minati.
SP_OBJECT_ID=$(az ad sp list \
--filter "startswith(displayName,'$GROUP_DISPLAY_NAME')" \
--query "[0].id" \
--output tsv)
Perintah az ad group member add kemudian dapat digunakan untuk menambahkan anggota ke grup.
az ad group member add \
--group $GROUP_DISPLAY_NAME \
--member-id $SP_OBJECT_ID
Nota
Secara default, pembuatan grup keamanan Microsoft Entra terbatas pada peran istimewa tertentu dalam direktori. Jika Anda tidak dapat membuat grup, hubungi administrator untuk direktori Anda. Jika Anda tidak dapat menambahkan anggota ke grup yang sudah ada, hubungi pemilik grup atau administrator direktori. Untuk mempelajari selengkapnya, lihat Mengelola grup Microsoft Entra dan keanggotaan grup.
Menetapkan peran ke aplikasi
Selanjutnya, Anda perlu menentukan peran (izin) apa yang dibutuhkan aplikasi Anda pada sumber daya apa dan menetapkan peran tersebut ke aplikasi Anda. Dalam contoh ini, peran ditetapkan ke grup Microsoft Entra yang dibuat di langkah 2. Peran dapat ditetapkan di sumber daya, grup sumber daya, atau cakupan langganan. Contoh ini menunjukkan cara menetapkan peran di cakupan grup sumber daya karena sebagian besar aplikasi mengelompokkan semua sumber daya Azure mereka ke dalam satu grup sumber daya.
az role assignment create Gunakan perintah untuk menetapkan peran ke pengguna, grup, atau perwakilan layanan aplikasi. Anda dapat menentukan grup dengan ID objeknya. Anda dapat menentukan perwakilan layanan aplikasi dengan ID aplikasinya.
RESOURCE_GROUP_NAME=<resource-group-name>
SUBSCRIPTION_ID=$(az account show --query id --output tsv)
ROLE_NAME=<role-name>
az role assignment create \
--assignee "$APP_ID" \
--scope "./subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP_NAME" \
--role "$ROLE_NAME"
! [! CATATAN] Untuk mencegah Git Bash memperlakukan /subscriptions/... sebagai jalur file, tambahkan ./ ke string untuk
scopeparameter dan gunakan tanda kutip ganda di seluruh string.
Untuk mendapatkan nama peran yang dapat ditetapkan, gunakan perintah az role definition list .
az role definition list \
--query "sort_by([].{roleName:roleName, description:description}, &roleName)" \
--output table
Misalnya, untuk mengizinkan perwakilan layanan aplikasi dengan appId 00001111-aaaa-2222-bbbb-3333cccc4444 baca, tulis, dan hapus akses ke kontainer blob Azure Storage dan data di semua akun penyimpanan dalam grup sumber daya msdocs-python-sdk-auth-example dalam langganan dengan ID aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e, Anda akan menetapkan perwakilan layanan aplikasi ke peran Kontributor Data Blob Penyimpanan menggunakan perintah berikut.
az role assignment create --assignee 00001111-aaaa-2222-bbbb-3333cccc4444 \
--scope "./subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-python-sdk-auth-example" \
--role "Storage Blob Data Contributor"
Untuk informasi tentang menetapkan izin di tingkat sumber daya atau langganan menggunakan Azure CLI, lihat artikel Menetapkan peran Azure menggunakan Azure CLI.
Mengatur variabel lingkungan pengembangan lokal
Objek DefaultAzureCredential mencari informasi perwakilan layanan dalam sekumpulan variabel lingkungan saat runtime. Karena sebagian besar pengembang bekerja pada beberapa aplikasi, gunakan paket seperti python-dotenv untuk mengakses lingkungan dari file yang .env disimpan di direktori aplikasi selama pengembangan. Penyiapan ini mencakup variabel lingkungan sehingga hanya aplikasi ini yang dapat menggunakannya untuk mengautentikasi ke Azure.
File .env tidak pernah diperiksa ke kontrol sumber karena berisi kunci rahasia aplikasi untuk Azure. File .gitignore standar untuk Python secara otomatis mengecualikan file .env dari check-in.
Untuk menggunakan paket python-dotenv, pertama-tama instal paket di aplikasi Anda.
pip install python-dotenv
Kemudian, buat .env file di direktori akar aplikasi Anda. Atur nilai variabel lingkungan dengan nilai yang diperoleh dari proses pendaftaran aplikasi sebagai berikut:
AZURE_CLIENT_ID→ Nilai ID aplikasi.AZURE_TENANT_ID→ Nilai ID penyewa (Tenant ID).AZURE_CLIENT_SECRET→ Kata sandi/kredensial yang dihasilkan untuk aplikasi.
AZURE_CLIENT_ID=00001111-aaaa-2222-bbbb-3333cccc4444
AZURE_TENANT_ID=aaaabbbb-0000-cccc-1111-dddd2222eeee
AZURE_CLIENT_SECRET=Ee5Ff~6Gg7.-Hh8Ii9Jj0Kk1Ll2Mm3_Nn4Oo5Pp6
Terakhir, dalam kode startup untuk aplikasi Anda, gunakan pustaka python-dotenv untuk membaca variabel lingkungan dari file .env saat startup.
from dotenv import load_dotenv
if ( os.environ['ENVIRONMENT'] == 'development'):
print("Loading environment variables from .env file")
load_dotenv(".env")
Menerapkan DefaultAzureCredential di aplikasi Anda
Untuk mengautentikasi objek klien Azure SDK ke Azure, aplikasi Anda harus menggunakan DefaultAzureCredential kelas dari azure.identity paket. Dalam skenario ini, DefaultAzureCredential mendeteksi variabel lingkungannya AZURE_CLIENT_ID, AZURE_TENANT_ID, dan AZURE_CLIENT_SECRET yang diatur kemudian membaca variabel tersebut guna memperoleh informasi prinsipal layanan aplikasi untuk terhubung ke Azure.
Mulailah dengan menambahkan paket azure.identity ke aplikasi Anda.
pip install azure-identity
Selanjutnya, untuk kode Python apa pun yang membuat objek klien Azure SDK di aplikasi Anda:
- Impor kelas
DefaultAzureCredentialdari modulazure.identity. - Buat objek
DefaultAzureCredential. - Teruskan
DefaultAzureCredentialobjek ke konstruktor objek klien Azure SDK.
Contoh ini ditampilkan di segmen kode berikut.
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
# Acquire a credential object
token_credential = DefaultAzureCredential()
blob_service_client = BlobServiceClient(
account_url="https://<my_account_name>.blob.core.windows.net",
credential=token_credential)