Bagikan melalui


Membuat delegasi SAS pengguna untuk kontainer atau blob dengan Python

Tanda tangan akses bersama (SAS) memungkinkan Anda memberikan akses terbatas ke kontainer dan blob di akun penyimpanan Anda. Saat Anda membuat SAS, Anda menentukan batasannya, termasuk sumber daya Azure Storage mana yang diizinkan untuk diakses klien, izin apa yang mereka miliki pada sumber daya tersebut, dan berapa lama SAS valid.

Setiap SAS ditandatangani dengan kunci. Anda dapat menandatangani SAS dengan salah satu dari dua cara:

  • Dengan kunci yang dibuat menggunakan kredensial Microsoft Entra. SAS yang ditandatangani dengan kredensial Microsoft Entra adalah SAS delegasi pengguna. Klien yang membuat SAS delegasi pengguna harus diberi peran Azure RBAC yang menyertakan tindakan Microsoft.Storage /storageAccounts/blobServices/generateUserDelegationKey. Untuk mempelajari selengkapnya, lihat Membuat SAS Delegasi Pengguna.
  • Dengan kunci akun penyimpanan. Baik SAS layanan maupun SAS akun ditandatangani menggunakan kunci akun penyimpanan. Klien yang membuat SAS layanan harus memiliki akses langsung ke kunci akun atau ditetapkan izin microsoft.Storage/storageAccounts/listkeys/action. Untuk mempelajari selengkapnya, lihat Membuat layanan SAS atau Membuat SAS akun.

Catatan

Delegasi pengguna SAS menawarkan keamanan yang unggul untuk SAS yang ditandatangani dengan kunci akun penyimpanan. Microsoft merekomendasikan menggunakan SAS delegasi pengguna jika memungkinkan. Untuk mengetahui informasi selengkapnya, lihat Memberikan akses terbatas ke data dengan tanda tangan akses bersama (SAS).

Artikel ini memperlihatkan cara menggunakan kredensial Microsoft Entra untuk membuat SAS delegasi pengguna untuk kontainer atau blob menggunakan pustaka klien Azure Storage untuk Python.

Tentang pendelegasian pengguna SAS

Token SAS untuk akses ke kontainer atau blob dapat diamankan dengan menggunakan kredensial Microsoft Entra atau kunci akun. SAS yang diamankan dengan kredensial Microsoft Entra disebut SAS delegasi pengguna, karena token OAuth 2.0 yang digunakan untuk menandatangani SAS diminta atas nama pengguna.

Microsoft menyarankan agar Anda menggunakan kredensial Microsoft Entra jika memungkinkan sebagai praktik terbaik keamanan, daripada menggunakan kunci akun, yang dapat lebih mudah disusupi. Ketika desain aplikasi Anda memerlukan signature akses bersama, gunakan kredensial Microsoft Entra untuk membuat delegasi pengguna SAS demi tingkat keamanan yang lebih tinggi. Untuk informasi selengkapnya tentang delegasi pengguna SAS, lihat Membuat delegasi pengguna SAS.

Perhatian

Setiap klien yang memiliki SAS yang valid dapat mengakses data di akun penyimpanan Anda sebagaimana diizinkan oleh SAS tersebut. Penting untuk melindungi SAS dari penggunaan berbahaya atau tidak diinginkan. Gunakan kebijaksanaan dalam mendistribusikan SAS, dan buatlah rencana untuk mencabut SAS yang disusupi.

Untuk informasi selengkapnya tentang tanda tangan akses bersama, lihat Berikan akses terbatas ke sumber daya Azure Storage dengan menggunakan tanda tangan akses berbagi (SAS).

Menetapkan peran Azure untuk akses ke data

Saat perwakilan keamanan Microsoft Entra mencoba mengakses data, prinsip keamanan tersebut harus memiliki izin ke sumber daya. Apakah prinsip keamanan adalah identitas terkelola di Azure atau akun pengguna Microsoft Entra yang menjalankan kode di lingkungan pengembangan, prinsip keamanan harus diberi peran Azure yang memberikan akses ke data. Untuk informasi tentang menetapkan izin melalui Azure RBAC, lihat Menetapkan peran Azure untuk akses ke data blob.

Menyiapkan proyek Anda

Untuk bekerja dengan contoh kode dalam artikel ini, ikuti langkah-langkah ini untuk menyiapkan proyek Anda.

Memasang paket

Instal paket berikut menggunakan pip install:

pip install azure-storage-blob azure-identity

Menyiapkan kode aplikasi

Tambahkan instruksi import berikut:

from azure.identity import DefaultAzureCredential
from azure.storage.blob import (
    BlobServiceClient,
    ContainerClient,
    BlobClient,
    BlobSasPermissions,
    ContainerSasPermissions,
    UserDelegationKey,
    generate_container_sas,
    generate_blob_sas
)

Dapatkan kredensial token otentik

Untuk mendapatkan kredensial token yang dapat digunakan kode Anda untuk mengotorisasi permintaan ke Blob Storage, buat instans kelas DefaultAzureCredential . Untuk informasi selengkapnya tentang menggunakan kelas DefaultAzureCredential untuk mengotorisasi identitas terkelola untuk mengakses Blob Storage, lihat Pustaka klien Azure Identity untuk Python.

Cuplikan kode berikut menunjukkan cara mendapatkan kredensial token otentik dan menggunakannya untuk membuat klien layanan penyimpanan Blob:

