다음을 통해 공유


사용자 위임 SAS 만들기

중요하다

최적의 보안을 위해 Microsoft는 관리 ID와 함께 Microsoft Entra ID를 사용하여 가능한 한 Blob, 큐 및 테이블 데이터에 대한 요청에 권한을 부여하는 것이 좋습니다. Microsoft Entra ID 및 관리 ID를 사용한 권한 부여는 공유 키 권한 부여를 통해 뛰어난 보안 및 사용 편의성을 제공합니다. 자세한 내용은 Microsoft Entra ID권한 부여를 참조하세요. 관리 ID에 대한 자세한 내용은 Azure 리소스관리 ID란?을 참조하세요.

온-프레미스 애플리케이션과 같이 Azure 외부에서 호스트되는 리소스의 경우 Azure Arc를 통해 관리 ID를 사용할 수 있습니다. 예를 들어 Azure Arc 지원 서버에서 실행되는 앱은 관리 ID를 사용하여 Azure 서비스에 연결할 수 있습니다. 자세한 내용은 Azure Arc 지원 서버를 사용하여 Azure 리소스에 대해 인증을 참조하세요.

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에 대해 지원됩니다. 저장된 액세스 정책은 사용자 위임 SAS에 대해 지원되지 않습니다.

주의

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

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

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

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

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

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

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

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

선택적 saoidsuoid 매개 변수에 대한 자세한 내용은 서명된 사용자 개체 ID지정을 참조하세요.

사용자 위임 SAS 권한 부여

클라이언트가 사용자 위임 SAS를 사용하여 Blob Storage 리소스에 액세스하는 경우 Azure Storage에 대한 요청은 SAS를 만드는 데 사용된 Microsoft Entra 자격 증명으로 권한이 부여됩니다. 리소스에 대한 클라이언트의 액세스는 다음 권한에 따라 결정됩니다.

  • 사용자 위임 키를 요청한 Microsoft Entra 보안 주체에게 부여된 RBAC(역할 기반 액세스 제어) 권한입니다.
  • 사용자 위임 키를 요청한 보안 주체에게 부여된 POSIX ACL(액세스 제어 목록) 권한입니다. 이 추가 검사는 RBAC 권한이 액세스 권한을 부여할 수 없는 경우에만 발생하며 스토리지 계정에서 계층 구조 네임스페이스를 사용하는 경우에만 발생합니다.
  • SAS 토큰에 명시적으로 부여된 권한입니다.

이 방법은 추가 보안 수준을 제공하며 애플리케이션 코드와 함께 계정 액세스 키를 저장할 필요가 없도록 합니다. 이러한 이유로 Microsoft Entra 자격 증명을 사용하여 SAS를 만드는 것이 보안 모범 사례입니다.

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

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

  1. RBAC 또는 POSIX ACL을 사용하여 사용자 위임 키를 요청할 보안 주체에게 원하는 권한을 부여합니다.
  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 Delegator 역할을 보안 주체에 추가로 할당할 수 있습니다. Storage Blob Delegator 역할은 보안 주체에게 사용자 위임 키를 요청할 수 있는 권한을 부여합니다.

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

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

예를 들어 sip=198.51.100.0 또는 sip=198.51.100.10-198.51.100.20.
signedProtocol spr 선택적 2015-04-05 이상 SAS를 사용하여 수행한 요청에 허용되는 프로토콜을 지정합니다. SAS 토큰으로 수행된 요청이 HTTPS를 사용하도록 요구하려면 이 필드를 포함합니다.
signedObjectId skoid 필수 2018-11-09 이상 Microsoft Entra 보안 주체의 개체 ID를 지정합니다. 이 개체 ID는 사용자 위임 키를 요청한 보안 주체에 해당합니다.

