Skip to main content
이 제품의 최신 릴리즈를 사용할 수 있습니다.
본 한국어 번역은 사용자 편의를 위해 제공되는 기계 번역입니다. 영어 버전과 한국어 버전이 서로 어긋나는 경우에는 언제나 영어 버전이 우선합니다.

StorageGRID에서 AWS 정책을 사용하여 S3 버킷 및 오브젝트에 대한 액세스를 제어하는 방법

StorageGRID는 Amazon Web Services(AWS) 정책 언어를 사용하여 S3 테넌트가 버킷 및 해당 버킷 내의 객체에 대한 액세스를 제어할 수 있도록 합니다. StorageGRID 시스템은 S3 REST API 정책 언어의 일부를 구현합니다. S3 API에 대한 액세스 정책은 JSON 형식으로 작성됩니다.

액세스 정책 개요

StorageGRID는 세 가지 유형의 액세스 정책을 지원합니다.

  • *버킷 정책*은 GetBucketPolicy, PutBucketPolicy, DeleteBucketPolicy S3 API 작업 또는 Tenant Manager 또는 Tenant Management API를 사용하여 관리됩니다. 버킷 정책은 버킷에 연결되어 버킷 소유자 계정 또는 다른 계정의 사용자가 해당 버킷 및 버킷 내 객체에 액세스하는 것을 제어하도록 구성됩니다. 버킷 정책은 하나의 버킷과 여러 그룹에만 적용됩니다.

  • *그룹 정책*은 테넌트 관리자 또는 테넌트 관리 API를 사용하여 구성됩니다. 그룹 정책은 계정의 그룹에 연결되어 해당 그룹이 계정 소유의 특정 리소스에 액세스할 수 있도록 허용합니다. 그룹 정책은 하나의 그룹과 여러 버킷에만 적용됩니다.

  • 세션 정책: AssumeRole 요청을 생성할 때 포함됩니다. 세션 정책은 해당 세션에만 적용되며, 그룹 및 버킷 정책에서 부여된 권한 외에 사용자가 갖는 권한을 추가로 정의합니다.

참고 그룹, 버킷 및 세션 정책 간에는 우선순위 차이가 없습니다.

StorageGRID 버킷 및 그룹 정책은 Amazon에서 정의한 특정 문법을 따릅니다. 각 정책 내부에는 정책 문 배열이 있으며, 각 문에는 다음 요소가 포함됩니다.

  • Statement ID(Sid)(선택 사항)

  • 효과

  • Principal/NotPrincipal

  • 리소스/NotResource

  • Action/NotAction

  • 조건 (선택 사항)

정책 문은 다음과 같은 구조를 사용하여 권한을 지정하도록 구성됩니다. <Condition>이(가) 적용될 때 <Principal>이(가) <Resource>에서 <Action>을(를) 수행하는 것을 허용/거부하기 위해 <Effect>을(를) 부여합니다.

각 정책 요소는 특정 기능을 위해 사용됩니다.

요소 설명

Sid

Sid 요소는 선택 사항입니다. Sid는 사용자에 대한 설명 용도로만 사용됩니다. Sid는 저장되지만 StorageGRID 시스템에서 해석되지는 않습니다.

효과

Effect 요소를 사용하여 지정된 작업이 허용되는지 또는 거부되는지 여부를 설정합니다. 지원되는 Action 요소 키워드를 사용하여 버킷 또는 객체에 대해 허용(또는 거부)할 작업을 식별해야 합니다.

Principal/NotPrincipal

사용자, 그룹 및 계정이 특정 리소스에 액세스하고 특정 작업을 수행하도록 허용할 수 있습니다. 요청에 S3 서명이 포함되어 있지 않은 경우, 보안 주체로 와일드카드 문자(*)를 지정하여 익명 액세스가 허용됩니다. 기본적으로 계정 루트만 해당 계정이 소유한 리소스에 액세스할 수 있습니다.

버킷 정책에서는 Principal 요소만 지정하면 됩니다. 그룹 정책의 경우, 정책이 연결된 그룹이 암묵적인 Principal 요소가 됩니다.

리소스/NotResource

