إنشاء SAS لتفويض مستخدم لكائن ثنائي كبير الحجم باستخدام Python

يتيح لك توقيع الوصول المشترك (SAS) منح وصول محدود إلى الحاويات والكائنات الثنائية كبيرة الحجم في حساب التخزين الخاص بك. عند إنشاء توقيع الوصول المشترك، فإنك تحدد قيوده بما في ذلك موارد تخزين Azure التي يُسمح للعميل بالوصول إليها، وما هي الأذونات التي يمتلكها على تلك الموارد، ومدة صلاحية توقيع الوصول المشترك.

يتم عملية توقيع كل SAS بمفتاح. يمكنك توقيع SAS بإحدى طريقتين:

  • باستخدام مفتاح تم إنشاؤه باستخدام بيانات اعتماد Microsoft Entra. SAS الذي تم توقيعه باستخدام بيانات اعتماد Microsoft Entra هو SAS لتفويض المستخدم. يجب أن يتم تعيين دور Azure RBAC للعميل الذي يقوم بإنشاء تحويل مستخدم SAS والذي يتضمن الإجراء Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey. لمعرفة المزيد، راجع إنشاء توقيعات الوصول المشترك لتفويض المستخدم.
  • باستخدام مفتاح حساب التخزين. يتم توقيع كل من توقيع الوصول المشترك للخدمة و توقيع الوصول المشترك للحساب باستخدام مفتاح حساب التخزين. يجب أن يكون للعميل الذي ينشئ خدمة SAS حق وصول مباشر إلى مفتاح الحساب أو أن يتم تعيين إذن Microsoft.Storage/storageAccounts/listkeys/action. لمعرفة المزيد، راجع إنشاء SAS خدمة أو إنشاء حساب SAS.

إشعار

يوفر توقيع الوصول المشترك لتفويض المستخدم أماناً فائقاً لتوقيع الوصول المشترك الموقع باستخدام مفتاح حساب التخزين. توصي Microsoft باستخدام توقيع الوصول المشترك لتفويض المستخدم عندما يكون ذلك ممكناً. لمعرفة المزيد من المعلومات حول مفاتيح SAS، راجع منح وصول محدود إلى البيانات باستخدام توقيعات الوصول المشتركة (SAS).

توضح هذه المقالة كيفية استخدام بيانات اعتماد Microsoft Entra لإنشاء SAS لتفويض مستخدم لكائن ثنائي كبير الحجم باستخدام مكتبة عميل Azure Storage ل Python.

حول توقيع الوصول المشترك لتفويض مستخدم

قد يتم تأمين رمز SAS المميز للوصول إلى حاوية أو كائن ثنائي كبير الحجم باستخدام بيانات اعتماد Microsoft Entra أو مفتاح حساب. يسمى SAS المؤمن ببيانات اعتماد Microsoft Entra SAS لتفويض المستخدم، لأن الرمز المميز OAuth 2.0 المستخدم لتوقيع SAS مطلوب نيابة عن المستخدم.

توصي Microsoft باستخدام بيانات اعتماد Microsoft Entra عندما يكون ذلك ممكنا كأفضل ممارسة أمان، بدلا من استخدام مفتاح الحساب، والذي يمكن اختراقه بسهولة أكبر. عندما يتطلب تصميم التطبيق توقيعات وصول مشتركة، استخدم بيانات اعتماد Microsoft Entra لإنشاء توقيع الوصول المشترك لتفويض المستخدم للأمان الفائق. لمزيد من المعلومات حول توقيع الوصول المشترك لتفويض مستخدم، راجع إنشاء توقيع الوصول المشترك لتفويض مستخدم.

تنبيه

يمكن لأي عميل يمتلك توقيع وصول مشترك صالح الوصول إلى البيانات في حساب التخزين خاصتك كما هو مسموح به من توقيع الوصول المشترك. من المهم حماية توقيع الوصول المشترك من الاستخدام الضار أو غير المقصود. استخدم التقدير في توزيع توقيع الوصول المشترك، وضع خطة لإلغاء توقيع الوصول المشترك المُخترق.

للحصول على مزيد من المعلومات عن توقيعات الوصول المشارك، راجع منح الوصول المحدود إلى موارد Azure Storage باستخدام توقيعات الوصول المشاركة (SAS).

قم بتعيين أدوار Azure للوصول إلى البيانات

عندما يحاول أساس أمان Microsoft Entra الوصول إلى بيانات الكائن الثنائي كبير الحجم، يجب أن يكون لمدير الأمان هذا أذونات للمورد. سواء كان أساس الأمان هوية مدارة في Azure أو حساب مستخدم Microsoft Entra يقوم بتشغيل التعليمات البرمجية في بيئة التطوير، يجب تعيين دور Azure لكيان الأمان الذي يمنح الوصول إلى بيانات الكائن الثنائي كبير الحجم. لمزيد من المعلومات حول التحكم في الوصول استناداً إلى الدور Azure، راجع تعيين دور Azure للوصول إلى بيانات الكائن الثنائي كبير الحجم.

إعداد مشروعك

لاستخدام أمثلة التعليمات البرمجية في هذه المقالة، اتبع هذه الخطوات لإعداد مشروعك.

تثبيت الحزم

قم بتثبيت الحزم التالية باستخدام pip install:

