사용자 위임 SAS 만들기

Microsoft Entra 자격 증명 또는 계정 키를 사용하여 컨테이너, 디렉터리 또는 Blob에 액세스할 수 있도록 SAS(공유 액세스 서명) 토큰을 보호할 수 있습니다. Microsoft Entra 자격 증명으로 보호되는 SAS를 사용자 위임 SAS라고 합니다. 보안 모범 사례로, 더 쉽게 손상될 수 있는 계정 키 대신 가능한 경우 Microsoft Entra 자격 증명을 사용하는 것이 좋습니다. 애플리케이션 디자인에 공유 액세스 서명이 필요한 경우 Microsoft Entra 자격 증명을 사용하여 보안 향상을 위해 사용자 위임 SAS를 만듭니다.

모든 SAS는 키로 서명됩니다. 사용자 위임 SAS를 만들려면 먼저 SAS에 서명하는 데 사용하는 사용자 위임 키를 요청해야 합니다. 사용자 위임 키는 Microsoft Entra 자격 증명에 의존한다는 점을 제외하고 서비스 SAS 또는 계정 SAS에 서명하는 데 사용되는 계정 키와 유사합니다. 사용자 위임 키를 요청하려면 사용자 위임 키 가져오기 작업을 호출합니다. 그런 다음, 사용자 위임 키를 사용하여 SAS를 만들 수 있습니다.

사용자 위임 SAS는 Azure Blob Storage 및 Azure Data Lake Storage Gen2 지원됩니다. 저장된 액세스 정책은 사용자 위임 SAS에 대해 지원되지 않습니다.

주의

공유 액세스 서명은 스토리지 리소스에 권한을 부여하는 키이며 계정 키를 보호하는 것처럼 보호해야 합니다. 악의적이거나 의도하지 않은 사용으로부터 SAS를 보호하는 것이 중요합니다. SAS 배포는 신중해야 하고, 손상된 SAS를 철회하는 계획을 세워야 합니다. 공유 액세스 서명을 사용하는 작업은 HTTPS 연결을 통해서만 수행해야 하며 공유 액세스 서명 URI는 HTTPS와 같은 보안 연결에만 배포되어야 합니다.

계정 키를 사용하여 SAS를 보호하는 방법에 대한 자세한 내용은 서비스 SAS 만들기계정 SAS 만들기를 참조하세요.

디렉터리 범위 액세스에 대한 사용자 위임 SAS 지원

사용자 위임 SAS는 권한 부여 버전(sr=d)이 2020-02-10 이상이고 HNS(sv계층 구조 네임스페이스)가 사용하도록 설정된 경우 디렉터리 scope()를 지원합니다. 디렉터리 scope(sr=d)에 대한 의미 체계는 컨테이너 scope(sr=c)와 유사합니다. 단, 액세스는 디렉터리 및 디렉터리 내의 모든 파일 및 하위 디렉터리로 제한됩니다. sr=d 가 지정되면 sdd 쿼리 매개 변수도 필요합니다.

권한 부여 버전 2020-02-10에 대한 문자열 간 형식은 변경되지 않습니다.

사용자 OID에 대한 사용자 위임 SAS 지원

사용자 위임 SAS는 권한 부여 버전()이 2020-02-10 이상일 때 또는 suoid 매개 변수로 전달되는 saoid 선택적 OID(sv사용자 개체 식별자)를 지원합니다. 이 선택적 매개 변수는 Hadoop 및 Spark와 같은 다중 사용자 클러스터 워크로드에 대한 향상된 권한 부여 모델을 제공합니다.

SAS 토큰은 특정 파일 시스템 작업 및 사용자로 제한될 수 있으며, 다중 사용자 클러스터에 배포하는 것이 더 안전한 덜 취약한 액세스 토큰을 제공합니다. 이러한 기능의 한 가지 사용 사례는 Hadoop ABFS 드라이버를 Apache Ranger와 통합하는 것입니다.

사용자 위임 SAS 권한 부여

클라이언트가 사용자 위임 SAS를 사용하여 Blob Storage 리소스에 액세스하는 경우 Azure Storage에 대한 요청은 SAS를 만드는 데 사용된 Microsoft Entra 자격 증명으로 권한이 부여됩니다. SAS에 명시적으로 부여된 권한과 함께 해당 Microsoft Entra 계정에 대해 부여된 RBAC(역할 기반 액세스 제어) 권한은 리소스에 대한 클라이언트의 액세스를 결정합니다. 이 방법은 추가 수준의 보안을 제공하며 애플리케이션 코드와 함께 계정 액세스 키를 저장할 필요가 없도록 도와줍니다. 이러한 이유로 Microsoft Entra 자격 증명을 사용하여 SAS를 만드는 것이 보안 모범 사례입니다.

SAS를 소유한 클라이언트에 부여된 권한은 사용자 위임 키를 요청한 보안 주체에게 부여된 권한과 (sp) 필드를 사용하여 signedPermissions SAS 토큰의 리소스에 부여된 권한의 교차점입니다. RBAC를 통해 보안 주체에 부여된 권한이 SAS 토큰에 부여되지 않은 경우에는 이 권한이 SAS를 사용하여 리소스에 액세스하려고 시도하는 클라이언트에 부여되지 않습니다. 사용자 위임 SAS를 만들 때 RBAC를 통해 부여된 권한과 SAS 토큰을 통해 부여된 권한이 모두 클라이언트에 필요한 액세스 수준에 부합하는지 확인합니다.

사용자 위임 SAS를 만들려면 다음을 수행합니다.

  1. RBAC를 사용하여 사용자 위임 키를 요청할 보안 주체에게 원하는 권한을 부여합니다.
  2. Microsoft Entra ID OAuth 2.0 토큰을 획득합니다.
  3. 토큰을 사용하여 사용자 위임 키 가져오기 작업을 호출하여 사용자 위임 키를 요청합니다.
  4. 사용자 위임 키를 사용하여 적절한 필드로 SAS 토큰을 생성합니다.

