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.
Aplikasi yang dihosting di luar Azure (misalnya lokal atau di pusat data pihak ketiga) harus menggunakan perwakilan layanan aplikasi untuk mengautentikasi ke Azure saat mengakses sumber daya Azure. Objek prinsipal layanan aplikasi dibuat menggunakan proses pendaftaran aplikasi di Azure. Membuat entitas layanan aplikasi baru menghasilkan ID klien dan rahasia klien untuk aplikasi Anda. Anda menyimpan ID klien, rahasia klien, dan ID penyewa Anda dalam variabel lingkungan yang akan digunakan oleh Azure SDK for Python untuk mengautentikasi aplikasi Anda ke Azure saat runtime.
Pendaftaran aplikasi yang berbeda harus dibuat untuk setiap lingkungan tempat aplikasi dihosting. Membuat pendaftaran aplikasi yang berbeda memungkinkan izin sumber daya khusus lingkungan dikonfigurasi untuk setiap perwakilan layanan dan memastikan bahwa aplikasi yang disebarkan ke satu lingkungan tidak berbicara dengan sumber daya Azure yang merupakan bagian dari lingkungan lain.
Mendaftarkan aplikasi di Azure
Aplikasi dapat didaftarkan dengan Azure menggunakan portal Microsoft Azure atau Azure CLI.
APP_NAME=<app-name>
az ad sp create-for-rbac --name $APP_NAME
Hasil perintah 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.
{
"appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"displayName": "msdocs-python-sdk-auth-prod",
"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 create-for-rbac \
--name $APP_NAME --query appId --output tsv)
Menetapkan peran ke perwakilan layanan aplikasi
Selanjutnya, Anda perlu menentukan peran (izin) apa yang dibutuhkan aplikasi Anda pada sumber daya apa dan menetapkan peran tersebut ke aplikasi Anda. Peran dapat ditugaskan pada sumber daya, grup sumber daya, atau lingkup langganan. Contoh ini menunjukkan cara menetapkan peran untuk perwakilan layanan di cakupan grup sumber daya karena sebagian besar aplikasi mengelompokkan semua sumber daya Azure mereka ke dalam satu grup sumber daya.
Perwakilan layanan diberi peran di Azure menggunakan perintah az role assignment create.
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 oleh perwakilan layanan, 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 dengan appId dari 00001111-aaaa-2222-bbbb-3333cccc4444 membaca, menulis, dan menghapus 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 Penyumbang 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.
Mengonfigurasi variabel lingkungan untuk aplikasi
Anda harus mengatur AZURE_CLIENT_IDvariabel lingkungan , AZURE_TENANT_ID, dan AZURE_CLIENT_SECRET untuk proses yang menjalankan aplikasi Python Anda untuk membuat kredensial perwakilan layanan aplikasi tersedia untuk aplikasi Anda saat runtime. Objek DefaultAzureCredential mencari informasi perwakilan layanan dalam variabel lingkungan ini.
Saat menggunakan Gunicorn untuk menjalankan aplikasi web Python di lingkungan server UNIX, variabel lingkungan untuk aplikasi dapat ditentukan dengan menggunakan EnvironmentFile arahan di gunicorn.server. Lihat contoh berikut.
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=www-user
Group=www-data
WorkingDirectory=/path/to/python-app
EnvironmentFile=/path/to/python-app/py-env/app-environment-variables
ExecStart=/path/to/python-app/py-env/gunicorn --config config.py wsgi:app
[Install]
WantedBy=multi-user.target
File yang ditentukan dalam direktif EnvironmentFile harus berisi daftar variabel lingkungan dengan nilainya sebagai berikut.
AZURE_CLIENT_ID=<value>
AZURE_TENANT_ID=<value>
AZURE_CLIENT_SECRET=<value>
Menerapkan DefaultAzureCredential dalam aplikasi
Untuk mengautentikasi objek klien Azure SDK ke Azure, aplikasi Anda harus menggunakan DefaultAzureCredential kelas dari azure.identity paket.
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, Anda harus:
- Impor kelas
DefaultAzureCredentialdari modulazure.identity. - Buat objek
DefaultAzureCredential. - Teruskan
DefaultAzureCredentialobjek ke konstruktor objek klien Azure SDK.
Contoh pendekatan 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)
Dari contoh ini, ketika kode menginstansiasi objek DefaultAzureCredential, DefaultAzureCredential membaca variabel lingkungan AZURE_TENANT_ID, AZURE_CLIENT_ID, dan AZURE_CLIENT_SECRET untuk mendapatkan informasi perwakilan layanan aplikasi guna terhubung ke Azure.