# Construct the blob endpoint from the account name
account_url = "https://<storage-account-name>.blob.core.windows.net"

#Create a BlobServiceClient object using DefaultAzureCredential
blob_service_client = BlobServiceClient(account_url, credential=DefaultAzureCredential())

Untuk mempelajari selengkapnya tentang mengotorisasi akses ke Blob Storage dari aplikasi Anda dengan Python SDK, lihat Mengautentikasi aplikasi Python ke layanan Azure.

Dapatkan kunci delegasi pengguna

Setiap SAS ditandatangani dengan kunci. Untuk membuat delegasi pengguna SAS, Anda harus terlebih dahulu meminta kunci delegasi pengguna, yang digunakan untuk menandatangani SAS. Kunci delegasi pengguna dianalogikan dengan kunci akun yang digunakan untuk menandatangani SAS layanan atau SAS akun, kecuali bahwa kunci tersebut bergantung pada kredensial Microsoft Entra Anda. Saat klien meminta kunci delegasi pengguna menggunakan token OAuth 2.0, Blob Storage mengembalikan kunci delegasi pengguna atas nama pengguna.

Setelah memiliki kunci delegasi pengguna, Anda dapat menggunakan kunci itu untuk membuat sejumlah tanda tangan akses bersama delegasi pengguna, selama masa hidup kunci. Kunci delegasi pengguna independen dari token OAuth 2.0 yang digunakan untuk memperolehnya, sehingga token tidak perlu diperpanjang jika kunci masih valid. Anda dapat menentukan lamanya waktu kunci tetap valid, hingga maksimum tujuh hari.

Gunakan salah satu metode berikut untuk meminta kunci delegasi pengguna:

Contoh kode berikut menunjukkan cara meminta kunci delegasi pengguna:

def request_user_delegation_key(self, blob_service_client: BlobServiceClient) -> UserDelegationKey:
    # Get a user delegation key that's valid for 1 day
    delegation_key_start_time = datetime.datetime.now(datetime.timezone.utc)
    delegation_key_expiry_time = delegation_key_start_time + datetime.timedelta(days=1)

    user_delegation_key = blob_service_client.get_user_delegation_key(
        key_start_time=delegation_key_start_time,
        key_expiry_time=delegation_key_expiry_time
    )

    return user_delegation_key

Buat SAS pendelegasian pengguna

Anda dapat membuat SAS delegasi pengguna untuk kontainer atau blob, berdasarkan kebutuhan aplikasi Anda.

Setelah mendapatkan kunci delegasi pengguna, Anda dapat membuat SAS delegasi pengguna. Anda dapat membuat SAS delegasi pengguna untuk mendelegasikan akses terbatas ke sumber daya kontainer menggunakan metode berikut:

Kunci delegasi pengguna untuk menandatangani SAS diteruskan sebagai argumen ke metode. Izin yang diperbolehkan diteruskan ke fungsi sebagai permission argumen, dan didefinisikan dalam kelas ContainerSasPermissions.

Contoh kode berikut menunjukkan cara membuat SAS delegasi pengguna untuk kontainer:

def create_user_delegation_sas_container(self, container_client: ContainerClient, user_delegation_key: UserDelegationKey):
    # Create a SAS token that's valid for one day, as an example
    start_time = datetime.datetime.now(datetime.timezone.utc)
    expiry_time = start_time + datetime.timedelta(days=1)

    sas_token = generate_container_sas(
        account_name=container_client.account_name,
        container_name=container_client.container_name,
        user_delegation_key=user_delegation_key,
        permission=ContainerSasPermissions(read=True),
        expiry=expiry_time,
        start=start_time
    )

    return sas_token

Gunakan SAS delegasi pengguna untuk mengotorisasi objek klien

Anda dapat menggunakan SAS delegasi pengguna untuk mengotorisasi objek klien untuk melakukan operasi pada kontainer atau blob berdasarkan izin yang diberikan oleh SAS.

Contoh kode berikut menunjukkan cara menggunakan SAS delegasi pengguna yang dibuat dalam contoh sebelumnya untuk mengotorisasi objek ContainerClient . Objek klien ini dapat digunakan untuk melakukan operasi pada sumber daya kontainer berdasarkan izin yang diberikan oleh SAS.

# The SAS token string can be appended to the resource URL with a ? delimiter
# or passed as the credential argument to the client constructor
sas_url = f"{container_client.url}?{sas_token}"

# Create a ContainerClient object with SAS authorization
container_client_sas = ContainerClient.from_container_url(container_url=sas_url)

Sumber

Untuk mempelajari selengkapnya tentang membuat SAS delegasi pengguna menggunakan pustaka klien Azure Blob Storage untuk Python, lihat sumber daya berikut ini.

Sampel kode

Operasi REST API

Azure SDK untuk Python berisi pustaka yang dibangun di atas Azure REST API, memungkinkan Anda berinteraksi dengan operasi REST API melalui paradigma Python yang sudah dikenal. Metode pustaka klien untuk mendapatkan kunci delegasi pengguna menggunakan operasi REST API berikut:

Sumber daya pustaka klien

Lihat juga

  • Artikel ini adalah bagian dari panduan pengembang Blob Storage untuk Python. Untuk mempelajari lebih lanjut, lihat daftar lengkap artikel panduan pengembang di Membangun aplikasi Python Anda.