RBAC를 사용하여 권한 할당

사용자 위임 키를 요청하는 보안 주체에는 적절한 권한이 있어야 합니다. Microsoft Entra ID 보안 주체는 사용자, 그룹, 서비스 주체 또는 관리 ID일 수 있습니다.

사용자 위임 키를 요청하려면 보안 주체에 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey 작업을 할당해야 합니다. 다음 기본 제공 RBAC 역할에는 명시적으로 또는 와일드카드 정의의 일부로 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey 작업이 포함됩니다.

사용자 위임 키 가져오기 작업은 스토리지 계정 수준에서 작동하므로 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey 작업은 스토리지 계정, 리소스 그룹 또는 구독 수준에서 범위가 지정되어야 합니다. 보안 주체에 이전에 나열된 기본 제공 역할 또는 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey 작업을 포함하는 사용자 지정 역할이 할당된 경우 스토리지 계정, 리소스 그룹 또는 구독 수준에서 보안 주체가 사용자 위임 키를 요청할 수 있습니다.

보안 주체에 데이터 액세스를 허용하지만 컨테이너 수준으로 범위가 지정된 역할이 할당된 경우 스토리지 계정, 리소스 그룹 또는 구독 수준에서 보안 주체에 Storage Blob 위임자 역할을 추가로 할당할 수 있습니다. Storage Blob 위임자 역할은 보안 주체에게 사용자 위임 키를 요청할 수 있는 권한을 부여합니다.

Azure Storage의 RBAC 역할에 대한 자세한 내용은 Azure Active Directory로 권한 부여를 참조하세요.

OAuth 2.0 토큰 획득

사용자 위임 키를 얻으려면 먼저 Microsoft Entra ID OAuth 2.0 토큰을 요청합니다. 전달자 스키마를 사용하여 토큰을 제공하여 사용자 위임 키 가져오기 작업에 대한 호출에 권한을 부여합니다. Microsoft Entra ID OAuth 토큰을 요청하는 방법에 대한 자세한 내용은 인증 흐름 및 애플리케이션 시나리오를 참조하세요.

사용자 위임 키 요청

사용자 위임 키 가져오기 작업에 대한 호출은 키를 사용자 위임 SAS 토큰의 매개 변수로 사용되는 값 집합으로 반환합니다. 이러한 매개 변수는 사용자 위임 키 가져오기 참조 및 다음 섹션인 "사용자 위임 SAS 생성"에 설명되어 있습니다.

클라이언트가 OAuth 2.0 토큰을 사용하여 사용자 위임 키를 요청하면 Azure Storage는 보안 주체를 대신하여 사용자 위임 키를 반환합니다. 사용자 위임 키를 사용하여 만든 SAS에는 보안 주체에게 부여된 권한이 부여됩니다.

사용자 위임 키가 있으면 이 키를 사용하여 키 수명 동안 사용자 위임 공유 액세스 서명을 여러 개 만들 수 있습니다. 사용자 위임 키는 획득하는 데 사용하는 OAuth 2.0 토큰과 독립적이므로 키가 유효한 한 토큰을 갱신할 필요가 없습니다. 키가 최대 7일 동안 유효하도록 지정할 수 있습니다.

사용자 위임 SAS 구성

다음 표에는 사용자 위임 SAS 토큰에 대해 지원되는 필드가 요약되어 있습니다. 후속 섹션에서는 이러한 매개 변수를 지정하는 방법에 대한 추가 세부 정보를 제공합니다.

SAS 필드 이름 SAS 토큰 매개 변수 필수 또는 선택 버전 지원 Description
signedVersion sv 필수 2018-11-09 이상 서명 필드를 생성하는 데 사용되는 서비스의 버전을 나타냅니다. 또한 이 SAS로 수행되는 요청을 처리하는 서비스 버전을 지정합니다.
signedResource sr 필수 모두 공유 액세스 서명을 통해 액세스할 수 있는 Blob 리소스를 지정합니다.
signedStart st 선택 사항 모두 선택 사항입니다. 공유 액세스 서명이 유효해지는 시간이며, 허용되는 ISO 8601 UTC 형식 중 하나로 표현됩니다. 이 값을 생략하면 현재 UTC 시간이 시작 시간으로 사용됩니다. 허용되는 UTC 형식에 대한 자세한 내용은 DateTime 값 서식을 참조하세요.
signedExpiry se 필수 모두 공유 액세스 서명이 유효하지 않은 경우 허용되는 ISO 8601 UTC 형식 중 하나로 표현되는 시간입니다. 허용되는 UTC 형식에 대한 자세한 내용은 DateTime 값 서식을 참조하세요.
signedPermissions sp 필수 모두 SAS를 소유한 클라이언트가 리소스에서 수행할 수 있는 작업을 나타냅니다. 사용 권한을 결합할 수 있습니다.
signedIp sip 선택 사항 2015-04-05 이상 요청을 수락할 IP 주소 또는 포괄 IP 주소 범위를 지정합니다. 범위를 지정할 때는 범위가 포함됩니다. IPv4 주소만 지원됩니다.