Resource 요소는 버킷과 객체를 식별합니다. Amazon 리소스 이름(ARN)을 사용하여 리소스를 식별하고 버킷 및 객체에 대한 권한을 허용하거나 거부할 수 있습니다.

Action/NotAction

권한에는 작업(Action)과 결과(Effect)라는 두 가지 구성 요소가 있습니다. 그룹이 리소스를 요청하면 해당 리소스에 대한 액세스 권한이 부여되거나 거부됩니다. 명시적으로 권한을 할당하지 않으면 액세스가 거부되지만, 명시적 거부를 사용하여 다른 정책에서 부여한 권한을 재정의할 수 있습니다.

상태

조건 요소는 선택 사항입니다. 조건을 사용하면 정책을 적용해야 하는 시기를 결정하는 표현식을 만들 수 있습니다.

Action 요소에서는 와일드카드 문자(*)를 사용하여 모든 작업 또는 작업의 하위 집합을 지정할 수 있습니다. 예를 들어, 이 Action은 s3:GetObject, s3:PutObject, s3:DeleteObject 등의 권한과 일치합니다.

s3:*Object

리소스 요소에서는 와일드카드 문자(*)와 (?)를 사용할 수 있습니다. 별표(*)는 0개 이상의 문자와 일치하고, 물음표(?)는 임의의 단일 문자와 일치합니다.

Principal 요소에서는 익명 액세스(모든 사용자에게 권한을 부여)를 설정하는 경우를 제외하고는 와일드카드 문자가 지원되지 않습니다. 예를 들어 Principal 값으로 와일드카드(*)를 설정할 수 있습니다.

"Principal":"*"
"Principal":{"AWS":"*"}

다음 예시에서는 Effect, Principal, Action 및 Resource 요소를 사용하는 정책 문을 보여줍니다. 이 예시는 "Allow"라는 Effect를 사용하여 Principal, admin 그룹 federated-group/admin 및 finance 그룹 `federated-group/finance`에 `s3:ListBucket`이라는 이름의 버킷에 대한 Action `mybucket`과 해당 버킷 내의 모든 객체에 대한 Action `s3:GetObject`을 수행할 수 있는 권한을 부여하는 전체 버킷 정책 문을 보여줍니다.

{
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::27233906934684427525:federated-group/admin",
          "arn:aws:iam::27233906934684427525:federated-group/finance"
        ]
      },
      "Action": [
        "s3:ListBucket",
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:s3:::mybucket",
        "arn:aws:s3:::mybucket/*"
      ]
    }
  ]
}

버킷 정책의 크기 제한은 20,480바이트이고, 그룹 정책의 크기 제한은 5,120바이트입니다.

정책의 일관성

기본적으로 그룹 정책에 대한 모든 업데이트는 최종 일관성을 유지합니다. 그룹 정책 일관성을 갖게 되면 정책 캐싱으로 인해 변경 사항이 적용되는 데 최대 15분이 추가로 소요될 수 있습니다. 기본적으로 버킷 정책에 대한 모든 업데이트는 강력 일관성을 유지합니다.

필요에 따라 버킷 정책 업데이트에 대한 일관성 보장을 변경할 수 있습니다. 예를 들어, 사이트 장애 발생 시에도 버킷 정책 변경 사항을 적용할 수 있도록 설정할 수 있습니다.

이 경우 Consistency-Control 헤더를 PutBucketPolicy 요청에 설정하거나 PUT 버킷 일관성 요청을 사용할 수 있습니다. 버킷 정책이 일관성을 확보하면 정책 캐싱으로 인해 변경 사항이 적용되는 데 최대 8초가 추가로 소요될 수 있습니다.

참고 일시적인 상황을 해결하기 위해 일관성 값을 다른 값으로 설정한 경우, 작업이 완료되면 버킷 수준 설정을 원래 값으로 되돌려야 합니다. 그렇지 않으면 향후 모든 버킷 요청에 수정된 설정이 적용됩니다.

세션 정책이란 무엇인가요?

세션 정책은 사용자가 그룹을 수임할 때와 같이 특정 세션 동안 사용할 수 있는 권한을 일시적으로 제한하는 액세스 정책입니다. 세션 정책은 권한의 하위 집합만 허용할 수 있으며, 추가 권한을 부여할 수는 없습니다. 그룹 자체는 더 광범위한 권한을 가질 수 있습니다.

