Python을 사용하여 계정 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(공유 액세스 서명)를 사용하여 데이터에 대한 제한된 액세스 권한 부여를 참조하세요.
이 문서에서는 스토리지 계정 키로 Python용 Azure Storage 클라이언트 라이브러리를 사용하여 계정 SAS를 만드는 방법을 보여 줍니다.
계정 SAS 정보
계정 SAS는 스토리지 계정 수준에서 만들어집니다. 계정 SAS를 만들어 다음을 수행할 수 있습니다.
- Blob 서비스 속성 가져오기, Blob 서비스 속성 설정 및 Blob 서비스 통계 가져오기와 같은 서비스별 SAS에서 현재 사용할 수 없는 서비스 수준 작업에 대한 액세스를 위임합니다.
- 스토리지 계정에서 한 번에 둘 이상의 서비스에 대한 액세스를 위임합니다. 예를 들어 계정 SAS를 사용하여 Azure Blob Storage 및 Azure Files의 리소스에 대한 액세스 권한을 위임할 수 있습니다.
저장된 액세스 정책은 아직 계정 SAS에서 지원되지 않습니다.
계정 SAS 만들기
계정 SAS는 계정 액세스 키로 서명됩니다. 다음 코드 예제에서는 generate_account_sas 메서드를 호출하여 계정 SAS 토큰 문자열을 가져오는 방법을 보여 줍니다.
def create_account_sas(self, account_name: str, account_key: str):
# Create an account SAS that's valid for one day
start_time = datetime.datetime.now(datetime.timezone.utc)
expiry_time = start_time + datetime.timedelta(days=1)
# Define the SAS token permissions
sas_permissions=AccountSasPermissions(read=True)
# Define the SAS token resource types
# For this example, we grant access to service-level APIs
sas_resource_types=ResourceTypes(service=True)
sas_token = generate_account_sas(
account_name=account_name,
account_key=account_key,
resource_types=sas_resource_types,
permission=sas_permissions,
expiry=expiry_time,
start=start_time
)
return sas_token
ResourceTypes 생성자에 대한 유효한 매개 변수는 다음과 같습니다.
- service: 기본값은
False
입니다. 서비스 수준 API에 대한 액세스 권한을 부여하려면True
로 설정합니다. - container: 기본값은
False
입니다. 서비스 수준 API에 대한 액세스 권한을 부여하려면True
로 설정합니다. - object: 기본값은
False
입니다. Blob, 큐 메시지 및 필드의 개체 수준 API에 대한 액세스 권한을 부여하려면True
로 설정합니다.
사용 가능한 권한에 대해서는 AccountSasPermissions를 참조하세요.
클라이언트에서 계정 SAS 사용
계정 SAS를 사용하여 Blob service에 대한 서비스 수준 API에 액세스하려면 계정 SAS 및 스토리지 계정에 대한 Blob 스토리지 엔드포인트를 사용하여 BlobServiceClient 개체를 만듭니다.
# The SAS token string can be appended to the account URL with a ? delimiter
# or passed as the credential argument to the client constructor
account_sas_url = f"{blob_service_client.url}?{sas_token}"
# Create a BlobServiceClient object
blob_service_client_sas = BlobServiceClient(account_url=account_sas_url)
또한 그러한 리소스 유형에 서명 값의 일부로 액세스 권한이 부여된 경우 계정 SAS를 사용하여 권한을 부여하고 ContainerClient 개체 또는 BlobClient 개체를 사용할 수 있습니다.
리소스
Python용 Azure Blob Storage 클라이언트 라이브러리를 사용하여 계정 SAS를 만드는 방법에 대해 자세히 알아보려면 다음 리소스를 참조하세요.