예를 들어 sip=168.1.5.65 또는 sip=168.1.5.60-168.1.5.70입니다.
signedProtocol spr 선택 사항 2015-04-05 이상 SAS를 사용하여 수행한 요청에 허용되는 프로토콜을 지정합니다. SAS 토큰으로 수행된 요청이 HTTPS를 사용하도록 요구하려면 이 필드를 포함합니다.
signedObjectId skoid 필수 2018-11-09 이상 Microsoft Entra 보안 주체를 식별합니다.
signedTenantId sktid 필수 2018-11-09 이상 보안 주체가 정의된 Microsoft Entra 테넌트 를 지정합니다.
signedKeyStartTime skt 선택 사항입니다. 2018-11-09 이상 값은 사용자 위임 키 가져오기 작업에서 반환됩니다. 허용되는 ISO 8601 UTC 형식 중 하나로 표현된 사용자 위임 키의 수명 시작을 나타냅니다. 값을 생략하면 현재 시간이 가정됩니다. 허용되는 UTC 형식에 대한 자세한 내용은 DateTime 값 서식을 참조하세요.
signedKeyExpiryTime ske 필수 2018-11-09 이상 값은 사용자 위임 키 가져오기 작업에서 반환됩니다. 허용되는 ISO 8601 UTC 형식 중 하나로 표현된 사용자 위임 키의 수명 종료를 나타냅니다. 허용되는 UTC 형식에 대한 자세한 내용은 DateTime 값 서식을 참조하세요.
signedKeyVersion skv 필수 2018-11-09 이상 값은 사용자 위임 키 가져오기 작업에서 반환됩니다. 사용자 위임 키를 가져오는 데 사용된 스토리지 서비스 버전을 지정합니다. 이 필드는 버전 2018-11-09 이상을 지정해야 합니다.
signedKeyService sks 필수 2018-11-09 이상 사용자 위임 키가 유효한 서비스를 나타냅니다. 현재는 Blob Storage만 지원됩니다.
signedAuthorizedObjectId saoid 선택 사항 2020-02-10 이상 SAS 토큰에서 부여한 작업을 수행하기 위해 사용자 위임 키의 소유자가 권한을 부여한 Microsoft Entra 보안 주체의 개체 ID를 지정합니다. POSIX(이식 가능한 운영 체제 인터페이스) ACL(액세스 제어 목록)에 대한 추가 권한 검사 수행되지 않습니다.
signedUnauthorizedObjectId suoid 선택 사항 2020-02-10 이상 계층 구조 네임스페이스를 사용하는 경우 Microsoft Entra 보안 주체에 대한 개체 ID를 지정합니다. Azure Storage는 작업에 권한을 부여하기 전에 개체 ID에 대해 POSIX ACL 검사 수행합니다.
signedCorrelationId scid 선택 사항 2020-02-10 이상 스토리지 감사 로그와 SAS를 생성하고 배포하는 보안 주체가 사용하는 감사 로그의 상관 관계를 지정합니다.
signedDirectoryDepth sdd 필요한 경우 sr=d 2020-02-10 이상 문자열 간 필드에 지정된 canonicalizedResource 디렉터리의 루트 폴더 내 디렉터리 수를 나타냅니다.
signedEncryptionScope ses 선택 사항 2020-12-06 이상 요청 내용을 암호화하는 데 사용할 암호화 scope 나타냅니다.
signature sig 필수 모두 서명은 SHA256 알고리즘을 사용하여 문자열 간 및 키를 통해 계산된 다음 Base64 인코딩을 사용하여 인코딩되는 해시 기반 HMAC(메시지 인증 코드)입니다.
Cache-Control 응답 헤더 rscc 선택 사항 2013-08-15 이상 Azure Storage는 Cache-Control 응답 헤더를 SAS 토큰에 지정된 값으로 설정합니다.
Content-Disposition 응답 헤더 rscd 선택 사항 2013-08-15 이상 Azure Storage는 Content-Disposition 응답 헤더를 SAS 토큰에 지정된 값으로 설정합니다.
Content-Encoding 응답 헤더 rsce 선택 사항 2013-08-15 이상 Azure Storage는 Content-Encoding 응답 헤더를 SAS 토큰에 지정된 값으로 설정합니다.
Content-Language 응답 헤더 rscl 선택 사항 2013-08-15 이상 Azure Storage는 Content-Language 응답 헤더를 SAS 토큰에 지정된 값으로 설정합니다.
Content-Type 응답 헤더 rsct 선택 사항 2013-08-15 이상 Azure Storage는 Content-Type 응답 헤더를 SAS 토큰에 지정된 값으로 설정합니다.

서명된 버전 필드 지정

필수 signedVersion (sv) 필드는 공유 액세스 서명에 대한 서비스 버전을 지정합니다. 이 값은 필드를 생성하는 signature 데 사용되는 서비스 버전을 나타내며 이 공유 액세스 서명으로 이루어진 요청을 처리하는 서비스 버전을 지정합니다. 필드 값 sv 은 버전 2018-11-09 이상이어야 합니다.

서명된 리소스 필드 지정

필수 signedResource (sr) 필드는 공유 액세스 서명을 통해 액세스할 수 있는 리소스를 지정합니다. 다음 표에서는 SAS 토큰에서 Blob, 컨테이너 또는 디렉터리 리소스를 참조하는 방법을 설명합니다.

리소스 매개 변수 값 지원되는 버전 Description
Blob b 모두 Blob의 콘텐츠 및 메타데이터에 대한 액세스 권한을 부여합니다.
Blob 버전 Bv 2018-11-09 이상 기본 Blob이 아닌 Blob 버전의 콘텐츠 및 메타데이터에 대한 액세스 권한을 부여합니다.
Blob 스냅샷 bs 2018-11-09 이상 기본 Blob이 아닌 blob 스냅샷 콘텐츠 및 메타데이터에 대한 액세스 권한을 부여합니다.
컨테이너 c 모두 컨테이너에 있는 모든 Blob의 콘텐츠 및 메타데이터 및 컨테이너의 Blob 목록에 대한 액세스 권한을 부여합니다.
디렉터리 2020-02-10 이상 계층 구조 네임스페이스를 사용하도록 설정된 스토리지 계정의 디렉터리에 있는 Blob 목록과 디렉터리에 있는 모든 Blob의 콘텐츠 및 메타데이터에 대한 액세스 권한을 부여합니다. 필드에 signedDirectoryDepth 디렉터리를 지정 signedResource 하는 경우 (sdd) 매개 변수도 필요합니다. 디렉터리가 항상 컨테이너 내에 있습니다.

서명 유효 기간 지정

signedStart (st) 및 signedExpiry (se) 필드는 SAS의 시작 및 만료 시간을 나타냅니다. signedExpiry 필드는 필수입니다. signedStart 필드는 선택 사항입니다. 생략하면 현재 UTC 시간이 시작 시간으로 사용됩니다.