${post_edited_translations.segment}

정책 설명에서 ARN은 Principal 요소와 Resource 요소에 사용됩니다.

  • ${post_edited_translations.segment}

    arn:aws:s3:::bucket-name
    arn:aws:s3:::bucket-name/object_key
  • 다음 구문을 사용하여 ID 리소스 ARN(사용자 및 그룹)을 지정합니다.

    arn:aws:iam::account_id:root
    arn:aws:iam::account_id:user/user_name
    arn:aws:iam::account_id:group/group_name
    arn:aws:iam::account_id:federated-user/user_name
    arn:aws:iam::account_id:federated-group/group_name

기타 고려 사항:

  • ${post_edited_translations.segment}

  • 객체 키에 지정할 수 있는 국제 문자는 JSON UTF-8 또는 JSON \u 이스케이프 시퀀스를 사용하여 인코딩해야 합니다. 퍼센트 인코딩은 지원되지 않습니다.

    PutBucketPolicy 작업에 대한 HTTP 요청 본문은 charset=UTF-8로 인코딩되어야 합니다.

정책에 리소스 지정

정책 문에서 Resource 요소를 사용하여 권한이 허용되거나 거부될 버킷 또는 객체를 지정할 수 있습니다.

  • 각 정책 설명에는 리소스 요소가 필요합니다. 정책에서 리소스는 요소 `Resource`로 표시되며, 제외의 경우 `NotResource`로 표시됩니다.

  • S3 리소스 ARN을 사용하여 리소스를 지정합니다. 예를 들면 다음과 같습니다.

    "Resource": "arn:aws:s3:::mybucket/*"
  • 객체 키 내부에 정책 변수를 사용할 수도 있습니다. 예를 들면 다음과 같습니다.

    "Resource": "arn:aws:s3:::mybucket/home/${aws:username}/*"
  • 리소스 값은 그룹 정책을 생성할 때 아직 존재하지 않는 버킷을 지정할 수 있습니다.

정책에서 보안 주체 지정

Principal 요소를 사용하여 정책 문에 따라 리소스에 대한 액세스가 허용/거부된 사용자, 그룹 또는 테넌트 계정을 식별합니다.

  • 버킷 정책의 각 정책 설명에는 Principal 요소가 포함되어야 합니다. 그룹 정책의 정책 설명은 그룹 자체가 Principal로 간주되므로 Principal 요소가 필요하지 않습니다.

  • 정책에서 주체는 "Principal" 요소로 표시되며, 제외의 경우에는 "NotPrincipal"로 표시됩니다.

  • 계정 기반 ID는 ID 또는 ARN을 사용하여 지정해야 합니다.

    "Principal": { "AWS": "account_id"}
    "Principal": { "AWS": "identity_arn" }
  • 이 예제에서는 테넌트 계정 루트와 해당 계정에 속한 모든 사용자를 포함하는 테넌트 계정 ID 27233906934684427525를 사용합니다.

     "Principal": { "AWS": "27233906934684427525" }
  • 계정 루트만 지정할 수도 있습니다.

    "Principal": { "AWS": "arn:aws:iam::27233906934684427525:root" }
  • 특정 연합 사용자("Alex")를 지정할 수 있습니다.

    "Principal": { "AWS": "arn:aws:iam::27233906934684427525:federated-user/Alex" }
  • 특정 페더레이션 그룹("Managers")을 지정할 수 있습니다.

    "Principal": { "AWS": "arn:aws:iam::27233906934684427525:federated-group/Managers"  }
  • 익명 주체를 지정할 수 있습니다.

    "Principal": "*"
  • 혼동을 피하려면 사용자 이름 대신 사용자 UUID를 사용할 수 있습니다.

    arn:aws:iam::27233906934684427525:user-uuid/de305d54-75b4-431b-adb2-eb6b9e546013

    예를 들어, 알렉스가 조직을 떠나고 해당 사용자 이름 Alex`이 삭제되었다고 가정해 보겠습니다. 새로운 알렉스가 조직에 합류하여 동일한 `Alex 사용자 이름을 할당받으면, 새 사용자는 의도치 않게 원래 사용자에게 부여된 권한을 상속받을 수 있습니다.

  • 주요 값은 버킷 정책을 생성할 때 아직 존재하지 않는 그룹/사용자 이름을 지정할 수 있습니다.

