서비스 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 리소스에 대해 인증을 참조하세요.
SAS(공유 액세스 서명)를 사용하는 시나리오의 경우 사용자 위임 SAS를 사용하는 것이 좋습니다. 사용자 위임 SAS는 계정 키 대신 Microsoft Entra 자격 증명으로 보호됩니다. 공유 액세스 서명에 대한 자세한 내용은 사용자 위임 SAS Create 참조하세요.
SAS(서비스 공유 액세스 서명)는 스토리지 서비스 중 하나인 Azure Blob Storage, Azure Queue Storage, Azure Table Storage 또는 Azure Files 리소스에 대한 액세스를 위임합니다. 서비스 수준 SAS의 URI는 SAS가 액세스를 위임할 리소스에 대한 URI와 SAS 토큰으로 구성됩니다.
SAS 토큰은 요청에 권한을 부여하는 데 필요한 모든 정보를 포함하는 쿼리 문자열입니다. 토큰은 클라이언트가 액세스할 수 있는 리소스, 부여된 권한 및 서명이 유효한 기간을 지정합니다.
SAS는 요청이 시작될 수 있는 지원되는 IP 주소 또는 주소 범위, 요청을 수행할 수 있는 지원되는 프로토콜 또는 요청과 연결된 선택적 액세스 정책 식별자를 지정할 수도 있습니다.
마지막으로 모든 SAS 토큰에는 서명이 포함됩니다.
주의
공유 액세스 서명은 스토리지 리소스에 권한을 부여하는 키이며 계정 키를 보호하는 것처럼 보호해야 합니다. 악의적이거나 의도하지 않은 사용으로부터 SAS를 보호하는 것이 중요합니다. SAS 배포는 신중해야 하고, 손상된 SAS를 철회하는 계획을 세워야 합니다. 공유 액세스 서명을 사용하는 작업은 HTTPS 연결을 통해서만 수행되어야 하며 SAS URI는 HTTPS와 같은 보안 연결에서만 배포되어야 합니다.
서비스 SAS 권한 부여
스토리지 계정 키를 사용하여 계정 SAS를 보호합니다. 계정 SAS를 만들 때 클라이언트 애플리케이션에 계정 키가 있어야 합니다.
Microsoft Entra 자격 증명을 사용하여 컨테이너 또는 Blob에 대한 SAS를 보호하려면 사용자 위임 SAS를 만듭니다.
디렉터리 범위 액세스에 대한 서비스 SAS 지원
서비스 SAS는 권한 부여 버전()이 2020-02-10 이상이고 계층 구조 네임스페이스를 사용하는 경우 디렉터리 scope(sr=d
sv
)를 지원합니다. 디렉터리 scope(sr=d
)에 대한 의미 체계는 컨테이너 scope(sr=c
)의 의미 체계와 유사합니다. 단, 액세스는 디렉터리 및 디렉터리 내의 모든 파일 및 하위 디렉터리로 제한됩니다.
sr=d
가 지정되면 sdd
쿼리 매개 변수도 필요합니다.
권한 부여 버전 2020-02-10에 대한 문자열 간 형식은 변경되지 않습니다.
서비스 SAS 생성
다음 이미지는 공유 액세스 서명 URI의 일부를 나타냅니다. 필요한 부분은 주황색으로 표시됩니다. SAS 토큰을 구성하는 필드는 후속 섹션에서 설명합니다.
다음 섹션에서는 서비스 SAS 토큰을 구성하는 매개 변수를 지정하는 방법을 설명합니다.
signedVersion
필드 지정
(sv
) 필드에는 signedVersion
공유 액세스 서명의 서비스 버전이 포함됩니다. 이 값은 이 공유 액세스 서명(필드)에서 signature
사용하는 공유 키 권한 부여 버전을 지정합니다. 이 값은 또한 이 공유 액세스 서명을 사용하여 수행되는 요청에 대한 서비스 버전을 지정합니다.
공유 액세스 서명을 통해 요청을 실행할 때 사용되는 버전에 대한 자세한 내용은 Azure Storage 서비스 버전 관리를 참조하세요.
이 매개 변수가 공유 액세스 서명을 사용하여 수행된 요청의 권한 부여에 미치는 영향에 대한 자세한 내용은 공유 액세스 서명을 사용하여 액세스 위임을 참조하세요.
필드 이름 | 쿼리 매개 변수 | Description |
---|---|---|
signedVersion |
sv |
필수 사항입니다. 버전 2012-02-12 이상에서 지원됩니다. 이 공유 액세스 서명으로 만드는 요청을 승인하고 처리하는 데 사용할 스토리지 서비스 버전입니다. 자세한 내용은 Azure Storage 서비스 버전 관리를 참조하세요. |
레거시 SAS 요청의 버전 확인
사용되지 않는 레거시 시나리오 signedVersion
에서 Blob Storage는 규칙을 적용하여 버전을 결정합니다. 이러한 규칙에 대한 자세한 내용은 Azure Storage 서비스 버전 관리를 참조하세요.
중요
클라이언트 소프트웨어는 클라이언트 소프트웨어보다 최신 스토리지 서비스 버전을 사용하는 공유 액세스 서명 URI를 사용할 때 예기치 않은 프로토콜 동작이 발생할 수 있습니다. 공유 액세스 서명 URI를 생성하는 코드는 스토리지 서비스 요청을 만드는 클라이언트 소프트웨어에서 이해하는 버전을 사용해야 합니다.
서명된 리소스 지정(Blob Storage만 해당)
필수 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 목록에 대한 콘텐츠 및 메타데이터에 대한 액세스 권한을 부여합니다. 필드에 signedDirectoryDepth 디렉터리를 지정 signedResource 하는 경우 (sdd ) 매개 변수도 필요합니다. 디렉터리가 항상 컨테이너 내에 중첩됩니다. |
서명된 리소스 지정(Azure Files)
SAS는 Azure Files 버전 2015-02-21 이상에서 지원됩니다.
signedResource
필드는 공유 액세스 서명을 통해 액세스할 수 있는 리소스를 지정합니다. 다음 표에서는 URI에서 파일을 참조하거나 리소스를 공유하는 방법을 설명합니다.
필드 이름 | 쿼리 매개 변수 | Description |
---|---|---|
signedResource |
sr |
필수 사항입니다. 공유 리소스가 파일인지 지정 f 합니다. 이렇게 하면 파일의 콘텐츠 및 메타데이터에 대한 액세스 권한이 부여됩니다.공유 리소스가 공유인지 지정 s 합니다. 이렇게 하면 공유에 있는 모든 파일의 콘텐츠 및 메타데이터와 공유에 있는 디렉터리 및 파일 목록에 대한 액세스 권한이 부여됩니다. |
응답 헤더를 재정의하는 쿼리 매개 변수 지정(Blob Storage 및 Azure Files만 해당)
공유 액세스 서명이 요청에서 사용될 때 반환될 특정 응답 헤더의 값을 정의하려면 쿼리 매개 변수에서 응답 헤더를 지정할 수 있습니다. 이 기능은 Blob Storage용 버전 2013-08-15 및 Azure Files 2015-02-21 버전을 기준으로 지원됩니다. 이 기능을 사용하는 공유 액세스 서명에는 Blob Storage의 경우 이상 또는 2015-02-21
Azure Files 위해 이상으로 설정된 2013-08-15
매개 변수가 포함되어 sv
야 합니다.
응답 헤더 및 해당 쿼리 매개 변수는 다음 표에 나와 있습니다.
응답 헤더 이름 | 해당하는 SAS 쿼리 매개 변수 |
---|---|
Cache-Control |
rscc |
Content-Disposition |
rscd |
Content-Encoding |
rsce |
Content-Language |
rscl |
Content-Type |
rsct |
예를 들어 버전 2013-08-15 이상으로 Content-Type
만든 공유 액세스 서명에 쿼리 매개 변수를 지정 rsct=binary
하면 응답 헤더가 로 binary
설정됩니다. 이 값은 Content-Type
이 공유 액세스 서명만 사용하는 요청에 대해 Blob에 대해 저장된 헤더 값을 재정의합니다.
응답 헤더를 쿼리 매개 변수로 지정하는 공유 액세스 서명을 만드는 경우 서명 문자열을 생성하는 데 사용되는 문자열 간 서명에 포함해야 합니다. 자세한 내용은 이 문서의 뒷부분에 있는 "서명 문자열 생성" 섹션을 참조하세요. 추가 예제는 서비스 SAS 예제를 참조하세요.
테이블 이름 지정(Table Storage에만 해당)
tableName
필드는 공유할 테이블의 이름을 지정합니다.
필드 이름 | 쿼리 매개 변수 | Description |
---|---|---|
tableName |
tn |
필수 사항입니다. 공유할 테이블의 이름입니다. |
액세스 정책 지정
URI의 액세스 정책 부분은 공유 액세스 서명이 유효한 기간과 사용자에게 부여할 권한을 나타냅니다. 액세스 정책을 구성하는 URI 부분은 다음 표에 설명되어 있습니다.
필드 이름 | 쿼리 매개 변수 | Description |
---|---|---|
signedStart |
st |
선택 사항입니다. 허용되는 ISO 8601 UTC 형식 중 하나로 표현된 공유 액세스 서명이 유효해지는 시간입니다. 이 매개 변수를 생략하면 현재 UTC 시간이 시작 시간으로 사용됩니다. 2012-02-12 이전 버전의 경우 컨테이너 정책을 사용하지 않는 한 과 signedExpiry 사이의 signedStart 기간은 1시간을 초과할 수 없습니다. 허용되는 UTC 형식에 대한 자세한 내용은 날짜/시간 값 서식을 참조하세요. |
signedExpiry |
se |
필수 사항입니다. 공유 액세스 서명이 유효하지 않은 경우 허용되는 ISO 8601 UTC 형식 중 하나로 표현되는 시간입니다. 연결된 저장된 액세스 정책에 지정된 경우 이 필드를 생략해야 합니다. 허용되는 UTC 형식에 대한 자세한 내용은 날짜/시간 값 서식을 참조하세요. |
signedPermissions
1 |
sp |
필수 사항입니다. 공유 액세스 서명과 연결된 권한입니다. 사용자는 권한에서 허용하는 작업으로 제한됩니다. 연결된 저장된 액세스 정책에 지정된 경우 이 필드를 생략해야 합니다. |
startPk
2startRk
2 |
spk srk |
Table Storage에만 해당합니다. 선택 사항이지만, startPk 를 사용하려면 startRk 를 함께 사용해야 합니다. 이 공유 액세스 서명을 사용하여 액세스할 수 있는 최소 파티션 및 행 키입니다. 키 값은 포함됩니다. 생략하면 액세스할 수 있는 테이블 엔터티에 하한이 없습니다. |
endPk
2endRk
2 |
epk erk |
Table Storage에만 해당합니다. 선택 사항이지만, endPk 를 사용하려면 endRk 를 함께 사용해야 합니다. 이 공유 액세스 서명을 사용하여 액세스할 수 있는 최대 파티션 및 행 키입니다. 키 값은 포함됩니다. 생략하면 액세스할 수 있는 테이블 엔터티에 상한이 없습니다. |
1signedPermissions
저장된 액세스 정책의 일부로 지정되지 않는 한 URI에 필드가 필요합니다.
2startPk
, , startRk
endPk
및 endRk
필드는 Table Storage 리소스에서만 지정할 수 있습니다.
사용 권한 지정
SAS 토큰의 signedPermissions
(sp
) 필드에 대해 지정된 권한은 클라이언트가 리소스에서 수행할 수 있는 작업을 나타냅니다.
사용 권한을 결합하여 클라이언트가 동일한 SAS를 사용하여 여러 작업을 수행할 수 있도록 허용할 수 있습니다. SAS를 생성할 때 다음 순서로 권한을 포함해야 합니다.
racwdxltmeop
컨테이너에 대한 유효한 권한 설정의 예로는 , , , rl
, 및 가 있습니다rl
rw
. wl
wd
rd
잘못된 설정의 예로는 , , 및 가 있습니다wr
dw
. lr
dr
권한 지정을 두 번 이상 지정할 수 없습니다.
서비스 SAS는 특정 작업에 대한 액세스 권한을 부여할 수 없습니다.
- 컨테이너, 큐 및 테이블을 만들거나 삭제하거나 나열할 수 없습니다.
- 컨테이너 메타데이터 및 속성은 읽거나 쓸 수 없습니다.
- 큐를 지울 수 없으며 해당 메타데이터를 쓸 수 없습니다.
- 컨테이너는 임대할 수 없습니다.
이러한 작업에 대한 액세스 권한을 부여하는 SAS를 생성하려면 계정 SAS를 사용합니다. 자세한 내용은 계정 SAS 만들기를 참조하세요.
중요
공유 액세스 서명은 스토리지 리소스에 대한 권한을 부여하는 키이며 계정 키를 보호하는 것처럼 보호해야 합니다. HTTPS 연결을 통해서만 공유 액세스 서명을 사용하는 작업을 수행하고 HTTPS와 같은 보안 연결에서만 공유 액세스 서명 URI를 배포합니다.
각 리소스 종류에 대해 지원되는 권한은 다음 섹션에 설명되어 있습니다.
디렉터리, 컨테이너 또는 BLOB에 대한 권한
각 리소스 종류에 대해 지원되는 권한은 다음 표에 설명되어 있습니다.
사용 권한 | URI 기호 | 리소스 | 버전 지원 | 허용되는 작업 |
---|---|---|---|---|
읽기 | r | 컨테이너 디렉터리 Blob |
모두 | 컨테이너 또는 디렉터리에 있는 Blob의 콘텐츠, 차단 목록, 속성 및 메타데이터를 읽습니다. Blob을 복사 작업의 원본으로 사용합니다. |
추가 | a | 컨테이너 디렉터리 Blob |
모두 | 추가 Blob에 블록을 추가합니다. |
만들기 | c | 컨테이너 디렉터리 Blob |
모두 | 새 Blob을 작성하거나, Blob을 스냅샷, Blob을 새 Blob에 복사합니다. |
쓰기 | w | 컨테이너 디렉터리 Blob |
모두 | 콘텐츠, 속성, 메타데이터 또는 차단 목록을 Create 또는 작성합니다. 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에서 태그를 읽거나 씁니다. |
찾기 | f | 컨테이너 | 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에 대한 불변성 정책 또는 법적 보존을 설정하거나 삭제합니다. |
파일에 대한 권한
사용 권한 | URI 기호 | 허용되는 작업 |
---|---|---|
읽기 | r | 콘텐츠, 속성, 메타데이터를 읽습니다. 파일을 복사 작업의 원본으로 사용합니다. |
만들기 | c | 새 파일을 Create 파일을 새 파일에 복사합니다. |
쓰기 | w | 콘텐츠, 속성, 메타데이터를 Create 또는 작성합니다. 파일 크기를 조정합니다. 파일을 복사 작업의 대상으로 사용합니다. |
삭제 | 일 | 파일을 삭제합니다. |
공유에 대한 권한
사용 권한 | URI 기호 | 허용되는 작업 |
---|---|---|
읽기 | r | 공유에 있는 파일의 콘텐츠, 속성 또는 메타데이터를 읽습니다. 공유의 모든 파일을 복사 작업의 원본으로 사용합니다. |
만들기 | c | 공유에 새 파일을 Create 공유의 새 파일에 파일을 복사합니다. |
쓰기 | w | 공유의 모든 파일에 대해 콘텐츠, 속성 또는 메타데이터를 만들거나 씁니다. 파일 크기를 조정합니다. 파일을 복사 작업의 대상으로 사용합니다. 참고: 서비스 SAS를 사용하여 공유 속성 또는 메타데이터를 읽거나 쓸 수 있는 권한을 부여할 수 없습니다. 대신 계정 SAS를 사용합니다. |
삭제 | 일 | 공유의 모든 파일을 삭제합니다. 참고: 서비스 SAS를 사용하여 공유를 삭제할 수 있는 권한을 부여할 수 없습니다. 대신 계정 SAS를 사용합니다. |
목록 | l | 공유의 파일 및 디렉터리를 나열합니다. |
큐에 대한 권한
사용 권한 | URI 기호 | 허용되는 작업 |
---|---|---|
읽기 | r | 메시지 수를 포함하여 메타데이터 및 속성을 읽습니다. 메시지를 봅니다. |
추가 | a | 큐에 메시지를 추가합니다. |
업데이트 | u | 큐의 메시지를 업데이트합니다. 참고: 업데이트와 함께 프로세스 권한을 사용하여 먼저 업데이트하려는 메시지를 가져올 수 있습니다. |
프로세스 | p | 큐에서 메시지를 가져오고 삭제합니다. |
테이블에 대한 권한
사용 권한 | URI 기호 | 허용되는 작업 |
---|---|---|
쿼리 | r | 엔터티를 가져오고 엔터티를 쿼리합니다. |
추가 | a | 엔터티를 추가합니다. 참고: upsert 작업에는 추가 및 업데이트 권한이 필요합니다. |
업데이트 | u | 엔터티를 업데이트합니다. 참고: upsert 작업에는 추가 및 업데이트 권한이 필요합니다. |
삭제 | 일 | 엔터티를 삭제합니다. |
IP 주소 또는 IP 범위 지정
버전 2015-04-05부터 선택적 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 프로토콜 지정
버전 2015-04-05를 기준으로 선택적 signedProtocol
(spr
) 필드는 SAS를 사용하여 수행된 요청에 허용되는 프로토콜을 지정합니다. 가능한 값은 HTTPS와 HTTP(https,http
) 또는 HTTPS만(https
)입니다. 기본값은 https,http
입니다. HTTP만은 허용되는 값이 아닙니다.
테이블 액세스 범위 지정
startPk
, startRk
, endPk
및 endRk
필드는 공유 액세스 서명과 연결된 테이블 엔터티 범위를 정의합니다. 테이블 쿼리는 범위 내에 있는 결과만 반환하고 공유 액세스 서명을 사용하여 이 범위를 벗어나는 엔터티를 추가, 업데이트 또는 삭제하려고 하면 실패합니다.
가 이endPk
면 startPk
공유 액세스 서명은 테이블의 한 파티션에 있는 엔터티에 대한 액세스 권한을 부여합니다.
가 endPk
와 startRk
같endRk
으면 startPk
공유 액세스 서명은 하나의 파티션에 있는 하나의 엔터티에만 액세스할 수 있습니다.
이러한 필드가 테이블의 엔터티에 대한 액세스를 제한하는 방법을 이해하려면 다음 표를 참조하세요.
존재하는 필드 | 제한 범위 |
---|---|
startPk |
partitionKey >= startPk |
endPk |
partitionKey <= endPk |
startPk , startRk |
(partitionKey >startPk ) || (partitionKey == startPk && rowKey >= startRk ) |
endPk , endRk |
(partitionKey <endPk ) || (partitionKey == endPk && rowKey <= endRk ) |
디렉터리 깊이 지정
계층 구조 네임스페이스를 사용하도록 설정하고 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 이상에서 지원됩니다.
서명된 식별자 지정
URI에서 signedIdentifier
필드를 지정하면 지정된 공유 액세스 서명을 해당 저장된 액세스 정책과 연결합니다. 저장된 액세스 정책을 사용하면 하나 이상의 공유 액세스 서명을 더욱 효과적으로 제어할 수 있으며 필요한 경우 서명을 취소할 수도 있습니다. 각 컨테이너, 큐, 테이블 또는 공유에는 최대 5개의 저장된 액세스 정책이 있을 수 있습니다.
다음 표에서는 URI에서 서명된 식별자를 참조하는 방법을 설명합니다.
필드 이름 | 쿼리 매개 변수 | Description |
---|---|---|
signedIdentifier |
si |
선택 사항입니다. 컨테이너, 큐 또는 테이블에 대해 지정된 액세스 정책과 상관 관계가 있는 최대 64자의 고유 값입니다. |
저장된 액세스 정책에는 리소스 내에서 고유한 최대 64자의 값인 서명된 식별자가 포함됩니다. 공유 액세스 서명에 대한 URI의 필드에 대해 signedidentifier
이 서명된 식별자의 값을 지정할 수 있습니다. URI에 서명된 식별자를 지정하는 경우 서명을 저장된 액세스 정책과 연결합니다. REST API를 사용하여 컨테이너 수준 액세스 정책을 설정하려면 공유 액세스 서명을 사용하여 액세스 위임을 참조하세요.
암호화 scope 지정
URI의 signedEncryptionScope
필드를 사용하여 클라이언트 애플리케이션에서 사용할 수 있는 암호화 scope 지정할 수 있습니다. SAS 토큰을 사용하여 BLOB(PUT)을 업로드할 때 지정된 암호화 scope 사용하여 서버 쪽 암호화를 적용합니다. GET 및 HEAD 이전처럼 제한되고 수행되지 않습니다.
다음 표에서는 URI에서 서명된 암호화 scope 참조하는 방법을 설명합니다.
필드 이름 | 쿼리 매개 변수 | Description |
---|---|---|
signedEncryptionScope |
ses |
선택 사항입니다. 요청 내용을 암호화하는 데 사용할 암호화 scope 나타냅니다. |
이 필드는 버전 2020-12-06 이상에서 지원됩니다. 지원되는 버전 앞에 를 ses
추가하면 서비스에서 오류 응답 코드 403(사용할 수 없음)을 반환합니다.
컨테이너 또는 파일 시스템에 ses
대한 기본 암호화 scope 설정하는 경우 쿼리 매개 변수는 컨테이너 암호화 정책을 따릅니다. 쿼리 매개 변수와 x-ms-default-encryption-scope
헤더 x-ms-deny-encryption-scope-override
가 ses
일치하지 않는 경우 헤더가 로 true
설정된 경우 서비스는 오류 응답 코드 403(사용할 수 없음)을 반환합니다.
PUT 요청에서 x-ms-encryption-scope
헤더 및 쿼리 매개 변수를 ses
제공하면 서비스가 일치하지 않는 경우 오류 응답 코드 400(잘못된 요청)을 반환합니다.
서명 지정
URI의 서명 부분을 사용하여 공유 액세스 서명으로 이루어진 요청에 권한을 부여합니다. Azure Storage는 공유 키 권한 부여 체계를 사용하여 서비스 SAS에 권한을 부여합니다.
다음 표에서는 URI에 서명을 지정하는 방법을 설명합니다.
필드 이름 | 쿼리 매개 변수 | Description |
---|---|---|
signature |
sig |
문자열-서명은 필드에서 생성되고 요청에 권한을 부여하기 위해 확인해야 하는 고유한 문자열입니다. 서명은 SHA256 알고리즘을 사용하여 문자열 간 및 키를 계산한 다음 Base64 인코딩을 사용하여 인코딩하는 해시 기반 HMAC(메시지 인증 코드)입니다. |
서명 문자열 생성
공유 액세스 서명의 서명 문자열을 생성하려면 먼저 요청을 구성하는 필드에서 문자열 간 서명을 생성하고 문자열을 UTF-8로 인코딩한 다음 HMAC-SHA256 알고리즘을 사용하여 서명을 계산합니다. 문자열-서명에 포함된 필드는 URL 디코딩되어야 합니다.
버전 2020-12-06 이상
버전 2020-12-06은 서명된 암호화 scope 필드에 대한 지원을 추가합니다. Blob Storage 리소스에 대한 문자열 간 서명을 생성하려면 다음 형식을 사용합니다.
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedIP + "\n" +
signedProtocol + "\n" +
signedVersion + "\n" +
signedResource + "\n" +
signedSnapshotTime + "\n" +
signedEncryptionScope + "\n" +
rscc + "\n" +
rscd + "\n" +
rsce + "\n" +
rscl + "\n" +
버전 2018-11-09 이상
버전 2018-11-09는 서명된 리소스 및 서명된 Blob 스냅샷 시간 필드에 대한 지원을 추가합니다. 이러한 필드는 문자열-서명에 포함되어야 합니다. Blob Storage 리소스에 대한 문자열 간 서명을 생성하려면 다음 형식을 사용합니다.
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedIP + "\n" +
signedProtocol + "\n" +
signedVersion + "\n" +
signedResource + "\n"
signedSnapshotTime + "\n" +
rscc + "\n" +
rscd + "\n" +
rsce + "\n" +
rscl + "\n" +
rsct
버전 2015-04-05 이상
버전 2015-04-05는 서명된 IP 및 서명된 프로토콜 필드에 대한 지원을 추가합니다. 이러한 필드는 문자열-서명에 포함되어야 합니다. Blob Storage 또는 Azure Files 리소스에 대한 문자열 간 서명을 생성하려면 다음 형식을 사용합니다.
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedIP + "\n" +
signedProtocol + "\n" +
signedVersion + "\n" +
rscc + "\n" +
rscd + "\n" +
rsce + "\n" +
rscl + "\n" +
rsct
Table Storage 리소스에 대한 문자열 간 서명을 생성하려면 다음 형식을 사용합니다.
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedIP + "\n" +
signedProtocol + "\n" +
signedVersion + "\n" +
startingPartitionKey + "\n"
startingRowKey + "\n"
endingPartitionKey + "\n"
endingRowKey
Queue Storage 리소스에 대한 문자열 간 서명을 생성하려면 다음 형식을 사용합니다.
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedIP + "\n" +
signedProtocol + "\n" +
signedVersion
버전 2013-08-15~2015-02-21
버전 2013-08-15~2015-02-21을 사용하여 Blob Storage 또는 Azure Files 리소스에 대한 문자열 간 서명을 구성하려면 다음 형식을 사용합니다. Azure Files 경우 SAS는 버전 2015-02-21을 기준으로 지원됩니다.
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedVersion + "\n" +
rscc + "\n" +
rscd + "\n" +
rsce + "\n" +
rscl + "\n" +
rsct
테이블에 대한 서명할 문자열을 생성하려면 다음 형식을 사용합니다.
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedVersion + "\n" +
startPk + "\n" +
startRk + "\n" +
endPk + "\n" +
endRk
큐에 대한 문자열 간 서명을 생성하려면 다음 형식을 사용합니다.
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedVersion
버전 12.02.12
버전 2012-02-12에 대한 Blob Storage 리소스에 대한 문자열 간 서명을 생성하려면 다음 형식을 사용합니다.
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedVersion
2012-02-12 이전 버전
2012-02-12 이전 버전의 Blob Storage 리소스에 대한 문자열 간 서명을 생성하려면 다음 형식을 사용합니다.
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier
서명할 문자열을 생성할 때 다음 사항에 유의하세요.
필드가 선택 사항이고 요청의 일부로 제공되지 않는 경우 해당 필드에 빈 문자열을 지정합니다. 빈 문자열 뒤에 줄 바꿈 문자(\n)를 포함해야 합니다.
테이블에 대한 문자열 간 서명에는 빈 문자열인 경우에도 추가 매개 변수가 포함되어야 합니다.
문자열의 부분에는
signedpermission
각 리소스 종류와 관련된 고정된 순서로 사용 권한 지정이 포함되어야 합니다. 이러한 권한의 조합이 허용되지만 권한 문자의 순서는 다음 표의 순서와 일치해야 합니다.리소스 유형 사용 권한 순서 Blob racwd 컨테이너 racwdl 큐 raup 파일 rcwd 공유 rcwdl 테이블 raud 예를 들어 컨테이너에 대한 유효한 권한 설정의 예로는 , ,
rd
,wd
rl
,wl
및rl
가 있습니다rw
. 잘못된 설정의 예로는 , , 및 가 있습니다wr
dw
.lr
dr
권한 지정을 두 번 이상 지정하는 것은 허용되지 않습니다.요청을 저장된 액세스 정책과 연결하려는 경우 문자열 부분에 대한
signedIdentifier
값을 제공합니다.2012-02-12 이전의 스토리지 서비스 버전을 지정하는 공유 액세스 서명은 Blob 또는 컨테이너만 공유할 수 있으며, 그 전에 및 줄 바꿈 문자를 생략
signedVersion
해야 합니다.문자열의
canonicalizedResource
부분은 서명된 리소스에 대한 정식 경로이며, 버전 2015-02-21 이상에 대한 서비스 이름(Blob Storage, Table Storage, Queue Storage 또는 Azure Files)과 스토리지 계정 이름 및 리소스 이름을 포함해야 하며 URL 디코딩되어야 합니다. Blob의 이름에는 Blob의 컨테이너가 포함되어야 합니다. 테이블 이름은 소문자여야 합니다.
컨테이너, 큐, 테이블 또는 파일 공유에 대한 정식화된 리소스 문자열은 해당 개체에 대한 액세스를 제공하는 SAS에 대한 후행 슬래시(/)를 생략해야 합니다.
다음 예제에서는 리소스 유형에 따라 문자열 부분을 생성하는 canonicalizedResource
방법을 보여 줍니다.
컨테이너
버전 2015-02-21 이상:
URL = https://myaccount.blob.core.windows.net/music
canonicalizedResource = "/blob/myaccount/music"
2015-02-21 이전 버전의 경우:
URL = https://myaccount.blob.core.windows.net/music
canonicalizedResource = "/myaccount/music"
Blob
버전 2015-02-21 이상:
URL = https://myaccount.blob.core.windows.net/music/intro.mp3
canonicalizedResource = "/blob/myaccount/music/intro.mp3"
2015-02-21 이전 버전의 경우:
URL = https://myaccount.blob.core.windows.net/music/intro.mp3
canonicalizedResource = "/myaccount/music/intro.mp3"
파일 공유
URL = https://myaccount.file.core.windows.net/music
canonicalizedResource = "/file/myaccount/music"
파일
URL = https://myaccount.file.core.windows.net/music/intro.mp3
canonicalizedResource = "/file/myaccount/music/intro.mp3"
큐
버전 2015-02-21 이상:
URL = https://myaccount.queue.core.windows.net/thumbnails
canonicalizedResource = "/queue/myaccount/thumbnails"
2015-02-21 이전 버전의 경우:
URL = https://myaccount.queue.core.windows.net/thumbnails
canonicalizedResource = "/myaccount/thumbnails"
테이블
서명된 리소스가 테이블인 경우 테이블 이름이 정식화된 형식의 소문자인지 확인합니다.
버전 2015-02-21 이상:
URL = https://myaccount.table.core.windows.net/Employees(PartitionKey='Jeff',RowKey='Price')
canonicalizedResource = "/table/myaccount/employees"
2015-02-21 이전 버전의 경우:
URL = https://myaccount.table.core.windows.net/Employees(PartitionKey='Jeff',RowKey='Price')
canonicalizedResource = "/myaccount/employees"
공유 액세스 서명의 수명 및 해지
공유 액세스 서명은 사용자에게 저장소 계정 리소스에 대한 액세스 권한을 부여합니다. SAS를 사용할 계획인 경우 SAS의 수명 및 애플리케이션이 특정 상황에서 액세스 권한을 취소해야 하는지 여부를 생각해 보세요.
임시 SAS와 저장된 액세스 정책 비교
서비스 SAS는 다음 두 가지 형식 중 하나를 사용할 수 있습니다.
임시 SAS: 임시 SAS를 만들 때 SAS에 대한 시작 시간, 만료 시간 및 사용 권한은 모두 SAS URI에 지정됩니다(또는 시작 시간이 생략된 경우 암시적). 모든 유형의 SAS가 임시 SAS가 될 수 있습니다.
필드를 사용하여
signedExpiry
임시 SAS의 수명을 관리할 수 있습니다. 만료 시간 이후에도 클라이언트에 리소스에 대한 액세스 권한을 계속 부여하려면 새 서명을 발급해야 합니다. 공유 액세스 서명의 수명을 짧게 유지하는 것이 좋습니다. 버전 2012-02-12 이전에는 저장된 액세스 정책과 연결되지 않은 공유 액세스 서명에 1시간을 초과하는 활성 기간이 있을 수 없습니다.저장된 액세스 정책이 있는 SAS: 저장된 액세스 정책은 Blob 컨테이너, 테이블, 큐 또는 파일 공유일 수 있는 리소스 컨테이너에 정의됩니다. 저장된 액세스 정책을 사용하여 하나 이상의 공유 액세스 서명에 대한 제약 조건을 관리할 수 있습니다. SAS를 저장된 액세스 정책과 연결하면 SAS는 저장된 액세스 정책에 대해 정의된 제약 조건(즉, 시작 시간, 만료 시간 및 권한)을 상속합니다.
저장된 액세스 정책은 URI에서
signedIdentifier
필드로 나타냅니다. 저장된 액세스 정책을 사용하면 하나 이상의 공유 액세스 서명을 더욱 효과적으로 제어할 수 있으며 필요한 경우 서명을 취소할 수도 있습니다.
SAS 해지
SAS URI는 URL이므로 SAS를 가져오는 모든 사용자는 원래 만든 사용자에 관계없이 이 URL을 사용할 수 있습니다. SAS가 공개적으로 게시된 경우 전 세계의 모든 사용자가 SAS를 사용할 수 있습니다. SAS는 다음 네 가지 중 하나가 발생할 때까지 리소스를 소유한 모든 사람에게 리소스에 대한 액세스 권한을 부여합니다.
임시 SAS에 지정된 만료 시간에 도달합니다.
저장된 액세스 정책이 참조되고 액세스 정책이 만료 시간을 지정하는 경우 SAS에서 참조하는 저장된 액세스 정책에 지정된 만료 시간에 도달합니다.
만료 시간은 간격이 경과하거나 저장된 액세스 정책을 수정하여 과거에 만료 시간이 있기 때문에 도달할 수 있습니다. 이는 SAS를 해지하는 한 가지 방법입니다.
SAS에서 참조하는 저장된 액세스 정책이 삭제되어 SAS가 해지됩니다. Azure Storage가 공유 액세스 서명에 지정된 저장된 액세스 정책을 찾을 수 없는 경우 클라이언트는 URI로 표시된 리소스에 액세스할 수 없습니다.
삭제된 정책과 정확히 동일한 이름으로 저장된 액세스 정책을 다시 만들면 저장된 액세스 정책과 연결된 권한에 따라 모든 기존 SAS 토큰이 다시 유효합니다. SAS의 만료 시간이 지났다고 가정합니다. SAS를 해지하려는 경우 나중에 만료 시간으로 액세스 정책을 다시 만들 때 다른 이름을 사용해야 합니다.
SAS를 만드는 데 사용된 계정 키를 다시 생성한 경우. 계정 키를 다시 생성하면 해당 키를 사용하는 모든 애플리케이션 구성 요소가 다른 유효한 계정 키 또는 새로 다시 생성된 계정 키를 사용하도록 업데이트될 때까지 권한 부여에 실패합니다. 계정 키를 다시 생성하는 것은 임시 SAS를 즉시 해지하는 유일한 방법입니다.
중요
공유 액세스 서명 URI는 해당하는 경우 서명 및 연결된 저장된 액세스 정책을 만드는 데 사용되는 계정 키와 연결됩니다. 저장된 액세스 정책을 지정하지 않는 경우 공유 액세스 서명을 해지하는 방법은 계정 키를 변경하는 것뿐입니다.
서비스 SAS와 함께 저장된 액세스 정책을 사용하는 것이 좋습니다. 저장된 액세스 정책을 사용하지 않도록 선택하는 경우 임시 SAS가 유효한 기간을 짧게 유지해야 합니다. 서비스 SAS를 저장된 액세스 정책과 연결에 대한 자세한 내용은 저장된 액세스 정책 정의를 참조하세요.
서비스 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&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 시간으로 지정됩니다. |
IP 범위 | sip=168.1.5.60-168.1.5.70 |
요청을 수락할 IP 주소 범위입니다. |
프로토콜 | spr=https |
HTTPS를 사용하는 요청만 허용됩니다. |
Azure Storage 버전 | sv=2023-05-24 |
2012-02-12 이후의 Azure Storage 버전의 경우 이 매개 변수는 사용할 버전을 나타냅니다. |
리소스 | sr=b |
Blob의 리소스입니다. |
서명 | sig=<signature> |
Blob에 대한 액세스 권한을 부여하는 데 사용합니다. 서명은 SHA256 알고리즘을 사용하여 문자열 간 및 키를 통해 계산된 다음 Base64 인코딩을 사용하여 인코딩되는 HMAC입니다. |