사용자 위임 SAS의 경우 SAS의 시작 및 만료 시간은 사용자 위임 키에 대해 정의된 간격 내에 있어야 합니다. 클라이언트가 사용자 위임 키가 만료된 후 SAS를 사용하려고 하면 SAS 자체가 여전히 유효한지 여부에 관계없이 권한 부여 오류와 함께 SAS가 실패합니다.

허용되는 UTC 형식에 대한 자세한 내용은 DateTime 값 서식을 참조하세요.

사용 권한 지정

SAS 토큰의 signedPermissions (sp) 필드에 대해 지정된 권한은 SAS를 소유한 클라이언트가 리소스에서 수행할 수 있는 작업을 나타냅니다.

사용 권한을 결합하여 클라이언트가 동일한 SAS를 사용하여 여러 작업을 수행할 수 있도록 할 수 있습니다. SAS를 생성할 때 다음 순서로 권한을 포함해야 합니다.

racwdxltmeop

컨테이너에 대한 유효한 권한 설정의 예로는 , , , rl, 및 가 있습니다rlrw. wlwdrd 잘못된 설정의 예로는 , , 및 가 있습니다wrdw. lrdr 권한 지정을 두 번 이상 지정하는 것은 허용되지 않습니다.

사용자 위임 SAS는 특정 작업에 대한 액세스 권한을 부여할 수 없습니다.

  • 컨테이너를 만들거나 삭제하거나 나열할 수 없습니다.
  • 컨테이너 메타데이터 및 속성은 읽거나 쓸 수 없습니다.
  • 컨테이너는 임대할 수 없습니다.

이러한 작업에 대한 액세스 권한을 부여하는 SAS를 생성하려면 계정 SAS를 사용합니다. 자세한 내용은 계정 SAS 만들기를 참조하세요.

각 리소스 종류에 대해 지원되는 권한은 다음 표에 설명되어 있습니다.

사용 권한 URI 기호 리소스 버전 지원 허용되는 작업
읽기 r 컨테이너
디렉터리
Blob
모두 컨테이너 또는 디렉터리에 있는 Blob의 콘텐츠, 차단 목록, 속성 및 메타데이터를 읽습니다. Blob을 복사 작업의 원본으로 사용합니다.
추가 a 컨테이너
디렉터리
Blob
모두 추가 Blob에 블록을 추가합니다.
만들기 c 컨테이너
디렉터리
Blob
모두 새 Blob을 작성하거나, Blob을 스냅샷, Blob을 새 Blob에 복사합니다.
쓰기 w 컨테이너
디렉터리
Blob
모두 콘텐츠, 속성, 메타데이터 또는 차단 목록을 만들거나 씁니다. Blob의 스냅숏을 만들거나 Blob을 임대합니다. Blob의 크기를 조정합니다(페이지 Blob만 해당). Blob을 복사 작업의 대상으로 사용합니다.
삭제 컨테이너
디렉터리
Blob
모두 Blob을 삭제합니다. 버전 2017-07-29 이상에서는 삭제 권한을 통해 Blob에서 임대를 중단할 수도 있습니다. 자세한 내용은 Blob 임대 작업을 참조하세요.
버전 삭제 x 컨테이너
Blob
2019-12-12 이상 Blob 버전 삭제
영구 삭제 y Blob 2020-02-10 이상 Blob 스냅샷 또는 버전을 영구적으로 삭제합니다.
목록 l 컨테이너
디렉터리
모두 Blob을 재귀적으로 나열합니다.
태그 t Blob 2019-12-12 이상 Blob에서 태그를 읽거나 씁니다.
이동 컨테이너
디렉터리
Blob
2020-02-10 이상 Blob 또는 디렉터리 및 해당 내용을 새 위치로 이동합니다. 매개 변수가 SAS 토큰에 포함되고 고정 비트가 부모 디렉터리에 설정된 경우 saoid 이 작업은 필요에 따라 자식 Blob, 디렉터리 또는 부모 디렉터리의 소유자로 제한될 수 있습니다.
Execute e 컨테이너
디렉터리
Blob
2020-02-10 이상 시스템 속성을 가져와서 스토리지 계정에 대해 계층 구조 네임스페이스를 사용하도록 설정한 경우 Blob의 POSIX ACL을 가져옵니다. 계층 구조 네임스페이스를 사용하도록 설정하고 호출자가 Blob의 소유자인 경우 이 권한은 Blob의 소유 그룹, POSIX 권한 및 POSIX ACL을 설정하는 기능을 부여합니다. 호출자가 사용자 정의 메타데이터를 읽는 것을 허용하지 않습니다.
소유권 o 컨테이너
디렉터리
Blob
2020-02-10 이상 계층 구조 네임스페이스를 사용하도록 설정하면 호출자가 소유자 또는 소유 그룹을 설정하거나 호출자가 고정 비트가 설정된 디렉터리 내에서 디렉터리 또는 Blob의 이름을 바꾸거나 삭제할 때 소유자 역할을 할 수 있습니다.
사용 권한 p 컨테이너
디렉터리
Blob
2020-02-10 이상 계층 구조 네임스페이스를 사용하도록 설정하면 호출자가 디렉터리 및 Blob에 대한 권한 및 POSIX ACL을 설정할 수 있습니다.
불변성 정책 설정 i 컨테이너
Blob
2020-06-12 이상 Blob에서 불변성 정책 또는 법적 보존을 설정하거나 삭제합니다.

IP 주소 또는 IP 범위 지정

선택적 signedIp (sip) 필드는 요청을 수락할 공용 IP 주소 또는 공용 IP 주소 범위를 지정합니다. 요청이 시작된 IP 주소가 SAS 토큰에 지정된 IP 주소 또는 주소 범위와 일치하지 않는 경우 요청은 권한이 부여되지 않습니다. IPv4 주소만 지원됩니다.