정책에서 권한 지정

정책에서 Action 요소는 리소스에 대한 권한을 허용/거부하는 데 사용됩니다. 정책에서 지정할 수 있는 권한 집합은 "Action" 요소 또는 제외를 나타내는 "NotAction" 요소로 표시됩니다. 이러한 각 요소는 특정 S3 REST API 작업에 매핑됩니다.

해당 표에는 버킷에 적용되는 권한과 객체에 적용되는 권한이 나열되어 있습니다.

참고 Amazon S3는 이제 PutBucketReplication 및 DeleteBucketReplication 작업 모두에 s3:PutReplicationConfiguration 권한을 사용합니다. StorageGRID는 각 작업에 대해 별도의 권한을 사용하며, 이는 원래 Amazon S3 사양과 일치합니다.
참고 삭제는 put 작업을 사용하여 기존 값을 덮어쓸 때 수행됩니다.

버킷에 적용되는 권한

권한 S3 REST API 작업 StorageGRID에 대한 사용자 지정

s3:CreateBucket

CreateBucket

예.

참고: 그룹 정책에서만 사용합니다.

s3:DeleteBucket

DeleteBucket

s3:DeleteBucketMetadataNotification

DELETE Bucket 메타데이터 알림 구성

s3:DeleteBucketPolicy

DeleteBucketPolicy

s3:DeleteReplicationConfiguration

DeleteBucketReplication

예, PUT 및 DELETE에 대한 별도의 권한

s3:GetBucketAcl

GetBucketAcl

s3:GetBucketCompliance

GET Bucket compliance(지원 중단됨)

s3:GetBucketConsistency

GET Bucket 일관성

s3:GetBucketCORS

GetBucketCors

s3:GetEncryptionConfiguration

GetBucketEncryption

s3:GetBucketLastAccessTime

GET 버킷 마지막 액세스 시간

s3:GetBucketLocation

GetBucketLocation

s3:GetBucketMetadataNotification

GET 버킷 메타데이터 알림 구성

s3:GetBucketNotification

GetBucketNotificationConfiguration

s3:GetBucketObjectLockConfiguration

GetObjectLockConfiguration

s3:GetBucketPolicy

GetBucketPolicy

s3:GetBucketTagging

GetBucketTagging

s3:GetBucketVersioning

GetBucketVersioning

s3:GetLifecycleConfiguration

GetBucketLifecycleConfiguration

s3:GetReplicationConfiguration

GetBucketReplication

s3:ListAllMyBuckets

  • ListBuckets

  • 저장 공간 사용량 가져오기

예, GET Storage Usage의 경우 그렇습니다.

참고: 그룹 정책에서만 사용합니다.

s3:ListBucket

  • ListObjects

  • HeadBucket

  • RestoreObject

s3:ListBucketMultipartUploads

  • ListMultipartUploads

  • RestoreObject

s3:ListBucketVersions

GET Bucket 버전

s3:PutBucketCompliance

PUT Bucket compliance(지원 중단됨)

s3:PutBucketConsistency

PUT 버킷 일관성

s3:PutBucketCORS

  • DeleteBucketCors†

  • PutBucketCors

s3:PutEncryptionConfiguration

  • DeleteBucketEncryption

  • PutBucketEncryption

s3:PutBucketLastAccessTime

PUT Bucket 마지막 액세스 시간

s3:PutBucketMetadataNotification

PUT 버킷 메타데이터 알림 구성

s3:PutBucketNotification

PutBucketNotificationConfiguration

s3:PutBucketObjectLockConfiguration

  • CreateBucket with the x-amz-bucket-object-lock-enabled: true 요청 헤더(s3:CreateBucket 권한도 필요)

  • PutObjectLockConfiguration

s3:PutBucketPolicy

PutBucketPolicy

s3:PutBucketTagging

  • DeleteBucketTagging†

  • PutBucketTagging