작업에 권한을 부여하기 전에 Azure Storage는 개체 ID에 대한 RBAC 권한을 확인합니다. RBAC 권한이 액세스 권한을 부여할 수 없는 경우 Azure Storage는 개체 ID에 대해 POSIX ACL 권한을 확인합니다.
signedTenantId sktid 필수 2018-11-09 이상 보안 주체가 정의된 Microsoft Entra 테넌트를 지정합니다.
signedKeyStartTime skt 필수. 2018-11-09 이상 이 값은 사용자 위임 키 가져오기 작업에서 반환됩니다. 허용되는 ISO 8601 UTC 형식 중 하나로 표현된 사용자 위임 키의 수명 시작을 나타냅니다. 허용되는 UTC 형식에 대한 자세한 내용은 Format DateTime 값참조하세요.
signedKeyExpiryTime ske 필수 2018-11-09 이상 이 값은 사용자 위임 키 가져오기 작업에서 반환됩니다. 허용되는 ISO 8601 UTC 형식 중 하나로 표현된 사용자 위임 키의 수명 종료를 나타냅니다. 허용되는 UTC 형식에 대한 자세한 내용은 Format 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를 지정합니다. 이 개체 ID는 SAS의 최종 사용자에 대한 보안 주체에 해당합니다. POSIX ACL(액세스 제어 목록)에 대한 추가 권한 검사는 수행되지 않습니다.
signedUnauthorizedObjectId suoid 선택적 2020-02-10 이상 계층 구조 네임스페이스를 사용하는 경우 Microsoft Entra 보안 주체의 개체 ID를 지정합니다. 이 개체 ID는 SAS의 최종 사용자에 대한 보안 주체에 해당합니다. Azure Storage는 작업에 권한을 부여하기 전에 개체 ID에 대해 POSIX ACL 검사를 수행합니다.
signedCorrelationId scid 선택적 2020-02-10 이상 스토리지 감사 로그를 SAS를 생성하고 배포하는 보안 주체가 사용하는 감사 로그와 상호 연결합니다.
signedDirectoryDepth sdd sr=d 때 필요 2020-02-10 이상 문자열 간 canonicalizedResource 필드에 지정된 디렉터리의 루트 폴더 내 디렉터리 수를 나타냅니다.
signedEncryptionScope ses 선택적 2020-12-06 이상 요청 콘텐츠를 암호화하는 데 사용할 암호화 범위를 나타냅니다.
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, 컨테이너 또는 디렉터리 리소스를 참조하는 방법을 설명합니다.

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

서명 유효 기간 지정

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

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

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

사용 권한 지정

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

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

racwdxltmeop

컨테이너에 대한 유효한 사용 권한 설정의 예로는 rw, rd, rl, wd, wlrl있습니다. 잘못된 설정의 예로는 wr, dr, lrdw있습니다. 사용 권한 지정을 두 번 이상 지정하는 것은 허용되지 않습니다.

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

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

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

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

허가 URI 기호 자원 버전 지원 허용되는 작업
읽다 r 컨테이너
디렉토리
Blob
모두 컨테이너 또는 디렉터리에 있는 Blob의 콘텐츠, 차단 목록, 속성 및 메타데이터를 읽습니다. Blob을 복사 작업의 원본으로 사용합니다.
더하다 a 컨테이너
디렉토리
Blob
모두 추가 Blob에 블록을 추가합니다.
창조하다 c 컨테이너
디렉토리
Blob
모두 새 Blob을 작성하거나, Blob을 스냅샷으로 만들거나, Blob을 새 Blob에 복사합니다.
쓰다 w 컨테이너
디렉토리
Blob
모두 콘텐츠, 속성, 메타데이터 또는 차단 목록을 만들거나 씁니다. Blob을 스냅샷하거나 임대합니다. Blob의 크기를 조정합니다(페이지 Blob에만 해당). Blob을 복사 작업의 대상으로 사용합니다.
삭제하다 d 컨테이너
디렉토리
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에서 태그를 읽거나 씁니다.
움직이다 m 컨테이너
디렉토리
Blob
2020-02-10 이상 Blob 또는 디렉터리 및 해당 내용을 새 위치로 이동합니다. saoid 매개 변수가 SAS 토큰에 포함되고 고정 비트가 부모 디렉터리에 설정된 경우 이 작업은 필요에 따라 자식 Blob, 디렉터리 또는 부모 디렉터리의 소유자로 제한될 수 있습니다.
수행하다 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을 설정할 수 있습니다.
불변성 정책 설정 나는 컨테이너
Blob
2020-06-12 이상 Blob에서 불변성 정책 또는 법적 보존을 설정하거나 삭제합니다.