IP 주소 범위를 지정하면 범위가 포함됩니다. 예를 들어 SAS에서 또는 sip=168.1.5.60-168.1.5.70 을 지정 sip=168.1.5.65 하면 요청이 해당 IP 주소로 제한됩니다.

다음 표에서는 클라이언트 환경 및 스토리지 계정의 signedIp 위치에 따라 지정된 시나리오에 대한 SAS 토큰에 필드를 포함할지 여부를 설명합니다.

클라이언트 환경 스토리지 계정 위치 권장
Azure에서 실행되는 클라이언트 클라이언트와 동일한 지역에서 이 시나리오에서 클라이언트에 제공되는 SAS에는 필드에 대한 아웃바운드 IP 주소가 signedIp 포함되어서는 안 됩니다. 지정된 아웃바운드 IP 주소가 있는 SAS를 사용하여 동일한 지역 내에서 수행한 요청은 실패합니다.

대신 Azure 가상 네트워크를 사용하여 네트워크 보안 제한을 관리합니다. 동일한 지역 내에서 Azure Storage에 대한 요청은 항상 개인 IP 주소를 통해 수행됩니다. 자세한 내용은 Azure Storage 방화벽 및 가상 네트워크 구성을 참조하세요.
Azure에서 실행되는 클라이언트 클라이언트와 다른 지역에서 이 시나리오에서 클라이언트에 제공되는 SAS에는 필드에 대한 공용 IP 주소 또는 주소 범위가 signedIp 포함될 수 있습니다. SAS로 만드는 요청은 지정된 IP 주소 또는 주소 범위에서 발생해야 합니다.
온-프레미스 또는 다른 클라우드 환경에서 실행되는 클라이언트 모든 Azure 지역에서 이 시나리오에서 클라이언트에 제공되는 SAS에는 필드에 대한 공용 IP 주소 또는 주소 범위가 signedIp 포함될 수 있습니다. SAS로 만드는 요청은 지정된 IP 주소 또는 주소 범위에서 발생해야 합니다.

요청이 프록시 또는 게이트웨이를 통과하는 경우 해당 프록시 또는 게이트웨이 signedIp 의 공용 아웃바운드 IP 주소를 필드에 제공합니다.

HTTP 프로토콜 지정

선택적 signedProtocol (spr) 필드는 SAS를 사용하여 수행되는 요청에 허용되는 프로토콜을 지정합니다. 가능한 값은 HTTPS와 HTTP(https,http) 또는 HTTPS만(https)입니다. 기본값은 https,http입니다.

참고

필드에 HTTP spr 를 지정할 수 없습니다.

서명된 개체 ID 지정

signedObjectId 사용자 위임 SAS에는 (skoid) 필드가 필요합니다. 사용자 위임 키 가져오기 작업은 이 값을 응답의 일부로 반환합니다. 서명된 개체 ID는 Microsoft ID 플랫폼 보안 주체에 대해 변경할 수 없는 식별자를 제공하는 GUID 값입니다.

서명된 테넌트 ID 지정

signedTenantId 사용자 위임 SAS에는 (sktid) 필드가 필요합니다. 사용자 위임 키 가져오기 작업은 이 값을 응답의 일부로 반환합니다. 서명된 테넌트 ID는 보안 주체가 정의된 Microsoft Entra 테넌트 를 나타내는 GUID 값입니다.

서명된 키 시작 시간 지정

선택적 signedKeyStartTime (skt) 필드는 ISO 날짜 형식의 사용자 위임 키 수명 시작을 나타냅니다. 사용자 위임 키 가져오기 작업은 이 값을 응답의 일부로 반환합니다. 시작 시간을 생략하면 서명된 키 시작 시간이 현재 시간으로 간주됩니다.

서명된 키 만료 시간 지정

signedKeyExpiryTime ISO 날짜 형식의 사용자 위임 SAS에는 (ske) 필드가 필요합니다. 사용자 위임 키 가져오기 작업은 이 값을 응답의 일부로 반환합니다. 서명된 키 만료 시간은 사용자 위임 키의 수명 종료를 나타냅니다. 만료 시간의 값은 SAS 시작 시간으로부터 최대 7일이 될 수 있습니다.

서명된 키 서비스 지정

signedKeyService 사용자 위임 SAS에는 (sks) 필드가 필요합니다. 사용자 위임 키 가져오기 작업은 이 값을 응답의 일부로 반환합니다. 서명된 키 서비스 필드는 사용자 위임 키가 유효한 서비스를 나타냅니다. Blob Storage에 대한 서명된 키 서비스 필드의 값은 입니다 b.

서명된 키 버전 지정

signedkeyversion 사용자 위임 SAS에는 (skv) 필드가 필요합니다. 사용자 위임 키 가져오기 작업은 이 값을 응답의 일부로 반환합니다. signedkeyversion 필드는 사용자 위임 키를 가져오는 데 사용되는 스토리지 서비스 버전을 지정합니다. 이 필드는 버전 2018-11-09 이상을 지정해야 합니다.

보안 주체에 대해 서명된 개체 ID 지정

선택적 signedAuthorizedObjectId (saoid) 및 signedUnauthorizedObjectId (suoid) 필드를 사용하면 Azure Data Lake Storage Gen2 워크로드에 대해 Apache Hadoop 및 Apache Ranger와 통합할 수 있습니다. SAS 토큰에서 다음 필드 중 하나를 사용하여 보안 주체에 대한 개체 ID를 지정합니다.

  • saoid 필드는 SAS 토큰에서 부여한 작업을 수행하기 위해 사용자 위임 키의 소유자가 권한을 부여한 Microsoft Entra 보안 주체의 개체 ID를 지정합니다. Azure Storage는 SAS 토큰의 유효성을 검사하고 Azure Storage가 액세스 권한을 부여하기 전에 사용자 위임 키의 소유자가 필요한 권한을 갖도록 합니다. POSIX ACL에 대한 추가 권한 검사 수행되지 않습니다.
  • suoid 필드는 스토리지 계정에 대해 계층 구조 네임스페이스를 사용하는 경우 Microsoft Entra 보안 주체의 개체 ID를 지정합니다. suoid 필드는 계층 구조 네임스페이스가 있는 계정에만 유효합니다. 필드가 suoid SAS 토큰에 포함되면 Azure Storage는 작업에 권한을 부여하기 전에 개체 ID에 대해 POSIX ACL 검사 수행합니다. 이 ACL 검사 성공하지 못하면 작업이 실패합니다. 필드가 SAS 토큰에 포함된 경우 suoid 스토리지 계정에 대해 계층 구조 네임스페이스를 사용하도록 설정해야 합니다. 그렇지 않으면 권한 검사 권한 부여 오류와 함께 실패합니다.