s3:PutBucketVersioning

PutBucketVersioning

s3:PutLifecycleConfiguration

  • DeleteBucketLifecycle†

  • PutBucketLifecycleConfiguration

s3:PutReplicationConfiguration

PutBucketReplication

예, PUT 및 DELETE에 대한 별도의 권한

객체에 적용되는 권한

권한 S3 REST API 작업 StorageGRID에 대한 사용자 지정

s3:AbortMultipartUpload

  • AbortMultipartUpload

  • RestoreObject

s3:BypassGovernanceRetention

  • DeleteObject

  • DeleteObjects

  • PutObjectRetention

s3:DeleteObject

  • DeleteObject

  • DeleteObjects

  • RestoreObject

s3:DeleteObjectTagging

DeleteObjectTagging

s3:DeleteObjectVersionTagging

DeleteObjectTagging(객체의 특정 버전)

s3:DeleteObjectVersion

DeleteObject(특정 버전의 객체)

s3:GetObject

  • GetObject

  • HeadObject

  • RestoreObject

  • SelectObjectContent

s3:GetObjectAcl

GetObjectAcl

s3:GetObjectLegalHold

GetObjectLegalHold

s3:GetObjectRetention

GetObjectRetention

s3:GetObjectTagging

GetObjectTagging

s3:GetObjectVersionTagging

GetObjectTagging(객체의 특정 버전)

s3:GetObjectVersion

GetObject(객체의 특정 버전)

s3:ListMultipartUploadParts

ListParts, RestoreObject

s3:PutObject

  • PutObject

  • CopyObject

  • RestoreObject

  • CreateMultipartUpload

  • CompleteMultipartUpload

  • UploadPart

  • UploadPartCopy

s3:PutObjectLegalHold

PutObjectLegalHold

s3:PutObjectRetention

PutObjectRetention

s3:PutObjectTagging

PutObjectTagging

s3:PutObjectVersionTagging

PutObjectTagging(객체의 특정 버전)

s3:PutOverwriteObject

  • PutObject

  • CopyObject

  • PutObjectTagging

  • DeleteObjectTagging

  • CompleteMultipartUpload

s3:RestoreObject

RestoreObject

PutOverwriteObject 권한 사용

s3:PutOverwriteObject 권한은 객체를 생성하거나 업데이트하는 작업에 적용되는 사용자 지정 StorageGRID 권한입니다. 이 권한 설정에 따라 클라이언트가 객체의 데이터, 사용자 정의 메타데이터 또는 S3 객체 태깅을 덮어쓸 수 있는지 여부가 결정됩니다.

이 권한에 대한 가능한 설정은 다음과 같습니다.

  • 허용: 클라이언트가 객체를 덮어쓸 수 있습니다. 이것이 기본 설정입니다.

  • 거부: 클라이언트는 객체를 덮어쓸 수 없습니다. '거부'로 설정하면 PutOverwriteObject 권한은 다음과 같이 작동합니다.

    • 동일한 경로에서 기존 객체가 발견된 경우:

      • 객체의 데이터, 사용자 정의 메타데이터 또는 S3 객체 태깅은 덮어쓸 수 없습니다.

      • 진행 중인 모든 데이터 수집 작업이 취소되고 오류가 반환됩니다.

      • S3 버전 관리가 활성화된 경우, '거부' 설정은 PutObjectTagging 또는 DeleteObjectTagging 작업이 객체 및 해당 객체의 현재 버전이 아닌 버전의 TagSet을 수정하는 것을 방지합니다.

    • 기존 개체를 찾을 수 없는 경우 이 권한은 아무런 효력이 없습니다.

  • 이 권한이 없는 경우, 허용 권한이 설정된 것과 동일한 효과가 나타납니다.

참고 현재 S3 정책에서 덮어쓰기를 허용하고 PutOverwriteObject 권한이 거부로 설정되어 있는 경우, 클라이언트는 객체의 데이터, 사용자 정의 메타데이터 또는 객체 태그를 덮어쓸 수 없습니다. 또한, 클라이언트 수정 방지 확인란이 선택된 경우(구성 > 보안 설정 > 네트워크 및 객체), 해당 설정이 PutOverwriteObject 권한 설정을 재정의합니다.