pip install azure-storage-blob azure-identity

إعداد تعليمة برمجية للتطبيق

أضِف توجيهات import التالية:

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

الحصول على بيانات اعتماد الرمز المميز المصادق عليها

للحصول على بيانات اعتماد رمز مميز يمكن أن تستخدمها التعليمات البرمجية الخاصة بك لتخويل الطلبات إلى Blob Storage، قم بإنشاء مثيل لفئة DefaultAzureCredential . لمزيد من المعلومات حول استخدام الفئة DefaultAzureCredential لتخويل هوية مدارة للوصول إلى Blob Storage، راجع مكتبة عميل Azure Identity ل Python.

يوضح مقتطف التعليمات البرمجية التالي كيفية الحصول على بيانات اعتماد الرمز المميز المصادق عليه واستخدامه لإنشاء عميل خدمة لتخزين كائن ثنائي كبير الحجم:

# 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())

لمعرفة المزيد حول تخويل الوصول إلى Blob Storage من تطبيقاتك باستخدام Python SDK، راجع مصادقة تطبيقات Python على خدمات Azure.

الحصول على مفتاح التفويض الخاص بالمستخدم

يتم عملية توقيع كل SAS بمفتاح. لإنشاء SAS تفويض مستخدم، يجب عليك أولا طلب مفتاح التفويض الخاص بالمستخدم، والذي يتم استخدامه بعد ذلك لتوقيع SAS. مفتاح تفويض المستخدم مشابه لمفتاح الحساب المستخدم لتوقيع SAS للخدمة أو SAS للحساب، باستثناء أنه يعتمد على بيانات اعتماد Microsoft Entra. عندما يطلب عميل مفتاح تفويض مستخدم باستخدام رمز OAuth 2.0 المميز، يقوم Blob Storage بإرجاع مفتاح تفويض المستخدم نيابة عن المستخدم.

بمجرد حصولك على مفتاح التفويض الخاص بالمستخدم، يمكنك استخدام هذا المفتاح لإنشاء أي عدد من توقيعات الوصول المشترك لتفويض المستخدم، على مدار عمر المفتاح. مفتاح تفويض المستخدم مستقل عن الرمز المميز OAuth 2.0 المستخدم للحصول عليه، لذلك لا يلزم تجديد الرمز المميز إذا كان المفتاح لا يزال صالحا. يمكنك تحديد المدة الزمنية التي يبقى فيها المفتاح صالحا، بحد أقصى سبعة أيام.

استخدم إحدى الطرق التالية لطلب مفتاح التفويض الخاص بالمستخدم:

يوضح مثال التعليمات البرمجية التالي كيفية طلب مفتاح تفويض المستخدم:

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

إنشاء توقيع الوصول المشترك لتفويض مستخدم لكائن ثنائي كبير الحجم

بمجرد الحصول على مفتاح تفويض المستخدم، يمكنك إنشاء SAS لتفويض المستخدم. يمكنك إنشاء SAS لتفويض مستخدم لتفويض وصول محدود إلى مورد كائن ثنائي كبير الحجم باستخدام الأسلوب التالي:

يتم تمرير مفتاح تفويض المستخدم لتوقيع SAS إلى الأسلوب كوسيطة user_delegation_key . يتم تمرير الأذونات المسموح بها إلى الأسلوب كوسيطة permission ، ويتم تعريفها في فئة BlobSasPermissions .

يوضح مثال التعليمات البرمجية التالي كيفية إنشاء SAS لتفويض مستخدم لكائن ثنائي كبير الحجم:

def create_user_delegation_sas_blob(self, blob_client: BlobClient, 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_blob_sas(
        account_name=blob_client.account_name,
        container_name=blob_client.container_name,
        blob_name=blob_client.blob_name,
        user_delegation_key=user_delegation_key,
        permission=BlobSasPermissions(read=True),
        expiry=expiry_time,
        start=start_time
    )

    return sas_token

استخدام توقيعات الوصول المشترك لتفويض مستخدم لتخويل كائن عميل

يوضح مثال التعليمات البرمجية التالي كيفية استخدام توقيع الوصول المشترك لتفويض المستخدم الذي تم إنشاؤه في المثال السابق لتخويل كائن BlobClient . يمكن استخدام كائن العميل هذا لتنفيذ العمليات على مورد الكائن الثنائي كبير الحجم استنادا إلى الأذونات الممنوحة من قبل 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"{blob_client.url}?{sas_token}"

# Create a BlobClient object with SAS authorization
blob_client_sas = BlobClient.from_blob_url(blob_url=sas_url)

الموارد

لمعرفة المزيد حول إنشاء SAS لتفويض مستخدم باستخدام مكتبة عميل Azure Blob Storage ل Python، راجع الموارد التالية.

عمليات واجهة برمجة تطبيقات REST

يحتوي Azure SDK ل Python على مكتبات تستند إلى واجهة برمجة تطبيقات AZURE REST، مما يسمح لك بالتفاعل مع عمليات REST API من خلال نماذج Python المألوفة. تستخدم طريقة مكتبة العميل للحصول على مفتاح تفويض المستخدم عمليات واجهة برمجة تطبيقات REST التالية:

نماذج التعليمات البرمجية

موارد مكتبة العميل

(راجع أيضًا )