사용자 위임 키를 요청하는 보안 주체의 개체 ID는 필수 skoid 필드에 캡처됩니다. 또는 필드를 사용하여 SAS 토큰 saoid 에 개체 ID를 지정하려면 필드에 식별된 skoid 보안 주체에 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action 또는 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/manageOwnership/action을 포함하는 RBAC 역할이 할당되어야 합니다.suoid 이러한 작업에 대한 자세한 내용은 Azure 리소스 공급자 작업을 참조하세요.

또는 suoid 필드에 개체 ID를 saoid 지정하여 디렉터리 또는 Blob 소유권과 관련된 작업도 다음과 같은 방법으로 제한합니다.

  • 작업이 디렉터리 또는 Blob을 만드는 경우 Azure Storage는 디렉터리 또는 Blob의 소유자를 개체 ID로 지정된 값으로 설정합니다. 개체 ID를 지정하지 않으면 Azure Storage는 디렉터리 또는 Blob의 소유자를 매개 변수로 지정된 값으로 skoid 설정합니다.
  • 고정 비트가 부모 디렉터리에 설정되어 있고 작업이 디렉터리 또는 Blob을 삭제하거나 이름을 바꾸는 경우 부모 디렉터리 소유자 또는 리소스 소유자의 개체 ID가 개체 ID로 지정된 값과 일치해야 합니다.
  • 작업이 디렉터리 또는 Blob x-ms-owner 의 소유자를 설정하고 헤더를 지정하는 경우 개체 ID로 지정된 값이 헤더로 x-ms-owner 지정된 값과 일치해야 합니다.
  • 작업이 디렉터리 또는 Blob x-ms-group 에 대한 그룹을 설정하고 헤더를 지정하는 경우 개체 ID로 지정된 값은 헤더로 x-ms-group 지정된 그룹의 멤버여야 합니다.
  • 작업이 디렉터리 또는 Blob에 대한 권한 또는 ACL을 설정하는 경우 다음 두 조건 중 하나도 충족해야 합니다.
    • 개체 ID에 대해 지정된 값은 디렉터리 또는 Blob의 소유자여야 합니다.
    • (sp) 필드의 signedPermissions 값에는 () 권한 외에도 Permissions (op) 권한이 포함되어 Ownership 야 합니다.

SAS 토큰을 사용하여 요청할 때 또는 suoid 필드에 지정된 saoid 개체 ID가 진단 로그에 포함됩니다.

saoid 또는 suoid 필드는 (sv) 필드가 signedVersion 버전 2020-02-10 이상으로 설정된 경우에만 지원됩니다. 이러한 필드 중 하나만 SAS 토큰에 포함될 수 있습니다.

상관 관계 ID 지정

signedCorrelationId (scid) 필드는 SAS를 생성하고 배포하는 보안 주체가 사용하는 감사 로그와 스토리지 감사 로그의 상관 관계를 지정하는 데 사용할 수 있는 상관 관계 ID를 지정합니다. 예를 들어 신뢰할 수 있는 권한 부여 서비스에는 일반적으로 사용자를 인증하고 권한을 부여하고, SAS를 생성하고, 로컬 감사 로그에 항목을 추가하고, SAS를 사용자에게 반환하는 관리 ID가 있습니다. 그러면 SAS를 사용하여 Azure Storage 리소스에 액세스할 수 있습니다. 로컬 감사 로그와 스토리지 감사 로그 모두에 상관 관계 ID를 포함하면 나중에 이러한 이벤트를 상호 연결할 수 있습니다. 값은 중괄호가 없고 소문자가 있는 GUID입니다.

이 필드는 버전 2020-02-10 이상에서 지원됩니다.

디렉터리 깊이 지정

필드가 signedResource 디렉터리(sr=d)를 지정하는 경우 루트 디렉터리 아래의 하위 디렉터리 수를 나타내는 (sdd) 필드도 지정 signedDirectoryDepth 해야 합니다. 필드의 sdd 값은 음수가 아닌 정수여야 합니다.

예를 들어 루트 디렉터리의 https://{account}.blob.core.windows.net/{container}/ 깊이는 0입니다. 루트 디렉터리 내의 각 하위 디렉터리가 깊이에 1씩 추가됩니다. 디렉터리의 https://{account}.blob.core.windows.net/{container}/d1/d2 깊이는 2입니다.

이 필드는 버전 2020-02-10 이상에서 지원됩니다.

응답 헤더를 재정의할 쿼리 매개 변수 지정

공유 액세스 서명이 요청에서 사용될 때 반환될 특정 응답 헤더의 값을 정의하려면 쿼리 매개 변수에서 응답 헤더를 지정할 수 있습니다. 응답 헤더와 해당하는 쿼리 매개 변수는 다음과 같습니다.

응답 헤더 이름 해당하는 SAS 쿼리 매개 변수
Cache-Control rscc
Content-Disposition rscd
Content-Encoding rsce
Content-Language rscl
Content-Type rsct

예를 들어 SAS 토큰 Content-Typersct=binary 쿼리 매개 변수를 지정하면 응답 헤더가 로 binary설정됩니다. 이 값은 이 공유 액세스 서명을 사용하는 요청의 Blob에 대해 저장된 Content-Type 헤더 값만 재정의합니다.

