Python을 사용하여 컨테이너 또는 Blob에 대한 사용자 위임 SAS 만들기
SAS(공유 액세스 서명)를 사용하면 스토리지 계정의 컨테이너 및 Blob에 대한 제한된 액세스 권한을 부여할 수 있습니다. SAS를 만들 때 클라이언트에서 액세스할 수 있는 Azure Storage 리소스, 해당 리소스에 대한 사용 권한, SAS의 유효 기간 등의 해당 제약 조건을 지정합니다.
모든 SAS는 키로 서명됩니다. 다음 두 가지 방법 중 하나로 SAS에 서명할 수 있습니다.
- Microsoft Entra 자격 증명을 사용하여 만들어진 키를 사용합니다. Microsoft Entra 자격 증명으로 서명된 SAS는 사용자 위임 SAS입니다. 사용자 위임 SAS를 만드는 클라이언트에는 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey 작업을 포함하는 Azure RBAC 역할이 할당되어야 합니다. 자세한 내용은 사용자 위임 SAS 만들기를 참조하세요.
- 스토리지 계정 키를 사용합니다. 서비스 SAS와 계정 SAS는 모두 스토리지 계정 키로 서명됩니다. 서비스 SAS를 만드는 클라이언트는 계정 키에 대한 직접 액세스 권한이 있거나 Microsoft.Storage/storageAccounts/listkeys/action 권한이 할당되어야 합니다. 자세한 내용은 서비스 SAS 만들기 또는 계정 SAS 만들기를 참조하세요.
참고 항목
사용자 위임 SAS는 스토리지 계정 키로 서명된 SAS에 뛰어난 보안을 제공합니다. 가능하면 사용자 위임 SAS를 사용하는 것이 좋습니다. 자세한 내용은 SAS(공유 액세스 서명)를 사용하여 데이터에 대한 제한된 액세스 권한 부여를 참조하세요.
이 문서에서는 Microsoft Entra 자격 증명을 사용하여 Python용 Azure Storage 클라이언트 라이브러리를 사용하여 컨테이너 또는 Blob에 대한 사용자 위임 SAS를 만드는 방법을 보여 줍니다.
사용자 위임 SAS 정보
컨테이너 또는 Blob에 액세스하기 위한 SAS 토큰은 Microsoft Entra 자격 증명 또는 계정 키를 사용하여 보호될 수 있습니다. Microsoft Entra 자격 증명으로 보안이 설정된 SAS를 사용자 위임 SAS라고 합니다. 이는 SAS에 서명하는 데 사용되는 OAuth 2.0 토큰이 사용자를 대신하여 요청되기 때문입니다.
되도록이면 쉽게 손상될 수 있는 계정 키 대신 보안 모범 사례에 따라 Microsoft Entra 자격 증명을 사용하는 것이 좋습니다. 애플리케이션 디자인에 공유 액세스 서명이 필요한 경우 Microsoft Entra 자격 증명을 사용하여 뛰어난 보안을 위해 사용자 위임 SAS를 만듭니다. 사용자 위임 SAS에 대한 자세한 내용은 사용자 위임 SAS 만들기를 참조하세요.
주의
유효한 SAS를 소유한 클라이언트는 해당 SAS에서 허용한 스토리지 계정의 데이터에 액세스할 수 있습니다. 악의적이거나 의도하지 않은 사용으로부터 SAS를 보호하는 것이 중요합니다. SAS 배포는 신중해야 하고, 손상된 SAS를 철회하는 계획을 세워야 합니다.
공유 액세스 서명에 대한 자세한 내용은 SAS(공유 액세스 서명)를 사용하여 Azure Storage 리소스에 대한 제한된 액세스 권한 부여를 참조하세요.
데이터 액세스를 위한 Azure 역할 할당
Microsoft Entra 보안 주체가 데이터에 액세스하려고 시도하는 경우 해당 보안 주체에는 리소스에 대한 권한이 있어야 합니다. 보안 주체가 Azure의 관리 ID이거나 개발 환경에서 코드를 실행하는 Microsoft Entra 사용자 계정인지 여부에 관계없이 보안 주체에는 데이터에 대한 액세스 권한을 부여하는 Azure 역할이 할당되어야 합니다. Azure RBAC를 통해 권한을 할당하는 방법에 관한 자세한 내용은 Blob 데이터에 액세스하기 위한 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에 액세스할 수 있는 권한을 관리 ID에 부여하는 방법에 대한 자세한 내용은 Python용 Azure ID 클라이언트 라이브러리를 참조하세요.
다음 코드 조각에서는 인증된 토큰 자격 증명을 가져와서 이를 사용하여 Blob Storage용 서비스 클라이언트를 만드는 방법을 보여 줍니다.
# 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())
Python SDK를 사용하여 애플리케이션에서 Blob Storage에 대한 액세스 권한을 부여하는 방법에 대한 자세한 내용은 Azure 서비스에 Python 앱 인증을 참조하세요.
사용자 위임 키 가져오기
모든 SAS는 키로 서명됩니다. 사용자 위임 SAS를 만들려면 먼저 SAS에 서명하는 데 사용되는 사용자 위임 키를 요청해야 합니다. 사용자 위임 키는 Microsoft Entra 자격 증명에 의존한다는 점을 제외하면 서비스 SAS 또는 계정 SAS에 서명하는 데 사용되는 계정 키와 유사합니다. 클라이언트가 OAuth 2.0 토큰을 사용하여 사용자 위임 키를 요청하면 Blob Storage가 사용자를 대신하여 사용자 위임 키를 반환합니다.
사용자 위임 키를 받은 후에는 해당 키를 사용하여 키의 수명이 끝날 때까지 사용자 위임 공유 액세스 서명을 개수 제한 없이 만들 수 있습니다. 사용자 위임 키는 해당 키를 획득하는 데 사용된 OAuth 2.0 토큰과 별개이므로 키가 여전히 유효하다면 토큰을 갱신할 필요가 없습니다. 키가 유효한 상태로 유지되는 기간을 최대 7일까지 지정할 수 있습니다.
다음 방법 중 하나를 사용하여 사용자 위임 키를 요청합니다.
다음 코드 예제에서는 사용자 위임 키를 요청하는 방법을 보여 줍니다.
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 만들기:
앱의 요구 사항에 따라 컨테이너 또는 Blob에 대한 사용자 위임 SAS를 만들 수 있습니다.
사용자 위임 키를 가져온 후에는 사용자 위임 SAS를 만들 수 있습니다. 다음 메서드를 사용하여 컨테이너 리소스에 대해 제한된 액세스를 위임할 사용자 위임 SAS를 만들 수 있습니다.
SAS에 서명하는 사용자 위임 키는 user_delegation_key
인수로 메서드에 전달됩니다. 허용되는 권한은 메서드에 permission
인수로 전달되고 ContainerSasPermissions 클래스에 정의됩니다.
다음 코드 예제에서는 컨테이너에 대한 사용자 위임 SAS를 생성하는 방법을 보여줍니다.
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
사용자 위임 SAS를 사용하여 클라이언트 개체 권한 부여
사용자 위임 SAS를 사용하면 SAS에서 부여한 권한에 따라 컨테이너 또는 Blob에서 작업을 수행하도록 클라이언트 개체에 권한을 부여할 수 있습니다.
다음 코드 예제에서는 이전 예제에서 만든 사용자 위임 SAS를 사용하여 ContainerClient 개체에 권한을 부여하는 방법을 보여 줍니다. 이 클라이언트 개체는 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)
리소스
Python용 Azure Blob Storage 클라이언트 라이브러리를 사용하여 사용자 위임 SAS를 만드는 방법에 대해 자세히 알아보려면 다음 리소스를 참조하세요.
코드 샘플
REST API 작업
Python용 Azure SDK에는 Azure REST API를 기반으로 빌드되는 라이브러리가 포함되어 있어 친숙한 Python 패러다임을 통해 REST API 작업과 상호 작용할 수 있습니다. 사용자 위임 키를 가져오기 위한 클라이언트 라이브러리 메서드는 다음 REST API 작업을 사용합니다.
- 사용자 위임 키 가져오기(REST API)
클라이언트 라이브러리 리소스
참고 항목
관련 콘텐츠
- 이 문서는 Python용 Blob Storage 개발자 가이드의 일부입니다. 자세한 내용은 Python 앱 빌드에서 개발자 가이드 문서의 전체 목록을 참조하세요.