정책에 조건 지정

조건은 정책이 적용되는 시점을 정의합니다. 조건은 연산자와 키-값 쌍으로 구성됩니다.

조건은 평가를 위해 키-값 쌍을 사용합니다. 조건 요소는 여러 조건을 포함할 수 있으며, 각 조건은 여러 키-값 쌍을 포함할 수 있습니다. 조건 블록은 다음 형식을 사용합니다.

Condition: {
     condition_type: {
          condition_key: condition_values

다음 예에서 IpAddress 조건은 SourceIp 조건 키를 사용합니다.

"Condition": {
    "IpAddress": {
      "aws:SourceIp": "54.240.143.0/24"
		...
},
		...

지원되는 조건 연산자

조건 연산자는 다음과 같이 분류됩니다.

  • 문자열

  • 숫자

  • 부울

  • IP 주소

  • 널 검사

조건 연산자 설명

StringEquals

키와 문자열 값을 정확한 일치(대소문자 구분)를 기준으로 비교합니다.

StringNotEquals

키와 문자열 값을 대소문자를 구분하는 부정 일치 방식을 기반으로 비교합니다.

StringEqualsIgnoreCase

키와 문자열 값을 정확히 일치하는지 여부에 따라 비교합니다(대소문자 구분 없음).

StringNotEqualsIgnoreCase

키와 문자열 값을 비교할 때 대소문자를 구분하지 않고 부정 일치 방식을 사용합니다.

StringLike

키와 문자열 값을 정확히 일치 여부(대소문자 구분)로 비교합니다. * 및 ? 와일드카드 문자를 사용할 수 있습니다.

StringNotLike

키와 문자열 값을 대소문자를 구분하는 부정 일치 방식으로 비교합니다. * 및 ? 와일드카드 문자를 사용할 수 있습니다.

NumericEquals

정확한 일치 여부를 기준으로 키와 숫자 값을 비교합니다.

NumericNotEquals

키와 숫자 값을 부정 일치 방식을 기반으로 비교합니다.

NumericGreaterThan

"보다 큼"을 기준으로 키와 숫자 값을 비교합니다.

NumericGreaterThanEquals

"크거나 같음"을 기준으로 키와 숫자 값을 비교합니다.

NumericLessThan

"보다 작음"을 기준으로 키와 숫자 값을 비교합니다.

NumericLessThanEquals

"작거나 같음"을 기준으로 키와 숫자 값을 비교합니다.

부울

키를 부울 값과 비교하여 "참 또는 거짓" 일치 여부를 확인합니다.

IpAddress

키를 IP 주소 또는 IP 주소 범위와 비교합니다.

NotIpAddress

키를 IP 주소 또는 IP 주소 범위와 부정 일치 방식으로 비교합니다.

Null

현재 요청 컨텍스트에 조건 키가 있는지 확인합니다.

IfExists

Null 조건을 제외한 모든 조건 연산자에 추가하여 해당 조건 키의 부재 여부를 확인합니다. 조건 키가 없으면 TRUE를 반환합니다.

지원되는 조건 키

조건 키 작업 설명

aws:SourceIp

IP 연산자

요청이 전송된 IP 주소와 비교합니다. 버킷 또는 객체 작업에 사용할 수 있습니다.

참고: S3 요청이 관리 노드 및 게이트웨이 노드의 로드 밸런서 서비스를 통해 전송된 경우, 이는 로드 밸런서 서비스 업스트림의 IP 주소와 비교됩니다.

참고: 타사의 비투명 로드 밸런서를 사용하는 경우, 해당 로드 밸런서의 IP 주소와 비교합니다. 유효성을 확인할 수 없으므로 모든 X-Forwarded-For 헤더는 무시됩니다.

aws:username

리소스/식별

요청을 보낸 발신자의 사용자 이름과 비교합니다. 버킷 또는 객체 작업에 사용할 수 있습니다.

s3:구분 기호

s3:ListBucket 및

s3:ListBucketVersions 권한

구분 기호 매개변수는 ListObjects 또는 ListObjectVersions 요청에 지정된 구분 기호 매개변수와 비교합니다.

s3:ExistingObjectTag/<tag-key>

s3:DeleteObjectTagging

s3:DeleteObjectVersionTagging

s3:GetObject

s3:GetObjectAcl

3:GetObjectTagging

s3:GetObjectVersion

s3:GetObjectVersionAcl

s3:GetObjectVersionTagging

s3:PutObjectAcl

s3:PutObjectTagging

s3:PutObjectVersionAcl

s3:PutObjectVersionTagging

기존 객체에 특정 태그 키와 값이 있어야 합니다.

s3:max-keys

s3:ListBucket 및

s3:ListBucketVersions 권한

ListObjects 또는 ListObjectVersions 요청에 지정된 max-keys 매개변수와 비교합니다.

s3:object-lock-mode

s3:PutObject

요청 헤더에서 확장된 `object-lock-mode`을(를) PutObject, CopyObject 및 CreateMultipartUpload 요청과 비교합니다.

s3:object-lock-mode

s3:PutObjectRetention

`object-lock-mode`PutObjectRetention 요청의 XML 본문에서 확장된 내용과 비교합니다.

s3:object-lock-remaining-retention-days

s3:PutObject

`x-amz-object-lock-retain-until-date` 요청 헤더에 지정된 보존 기한 또는 버킷 기본 보존 기간에서 계산된 값과 비교하여 이러한 값이 다음 요청에 대해 허용 가능한 범위 내에 있는지 확인합니다.
  • PutObject

  • CopyObject

  • CreateMultipartUpload

s3:object-lock-remaining-retention-days

s3:PutObjectRetention

PutObjectRetention 요청에 지정된 보존 기한과 비교하여 허용 범위 내에 있는지 확인합니다.

s3:prefix

s3:ListBucket 및

s3:ListBucketVersions 권한

ListObjects 또는 ListObjectVersions 요청에 지정된 접두사 매개변수와 비교합니다.

s3:RequestObjectTag/<tag-key>

s3:PutObject

s3:PutObjectTagging

s3:PutObjectVersionTagging

객체 요청에 태깅이 포함된 경우 특정 태그 키와 값이 필요합니다.

s3:x-amz-server-side-encryption-customer-algorithm

s3:PutObject

요청 헤더에서 확장된 sse-customer-algorithm 또는 `copy-source-sse-customer-algorithm`와 비교합니다. PutObject, CopyObject, CreateMultipartUpload, UploadPart, UploadPartCopy, CompleteMultipartUpload 요청의 요청 헤더에서 확장된 내용과 비교합니다.

정책에 변수 지정

정책에서 변수를 사용하여 정책 정보가 있을 때 이를 채울 수 있습니다. 정책 변수는 Resource 요소 내에서 또는 Condition 요소 내의 문자열 비교에서 사용할 수 있습니다.

이 예시에서 변수 `${aws:username}`는 Resource 요소의 일부입니다.

"Resource": "arn:aws:s3:::bucket-name/home/${aws:username}/*"

이 예시에서 변수 `${aws:username}`는 조건 블록의 조건 값의 일부입니다.

"Condition": {
    "StringLike": {
      "s3:prefix": "${aws:username}/*"
		...
},
		...
변수 설명

${aws:SourceIp}

SourceIp 키를 제공된 변수로 사용합니다.

${aws:username}

제공된 변수로 사용자 이름 키를 사용합니다.

${s3:prefix}

제공된 변수로 서비스별 접두사 키를 사용합니다.

${s3:max-keys}

제공된 변수로 서비스별 max-keys 키를 사용합니다.

${*}

특수 문자입니다. 해당 문자를 문자 그대로 사용합니다.

${?}

특수 문자입니다. 해당 문자를 문자 그대로 물음표(?)로 사용합니다.

${$}

특수 문자입니다. 해당 문자를 문자 그대로 '$'로 사용합니다.

특별 처리가 필요한 정책 생성

정책에 따라 보안이나 지속적인 운영에 위험을 초래할 수 있는 권한이 부여될 수 있습니다. 예를 들어 계정의 루트 사용자를 차단하는 경우가 있습니다. StorageGRID S3 REST API 구현은 Amazon보다 정책 유효성 검사 시 덜 엄격하지만, 정책 평가 시에는 동일하게 엄격합니다.

정책 설명 정책 유형 Amazon 동작 StorageGRID 동작

루트 계정에 대한 모든 권한을 스스로 거부합니다.

버킷

유효하고 시행 중이지만, 루트 사용자 계정은 모든 S3 버킷 정책 작업에 대한 권한을 유지합니다.

동일

사용자/그룹에 대한 모든 권한을 자신에게 거부

그룹

유효하고 강제력이 있습니다

동일

외부 계정 그룹에 모든 권한 허용

버킷

잘못된 주체

유효하지만 정책에서 허용된 경우에도 모든 S3 버킷 정책 작업에 대한 권한이 405 Method Not Allowed 오류를 반환합니다

외부 계정 루트 또는 사용자에게 모든 권한 허용

버킷

유효하지만 정책에서 허용된 경우에도 모든 S3 버킷 정책 작업에 대한 권한이 405 Method Not Allowed 오류를 반환합니다

동일

모든 사용자에게 모든 작업에 대한 권한을 부여합니다.

버킷

유효하지만, 모든 S3 버킷 정책 작업에 대한 권한이 외부 계정 루트 사용자 및 사용자에 대해 405 Method Not Allowed 오류를 반환합니다.

동일

모든 사용자에게 모든 작업에 대한 권한을 거부합니다.

버킷

유효하고 시행 중이지만, 루트 사용자 계정은 모든 S3 버킷 정책 작업에 대한 권한을 유지합니다.

동일

Principal은 존재하지 않는 사용자 또는 그룹입니다.

버킷

잘못된 주체

유효한

리소스는 존재하지 않는 S3 버킷입니다.

그룹

유효한

동일

Principal은 로컬 그룹입니다.

버킷

잘못된 주체

유효한

정책은 소유자가 아닌 계정(익명 계정 포함)에 개체를 배치할 수 있는 권한을 부여합니다.

버킷

유효합니다. 객체는 생성자 계정의 소유이며 버킷 정책이 적용되지 않습니다. 생성자 계정은 객체 ACL을 사용하여 객체에 대한 액세스 권한을 부여해야 합니다.

유효합니다. 객체는 버킷 소유자 계정의 소유입니다. 버킷 정책이 적용됩니다.

한 번만 쓰고 여러 번 읽을 수 있는(WORM) 보호

데이터, 사용자 정의 객체 메타데이터 및 S3 객체 태깅을 보호하기 위해 WORM(Write-Once-Read-Many) 버킷을 생성할 수 있습니다. WORM 버킷은 새 객체 생성을 허용하고 기존 콘텐츠의 덮어쓰기 또는 삭제를 방지하도록 구성합니다. 여기에 설명된 방법 중 하나를 사용하십시오.

덮어쓰기가 항상 거부되도록 하려면 다음을 수행할 수 있습니다.

  • 그리드 관리자에서 구성 > 보안 > 보안 설정 > 네트워크 및 객체*로 이동하여 *클라이언트 수정 방지 확인란을 선택합니다.

  • 다음 규칙 및 S3 정책을 적용하십시오.

    • S3 정책에 PutOverwriteObject DENY 작업을 추가합니다.

    • DeleteObject DENY 작업을 S3 정책에 추가합니다.

    • S3 정책에 PutObject ALLOW 작업을 추가합니다.

참고 S3 정책에서 DeleteObject를 DENY로 설정하더라도 "30일 후 복사본 0개"와 같은 규칙이 있는 경우 ILM이 객체를 삭제하는 것을 막을 수는 없습니다.
참고 이러한 모든 규칙과 정책을 적용하더라도 동시 쓰기를 방지할 수는 없습니다(상황 A 참조). 하지만 순차적으로 완료된 덮어쓰기는 방지할 수 있습니다(상황 B 참조).

상황 A: 동시 쓰기(방지되지 않음)

/mybucket/important.doc
PUT#1 ---> OK
PUT#2 -------> OK

상황 B: 순차적으로 완료된 덮어쓰기(방지됨)

/mybucket/important.doc
PUT#1 -------> PUT#2 ---X (denied)