응답 헤더를 쿼리 매개 변수로 지정하는 공유 액세스 서명을 만드는 경우 서명 문자열을 생성하는 데 사용되는 문자열-서명에 해당 응답 헤더를 포함해야 합니다. 자세한 내용은 "서명 지정" 섹션을 참조하세요.

암호화 scope 지정

signed encryption scope (ses) 필드는 Blob 배치 작업을 통해 SAS 토큰을 사용하여 Blob을 업로드할 때 클라이언트 애플리케이션이 사용하는 암호화 scope 지정합니다. SAS signed encryption scope 토큰의 서명된 버전(sv) 필드가 버전 2020-12-06 이상인 경우 필드가 지원됩니다. 서명된 버전 필드가 지원되는 버전보다 이전 버전을 지정하는 경우 서비스는 오류 응답 코드 403(사용할 수 없음)을 반환합니다.

컨테이너 또는 파일 시스템에 ses 대해 기본 암호화 scope 설정된 경우 필드는 컨테이너 암호화 정책을 따릅니다. 쿼리 매개 변수와 헤더 간에 ses 불일치가 있고 x-ms-deny-encryption-scope-override 헤더가 로 true설정된 경우 서비스는 오류 응답 코드 403(사용할 수 없음)을 반환 x-ms-default-encryption-scope 합니다.

x-ms-encryption-scope 헤더와 ses 쿼리 매개 변수가 모두 PUT 요청에 제공되고 일치하지 않으면 서비스는 오류 응답 코드 400(잘못된 요청)을 반환합니다.

서명 지정

signature (sig) 필드는 공유 액세스 서명을 사용하여 클라이언트가 수행한 요청에 권한을 부여하는 데 사용됩니다. 문자열-서명은 요청에 권한을 부여하기 위해 확인해야 하는 필드에서 생성된 고유한 문자열입니다. 서명은 SHA256 알고리즘을 사용하여 문자열 간 및 키를 통해 계산된 다음 Base64 인코딩을 사용하여 인코딩되는 HMAC입니다.

사용자 위임 SAS의 서명 문자열을 생성하려면 요청을 구성하는 필드에서 문자열 간을 만들고 문자열을 UTF-8로 인코딩한 다음 HMAC-SHA256 알고리즘을 사용하여 서명을 계산합니다. 문자열-서명에 포함된 필드는 URL 디코딩되어야 합니다.

문자열-서명에 필요한 필드는 권한 부여에 사용되는 서비스 버전(sv 필드)에 따라 달라집니다. 다음 섹션에서는 사용자 위임 SAS를 지원하는 버전에 대한 문자열 간 구성에 대해 설명합니다.

버전 2020-12-06 이상

권한 부여 버전 2020-12-06 이상에 대한 문자열 간 서명 형식은 다음과 같습니다.

StringToSign =  signedPermissions + "\n" +
                signedStart + "\n" +
                signedExpiry + "\n" +
                canonicalizedResource + "\n" +
                signedKeyObjectId + "\n" +
                signedKeyTenantId + "\n" +
                signedKeyStart + "\n" +
                signedKeyExpiry  + "\n" +
                signedKeyService + "\n" +
                signedKeyVersion + "\n" +
                signedAuthorizedUserObjectId + "\n" +
                signedUnauthorizedUserObjectId + "\n" +
                signedCorrelationId + "\n" +
                signedIP + "\n" +
                signedProtocol + "\n" +
                signedVersion + "\n" +
                signedResource + "\n" +
                signedSnapshotTime + "\n" +
                signedEncryptionScope + "\n" +
                rscc + "\n" +
                rscd + "\n" +
                rsce + "\n" +
                rscl + "\n" +
                rsct

버전 2020-02-10

권한 부여 버전 2020-02-10에 대한 문자열-서명 형식은 다음과 같습니다.

StringToSign =  signedPermissions + "\n" +
                signedStart + "\n" +
                signedExpiry + "\n" +
                canonicalizedResource + "\n" +
                signedKeyObjectId + "\n" +
                signedKeyTenantId + "\n" +
                signedKeyStart + "\n" +
                signedKeyExpiry  + "\n" +
                signedKeyService + "\n" +
                signedKeyVersion + "\n" +
                signedAuthorizedUserObjectId + "\n" +
                signedUnauthorizedUserObjectId + "\n" +
                signedCorrelationId + "\n" +
                signedIP + "\n" +
                signedProtocol + "\n" +
                signedVersion + "\n" +
                signedResource + "\n" +
                signedSnapshotTime + "\n" +
                rscc + "\n" +
                rscd + "\n" +
                rsce + "\n" +
                rscl + "\n" +
                rsct

2020-02-10 이전 버전

2020-02-10 이전의 권한 부여 버전에 대한 문자열-서명 형식은 다음과 같습니다.

StringToSign =  signedPermissions + "\n" +  
                signedStart + "\n" +  
                signedExpiry + "\n" +  
                canonicalizedResource + "\n" +  
                signedKeyObjectId + "\n" +
                signedKeyTenantId + "\n" +
                signedKeyStart + "\n" +
                signedKeyExpiry  + "\n" +
                signedKeyService + "\n" +
                signedKeyVersion + "\n" +
                signedAuthorizedUserObjectId + "\n" +
                signedUnauthorizedUserObjectId + "\n" +
                signedCorrelationId + "\n" +
                signedIP + "\n" +  
                signedProtocol + "\n" +  
                signedVersion + "\n" +  
                signedResource + "\n" +
                rscc + "\n" +
                rscd + "\n" +  
                rsce + "\n" +  
                rscl + "\n" +  
                rsct

정식화 리소스

문자열의 canonicalizedResource 부분은 서명된 리소스에 대한 정식 경로이며, Blob Storage 엔드포인트와 리소스 이름을 포함해야 하며 URL 디코딩되어야 합니다. Blob 경로에는 해당 컨테이너가 포함되어야 합니다. 디렉터리 경로에는 매개 변수에 해당하는 sdd 하위 디렉터리 수가 포함되어야 합니다.