IP 주소 또는 IP 범위 지정

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

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

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

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

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

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

HTTP 프로토콜 지정

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

메모

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

서명된 개체 ID 지정

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

서명된 테넌트 ID 지정

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

서명된 키 시작 시간 지정

필요한 signedKeyStartTime(skt) 필드는 ISO 날짜 형식의 사용자 위임 키 수명 시작을 나타냅니다. 사용자 위임 키 가져오기 작업은 응답의 일부로 이 값을 반환합니다.

서명된 키 만료 시간 지정

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

서명된 키 서비스 지정

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

서명된 키 버전 지정

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

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

선택적 signedAuthorizedObjectId(saoid) 및 signedUnauthorizedObjectId(suoid) 필드를 사용하면 Azure Data Lake Storage 워크로드용 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 검사가 성공하지 못하면 작업이 실패합니다. suoid 필드가 SAS 토큰에 포함된 경우 스토리지 계정에 대해 계층 구조 네임스페이스를 사용하도록 설정해야 합니다. 그렇지 않으면 권한 확인이 실패하고 권한 부여 오류가 발생합니다.

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

saoid 또는 suoid 필드에 개체 ID를 지정하면 다음과 같은 방법으로 디렉터리 또는 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의 소유자여야 합니다.
    • signedPermissions(sp) 필드의 값에는 Ownership(o) 권한 외에도 Permissions(p) 권한이 포함되어야 합니다.

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

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

상관 관계 ID 지정

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

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

디렉터리 깊이 지정

signedResource 필드가 디렉터리(sr=d)를 지정하는 경우 루트 디렉터리 아래의 하위 디렉터리 수를 나타내는 signedDirectoryDepth(sdd) 필드도 지정해야 합니다. 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 토큰에 rsct=binary 쿼리 매개 변수를 지정하면 Content-Type 응답 헤더가 binary설정됩니다. 이 값은 이 공유 액세스 서명만 사용하는 요청에 대해 Blob에 저장된 Content-Type 헤더 값을 재정의합니다.

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

암호화 범위 지정

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

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

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)
URL = https://myaccount.dfs.core.windows.net/music  
canonicalizedResource = "/blob/myaccount/music"  
디렉터리 예제(Azure Data Lake Storage)
URL = https://myaccount.dfs.core.windows.net/music/instruments/guitar/  
canonicalizedResource = "/blob/myaccount/music/instruments/guitar/"  
Blob 예제(Azure Data Lake Storage)
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=198.51.100.10-198.51.100.20&spr=https&sv=2022-11-02&sr=b&sig=<signature>

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

이름 SAS 부분 묘사
리소스 URI https://myaccount.blob.core.windows.net/sascontainer/blob1.txt Blob의 주소입니다. HTTPS를 사용하는 것이 좋습니다.
구분 기호 ? 쿼리 문자열 앞에 오는 구분 기호입니다. 구분 기호는 SAS 토큰의 일부가 아닙니다.
권한을 sp=rw SAS에서 부여한 권한에는 읽기(r) 및 쓰기(w)가 포함됩니다.
시작 시간 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=198.51.100.10-198.51.100.20 요청을 수락할 IP 주소의 범위입니다.
프로토콜 spr=https HTTPS를 사용하는 요청만 허용됩니다.
Blob 서비스 버전 sv=2022-11-02 Azure Storage 버전 2012-02-12 이상의 경우 이 매개 변수는 사용할 버전을 나타냅니다.
자원 sr=b 리소스가 Blob입니다.
서명 sig=<signature> Blob에 대한 액세스 권한을 부여하는 데 사용됩니다. 서명은 SHA256 알고리즘을 사용하여 문자열 간 및 키를 통해 계산된 다음 Base64 인코딩을 사용하여 인코딩되는 HMAC입니다.

사용자 위임 SAS 해지

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

중요하다

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

사용자 위임 키 해지

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

역할 할당 또는 ACL 변경 또는 제거

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

참고 항목