Classic/VPC 환경에서 이용 가능합니다.
Ncloud Storage 버킷에 버킷 정책(Bucket Policy)을 등록하거나 기존 정책을 덮어씁니다. 버킷 정책은 버킷과 버킷 내 객체에 대해 누가 어떤 작업을 할 수 있는지 정의하는 JSON 문서입니다.
버킷 정책에 대해 다음 내용을 참고해 주십시오.
- 버킷 정책은 버킷을 생성한 계정만 등록·조회·삭제할 수 있습니다. 다른 계정에는 위임할 수 없으며, Sub Account 사용자는 해당 액션의 IAM 권한이 있으면 등록·조회·삭제할 수 있습니다.
- 공개 정책은
BlockPublicPolicy가 켜져 있으면 저장되지 않고,RestrictPublicBuckets가 켜져 있으면 저장되어도 익명 요청과 다른 계정의 요청에 적용되지 않습니다. 버킷을 공개하려면PutPublicAccessBlock으로 두 항목을 모두 해제해 주십시오. - 모든 요청에 대해 거부(
Deny)는 허용(Allow)보다 우선합니다. - 자기 계정의 요청을 차단하는 정책을 등록한 경우에도 버킷을 생성한 계정의 메인 계정은 정책을 등록할 수 있습니다. Sub Account 사용자는 차단 정책의 적용을 받습니다.
요청
요청 형식을 설명합니다. 요청 형식은 다음과 같습니다.
| 메서드 | URI |
|---|---|
| PUT | - |
요청 헤더
요청 헤더에 대한 설명은 다음과 같습니다.
Ncloud Storage API에서 공통으로 사용하는 헤더에 대한 정보는 Ncloud Storage 요청 헤더를 참조해 주십시오.
| 필드 | 필수 여부 | 설명 |
|---|---|---|
Content-MD5 |
Optional | 요청 바디의 Base64 인코딩된 128비트 MD5 해시값
|
x-amz-checksum-* |
Optional | 체크섬 해시값
|
요청 쿼리 파라미터
요청 쿼리 파라미터에 대한 설명은 다음과 같습니다.
| 필드 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
policy |
String | Required | 버킷 정책 변경 요청
|
요청 바디
요청 바디는 JSON 형식의 정책 문서입니다. 문서 구조는 Amazon S3 버킷 정책과 같지만 주체·작업·대상은 Ncloud Storage 표기를 사용하므로, Amazon S3 정책 문서를 그대로 사용할 수 없습니다. 요청 바디에 대한 설명은 다음과 같습니다.
| 필드 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
Version |
String | Optional | 정책 문법 버전
|
Id |
String | Optional | 정책 문서 식별자 |
Statement |
List | Required | 정책 구문 목록
|
Statement.Sid |
String | Optional | 구문 식별자
|
Statement.Effect |
String | Required | 구문 적용 방식
|
Statement.Principal |
String | Object | Conditional | 구문을 적용할 주체
|
Statement.NotPrincipal |
Object | Conditional | 구문 적용에서 제외할 주체
|
Statement.Action |
String | List | Conditional | 구문을 적용할 작업
|
Statement.NotAction |
String | List | Conditional | 구문 적용에서 제외할 작업
|
Statement.Resource |
String | List | Conditional | 구문을 적용할 대상
|
Statement.NotResource |
String | List | Conditional | 구문 적용에서 제외할 대상
|
Statement.Condition |
Object | Optional | 구문을 적용할 조건
|
요청 바디 관련하여 다음 내용을 참고해 주십시오.
- 정책 문서는 최대 20KB입니다.
- 정책 문서는 정규화하여 저장하므로,
GetBucketPolicy로 조회한 문서는 입력한 문서와 표기가 다를 수 있습니다.
Principal 유효값
Principal과 NotPrincipal에는 모든 주체를 뜻하는 "*" 또는 주체의 NRN(Ncloud Resource Name)을 입력합니다. NRN은 직접 조합하지 않고 콘솔에서 확인하여 복사해 주십시오.
| 주체 | 입력 값 | NRN 확인 위치 |
|---|---|---|
| 모든 주체(익명 포함) | "*" 또는 {"NCP": "*"} |
- |
| 메인 계정 | {"NCP": "메인 계정의 NRN"} |
콘솔 > My Account > 계정 및 보안 관리 > 계정 관리 > 계정 정보 > NRN |
| Sub Account | {"NCP": "Sub Account의 NRN"} |
콘솔 > Sub Account > Sub Accounts > 해당 서브 계정 |
| Role | {"NCP": "Role의 NRN"} |
콘솔 > Sub Account > Roles > 해당 역할
|
Principal 관련하여 다음 내용을 참고해 주십시오.
- 여러 주체를 입력하는 경우
NCP값을 배열로 입력하며, 하나라도 일치하면 구문이 적용됩니다. - 메인 계정의 NRN을
Principal에 입력하면 그 계정의 Sub Account와 Role까지 적용됩니다. 단,NotPrincipal에 입력한 경우에는 메인 계정만 제외 대상이 됩니다. - 모든 주체를 뜻하는
"*"를 제외하고, NRN 값 안에는 와일드카드(*,?)를 사용할 수 없습니다. <예시>nrn:PUB:IAM::12345678:SubAccount/*는 오류를 반환합니다.
Action 유효값
Action과 NotAction에 입력할 수 있는 액션은 Ncloud Storage 권한 관리를 참조해 주십시오. 대소문자를 구분하지 않으며, 와일드카드(*, ?)를 사용할 수 있습니다.
Action 관련하여 다음 내용을 참고해 주십시오.
- 액션의 대상 수준과
Resource의 대상 수준이 일치해야 합니다. 객체 대상 액션에는 객체 NRN(버킷 NRN 뒤에 객체 키를 붙인 값)을, 버킷 대상 액션에는 버킷 NRN을 입력해 주십시오. NotAction은 액션 이름을 검사하지 않습니다. 존재하지 않는 이름을 입력하면 제외 대상이 없는 것으로 처리되어 구문이 모든 액션에 적용됩니다.
Resource 유효값
Resource와 NotResource에는 요청을 보낸 버킷의 NRN(Ncloud Resource Name)을 입력합니다. NRN은 직접 조합하지 않고 콘솔에서 확인하여 복사해 주십시오.
| 대상 | 입력 값 | NRN 확인 위치 |
|---|---|---|
| 버킷 | 버킷의 NRN | 콘솔 > Management & Governance > Resource Manager > Resource > 해당 버킷 > 상세 정보 > NRN |
| 버킷 내 객체 | 버킷의 NRN 뒤에 /와 객체 키를 덧붙인 값
|
위와 같음 |
Resource 관련하여 다음 내용을 참고해 주십시오.
- 요청을 보낸 버킷이 아닌 다른 버킷의 NRN이나
"*"를 입력하면 오류를 반환합니다.
Condition 유효값
Condition에 입력할 수 있는 조건 연산자는 다음과 같습니다. 연산자 이름은 대소문자를 구분합니다.
| 조건 연산자 | 설명 |
|---|---|
IpAddress |
접속 IP 주소가 지정한 대역에 포함되면 충족 |
NotIpAddress |
접속 IP 주소가 지정한 대역에 포함되지 않으면 충족 |
StringEquals |
문자열이 일치하면 충족 |
StringLike |
와일드카드(*, ?)를 포함한 문자열 패턴이 일치하면 충족 |
Bool |
불리언 값이 일치하면 충족 |
Condition에 입력할 수 있는 조건 키는 다음과 같습니다.
| 조건 키 | 타입 | 설명 |
|---|---|---|
aws:SourceIp |
IP | 요청을 보낸 IP 주소
|
aws:SecureTransport |
Boolean | HTTPS 요청 여부 |
aws:Referer |
String | 요청 헤더의 Referer 값 |
s3:prefix |
String | 목록 조회 요청의 prefix 값
|
s3:delimiter |
String | 목록 조회 요청의 delimiter 값
|
ncp:principalType |
String | 요청을 보낸 주체의 유형
|
ncp:principalAccount |
String | 요청을 보낸 주체가 속한 계정의 계정 번호 |
Condition 관련하여 다음 내용을 참고해 주십시오.
- 조건 연산자 뒤에
IfExists를 붙이면(<예시>StringEqualsIfExists) 요청에 해당 조건 키가 없을 때 조건을 충족한 것으로 처리합니다.Bool연산자에도 사용할 수 있습니다. - 위 표에 없는 조건 연산자와 조건 키는 사용할 수 없습니다.
- 주체를 지정하는 조건은
ncp:이름만 사용할 수 있습니다.aws:PrincipalArn,aws:userid등aws:형식의 주체 조건 키는 사용할 수 없습니다.
요청 예시
요청 예시는 다음과 같습니다.
조건 없이 허용하는 경우
인증 정보 없이 버킷 내 모든 객체를 읽을 수 있도록 허용하는 요청 예시는 다음과 같습니다.
PUT /?policy HTTP/1.1
Host: bucket.kr.ncloudstorage.com
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicRead",
"Effect": "Allow",
"Principal": "*",
"Action": "View/GetObject",
"Resource": "nrn:PUB:NcloudStorage:KR:12345678:Bucket/2e2b461e-303f-4928-9e81-302d1aea9629/*"
}
]
}
조건을 지정하는 경우
특정 Sub Account와 Role에 대해 지정한 IP 대역에서만 객체 조회를 허용하는 요청 예시는 다음과 같습니다.
PUT /?policy HTTP/1.1
Host: bucket.kr.ncloudstorage.com
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowFromOfficeOnly",
"Effect": "Allow",
"Principal": {
"NCP": [
"nrn:PUB:IAM::12345678:SubAccount/8f14e45f-ceea-467a-9cbd-3a1b0f5c9e21",
"nrn:PUB:IAM::12345678:Role/1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed"
]
},
"Action": [
"View/GetObject",
"View/ListBucket"
],
"Resource": [
"nrn:PUB:NcloudStorage:KR:12345678:Bucket/2e2b461e-303f-4928-9e81-302d1aea9629",
"nrn:PUB:NcloudStorage:KR:12345678:Bucket/2e2b461e-303f-4928-9e81-302d1aea9629/*"
],
"Condition": {
"IpAddress": {
"aws:SourceIp": ["10.0.0.0/24", "192.168.0.1"]
}
}
}
]
}
응답
응답 형식을 설명합니다.
응답 헤더
응답 헤더에 대한 설명은 다음과 같습니다.
Ncloud Storage API에서 공통으로 사용하는 헤더에 대한 정보는 Ncloud Storage 응답 헤더를 참조해 주십시오.
응답 상태 코드
응답 상태 코드에 대한 설명은 다음과 같습니다.
Ncloud Storage API에서 공통으로 사용하는 응답 상태 코드에 대한 정보는 Ncloud Storage 응답 상태 코드를 참조해 주십시오.
| 오류 코드 | HTTP 상태 코드 | 설명 |
|---|---|---|
MalformedPolicy |
400 | 정책 문서가 유효하지 않음
|
NotImplemented |
400 | 지원하지 않는 조건 연산자 또는 액션을 입력함
|
AccessDenied |
403 | 정책을 등록할 수 없음
|
MethodNotAllowed |
405 | 버킷을 생성한 계정이 아닌 계정의 요청이며, 버킷 정책이 그 계정에 Change/PutBucketPolicy를 허용함 |
응답 예시
응답 예시는 다음과 같습니다.
HTTP/1.1 204 No Content