컨테이너에 대한 정식화된 리소스 문자열은 해당 컨테이너에 대한 액세스를 제공하는 SAS의 후행 슬래시(/)를 생략해야 합니다.

다음 예제에서는 리소스 유형에 canonicalizedResource 따라 문자열의 일부를 생성하는 방법을 보여 줍니다.

컨테이너 예제(Azure Blob Storage)
URL = https://myaccount.blob.core.windows.net/music  
canonicalizedResource = "/blob/myaccount/music"  
Blob 예제(Azure Blob Storage)
URL = https://myaccount.blob.core.windows.net/music/intro.mp3  
canonicalizedResource = "/blob/myaccount/music/intro.mp3"  
컨테이너 예제(Azure Data Lake Storage Gen2)
URL = https://myaccount.dfs.core.windows.net/music  
canonicalizedResource = "/blob/myaccount/music"  
디렉터리 예제(Azure Data Lake Storage Gen2)
URL = https://myaccount.dfs.core.windows.net/music/instruments/guitar/  
canonicalizedResource = "/blob/myaccount/music/instruments/guitar/"  
Blob 예제(Azure Data Lake Storage Gen2)
URL = https://myaccount.dfs.core.windows.net/music/intro.mp3  
canonicalizedResource = "/blob/myaccount/music/intro.mp3"  

선택적 필드

필드가 선택 사항이며 SAS 토큰의 일부로 제공되지 않는 경우 필드에 빈 문자열을 지정합니다. 빈 문자열 뒤에 줄 바꿈 문자(\n)를 포함해야 합니다.

사용자 위임 SAS 예제

다음 예제에서는 사용자 위임 SAS 토큰이 추가된 Blob URI를 보여 줍니다. 사용자 위임 SAS 토큰은 Blob에 대한 읽기 및 쓰기 권한을 제공합니다.

https://myaccount.blob.core.windows.net/sascontainer/blob1.txt?sp=rw&st=2023-05-24T01:13:55Z&se=2023-05-24T09:13:55Z&skoid=<object-id>&sktid=<tenant-id>&skt=2023-05-24T01:13:55Z&ske=2023-05-24T09:13:55Z&sks=b&skv=2022-11-02&sip=168.1.5.60-168.1.5.70&spr=https&sv=2022-11-02&sr=b&sig=<signature>

URI의 각 부분은 다음 표에 설명되어 있습니다.

Name SAS 부분 Description
리소스 URI https://myaccount.blob.core.windows.net/sascontainer/blob1.txt Blob의 주소입니다. HTTPS를 사용하는 것이 좋습니다.
구분 기호 ? 쿼리 문자열 앞에 오는 구분 기호입니다. 구분 기호는 SAS 토큰의 일부가 아닙니다.
사용 권한 sp=rw SAS에서 부여하는 권한에는 읽기 및 쓰기가 포함됩니다.
시작 시간 st=2023-05-24T01:13:55Z UTC 시간으로 지정됩니다. SAS를 즉시 유효화하려면 시작 시간을 생략하십시오.
만료 시간 se=2023-05-24T09:13:55Z UTC 시간으로 지정됩니다.
개체 ID skoid=<object-id> Microsoft Entra 보안 주체입니다.
테넌트 ID sktid=<tenant-id> 보안 주체가 등록된 Microsoft Entra 테넌트입니다.
키 시작 시간 skt=2023-05-24T01:13:55Z 사용자 위임 키의 수명 시작입니다.
키 만료 시간 ske=2023-05-24T09:13:55Z 사용자 위임 키의 수명 종료입니다.
키 서비스 sks=b Blob 서비스만 서비스 값에 대해 지원됩니다.
키 버전 skv=2022-11-02 사용자 위임 키를 가져오는 데 사용된 스토리지 서비스 버전입니다.
IP 범위 sip=168.1.5.60-168.1.5.70 요청을 수락할 IP 주소 범위입니다.
프로토콜 spr=https HTTPS를 사용하는 요청만 허용됩니다.
Blob 서비스 버전 sv=2022-11-02 2012-02-12 이후의 Azure Storage 버전의 경우 이 매개 변수는 사용할 버전을 나타냅니다.
리소스 sr=b Blob의 리소스입니다.
서명 sig=<signature> Blob에 대한 액세스 권한을 부여하는 데 사용합니다. 서명은 SHA256 알고리즘을 사용하여 문자열 간 및 키를 통해 계산된 다음 Base64 인코딩을 사용하여 인코딩되는 HMAC입니다.

사용자 위임 SAS 철회

SAS가 손상되었다고 생각되면 해지해야 합니다. 사용자 위임 키를 해지하거나 SAS를 만드는 데 사용되는 보안 주체에 대한 RBAC 역할 할당을 변경하거나 제거하여 사용자 위임 SAS를 취소할 수 있습니다.

중요

사용자 위임 키와 RBAC 역할 할당은 모두 Azure Storage에서 캐시되므로 해지 프로세스를 시작할 때와 기존 사용자 위임 SAS가 유효하지 않은 경우 사이에 지연이 있을 수 있습니다.

사용자 위임 키 해지

사용자 위임 키 취소 작업을 호출하여 사용자 위임 키를 해지 할 수 있습니다. 사용자 위임 키를 해지하면 해당 키를 사용하는 공유 액세스 서명이 무효화됩니다. 그런 다음 사용자 위임 키 가져오기 작업을 다시 호출하고 키를 사용하여 새 공유 액세스 서명을 만들 수 있습니다. 이는 사용자 위임 SAS를 취소하는 가장 빠른 방법입니다.

역할 할당 변경 또는 제거

SAS를 만드는 데 사용되는 보안 주체에 대한 RBAC 역할 할당을 변경하거나 제거할 수 있습니다. 클라이언트가 SAS를 사용하여 리소스에 액세스하는 경우 Azure Storage는 SAS를 보호하는 데 자격 증명이 사용된 보안 주체에 리소스에 필요한 권한이 있음을 확인합니다.

추가 정보