AWS - 2 . 퍼블릭 액세스, 버킷 설정 : ACL

코지클래식·2021년 10월 24일
0

AWS에서 나와있는 퍼블릭 액세스와 버킷 정책에 공식문서를 읽고 작성해 보았습니다.
(파트1)

개요

너무 반복적으로 나와서

*퍼블릭 액세스 차단 = PAR

*액세스포인트, 버킷 및 계정이 ALL 이라고 표현합니다.

S3 PAR 기능은 ALL에 대한 설정을 제공하여 S3 리소스에 대한 PA를 관리하는 데 도움을 줍니다. 기본적으로 ALLPA를 허용하지 않습니다. 그러나 사용자는 PA를 허용하도록 버킷 정책, 액세스포인트 정책 또는 객체 권한을 수정할 수 있습니다. S3 PAR은, 이러한 정책 및 권한을 무시하므로 이러한 리소스에 대한 PA를 제한할 수 있습니다.

우선순위 :: 1. 퍼블릭액세스 차단 >> 2. 버킷,액세스포인트,객체 권한/정책 >> 3. 기본 비허용

S3 PAR을 사용하면 계정 관리자와 버킷 소유자가, 리소스 생성 방식에 관계없이 사용되는 아마존 S3 리소스에 대한 PA를 제한하는, 중앙 집중식 제어를 쉽게 설정할 수 있습니다.

S3 PAR은 4가지 설정을 제공합니다. 각각의 설정은 독립적이며, 어떤 조합으로든 사용할 수 있습니다. 각 설정은 ALL에 적용할 수 있습니다. ALL에 대한 PAR이 다른 경우 S3에서는 ALL 설정의 가장 제한적인 조합을 적용합니다.

따라서 S3가 PAR에 의해 작업이 금지되는지 평가하는 경우, ALL 의 설정을 위반하는 요청을 거부합니다.

🔥 주의
ACL(액세스 제어목록), 액세스 포인트 정책, 버킷 정책 또는 모두를 통해 버킷 및 객체에 PA 권한이 부여됩니다. 모든 Amazon S3  액세스 포인트, 버킷 및 객체의 PA가 차단 되도록 하려면 PAR 설정 4개를 모두 켜는것이 좋습니다. 이러한 설정은 현재와 미래의 모든 버킷 및 액세스 포인트에 대한 PA를 차단합니다.

이 설정을 적용하기 전에, PA 없이 어플리케이션이 올바르게 작동하는지 확인합니다. 버킷 또는 객체에 대한 특정 수준의 퍼블릭액세스가 필요한 경우 (예를 들어 S3를 이용하여, 정적 웹사이트 호스팅에 설명된 대로 정적 웹사이트 호스팅을 하는경우), 스토리지 사용 사례에 적합하도록 개별 설정을 사용자 지정할 수 있습니다.

🔥 참고

  • ALL 에 대해서만 PAR 설정을 사용할 수 있습니다. S3는 객체별로 PAR 설정을 지원하지 않습니다.
  • 계정에 PAR 설정을 적용하면 해당 설정은 전세계 모든 AWS 지역에 적용됩니다. 설정이 모든 지역에서 즉시 또는 동시에 적용되지는 않지만 결국 모든 지역으로 전파됩니다.

위의 내용을 읽다보면 반복적으로 봐도 이해가 안되는 내용이 있습니다. 바로 ACL입니다.

2. ACL

  • ACL은 액세스 제어 목록의 약자입니다.
  • ACL을 변경하여 할 수 있는 것은, 버킷/객체에 대한 액세스 권한을 사용자별, 단계별로 관리하는 것입니다.
  • 여기에서 사용자는 아이디, 이메일, 그룹으로 구분할 수 있습니다.
  • 단계에는 Read, WRITE, ACL Read, ACL Write가 있습니다.
  • ACL은 결국 이러한 내용을 잘 조합하여 특정 버킷/객체에게(What), 어떤 사용자가(Who), 어디까지 다룰 수 있는지(How)를 관리할 수 있는 목록입니다.

아래에 AWS 튜토리얼의 내용을 적어봅니다.

ACL (액세스 제어 목록)

S3 ACL(액세스 제어목록)로 버킷과 객체에 대한 액세스를 관리한다. 각 버킷과 객체마다 하위 리소스로서 연결되어 있는 ACL이 있다. ACL은 액세스를 허용할 AWS 계정/그룹/액세스유형 을 정의한다. 리소스에 대한 요청을 수신하면, S3는 해당 ACL을 확인해 요청자가 필요한 액세스 권한을 갖고 있는지 판단한다.

버킷이나 객체를 생성하면 S3는 리소스에 대한 모든 권한을 리소스 소유자에게 부여하는 기본 ACL을 생성한다. 이 정보는 아래의 샘플 버킷 ACL(기본 객체 ACL도 동일한 구조)에 표시된다.

<?xml version="1.0" encoding="UTF-8"?>
<AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <Owner>
    <ID>*** Owner-Canonical-User-ID ***</ID>
    <DisplayName>owner-display-name</DisplayName>
  </Owner>
  <AccessControlList>
    <Grant>
      <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
               xsi:type="Canonical User">
        <ID>*** Owner-Canonical-User-ID ***</ID>
        <DisplayName>display-name</DisplayName>
      </Grantee>
      <Permission>FULL_CONTROL</Permission>
    </Grant>
  </AccessControlList>
</AccessControlPolicy>

샘플 ACL에는 AWS계정 정식 사용자 ID로 소유자를 식별하는 Owner 요소가 포함되어 있다.

Grant 요소는 피부여자 (AWS 계정 또는 미리 정의된 그룹)와 부여된 권한을 식별한다. 이 기본 ACL에는 소유자에 대해 한개의 Grant 요소가 있다. 각각 피부여자와 권한을 식별하는 Grant 요소를 추가해 권한을 부여한다.

  • 피부여자(Grantee)란?

피부여자는 AWS계정 또는 미리 정의된 S3 그룹 중 하나가 될 수 있다. AWS계정의 이메일 주소나 정식 사용자 ID로 권한을 부여한다. 단, 권한 요청에 이메일 주소를 적은 경우, S3에서 해당 계정의 정식 사용자 ID를 찾아 ACL에 추가한다. 그 결과, ACL에는 AWS 계정의 이메일 주소가 아니라 AWS 계정의 정식 사용자 ID가 항상 포함된다.

액세스 권한을 부여할 때 type = Vlaue 쌍으로 각 피부여자를 지정합니다. 여기서 유형은 다음중 하나 입니다.

1) id - 지정된 값이 AWS계정의 정식 사용자 인 경우

2) uri - 미리 정의된 그룹에 권한을 부여하는 경우

3) emailAddress - 지정된 값이 AWS 계정의 이메일 주소인 경우

중요
피부여자를 지정하기 위해 이메일 주소를 사용하는 것은, 다음 AWS 리전에서만 지원된다.

  • 미국 동부(버지니아 북부)
  • 미국 서부(캘리포니아 북부)
  • 미국 서부(오리건)
  • 아시아 태평양(싱가포르)
  • 아시아 태평양(시드니)
  • 아시아 태평양(도쿄)
  • 유럽 (아일랜드)
  • 남아메리카(상파울루)
  • 서울은 포함되지 않는다.

Ex. 이메일주소

예를 들어 다음 x-amz-grant-read 헤더는 이메일 주소로 식별된 AWS 계정에 객체 데이터와 메타 데이터를 읽을 수 있는 권한을 부여한다.

x-amz-grant-read: emailAddress="xyz@amazon.com", emailAddress="abc@amazon.com"

주의!
다른 AWS 계정 에 본인의 리소스 액세스를 허용하는 경우, AWS 계정 이 자신의 계정에 속한 사용자에게 그 권한을 위임할 수도 있다는 사실을 염두에 두어야 합니다. 이것을 교차 계정 액세스라고 합니다.

부여할 수 있는 권한

다음 표에는 ACL에서 S3가 지원하는 권한 목록이 나와 있다. ACL 권한 집합은 객체 ACL 및 버킷 ACL과 동일하다. 단, 상황에 따라 이 ACL 권한(버킷 ACL이나 객체 ACL) 은 특정 버킷이나 객체 작업에 대한 권한을 부여하기도 한다.

ACL 권한과 액세스 정책 권한의 매핑

앞의 표에서와 같이, ACL은 액세스 정책에서 설정할 수 있는 권한 수와 비교해 유한한 권한 집합만 허용한다. 이러한 권한은 각각 한 개 이상의 S3 작업을 허용한다.

다음 표는 각 ACL 권한이 어떻게 해당 액세스 정책 권한에 매핑되는지 보여줍니다. 보시다시피 액세스 정책은 ACL보다 많은 권한을 허용합니다. 주로 ACL을 사용하여 파일 시스템 권한과 유사한 기본 읽기/쓰기 권한을 부여합니다. ACL을 사용하는 경우에 대한 자세한 내용은 액세스 정책 지침을 참조하세요.

조건 키

액세스 정책 권한을 부여할 때 조건 키를 사용하여 버킷 정책을 통해 객체의 ACL 값을 제한할 수 있습니다. 아래의 컨텍스트 키는 ACL에 해당합니다. 이러한 컨텍스트 키를 사용하여 요청에서 특정 ACL을 사용하도록 지정할 수 있습니다.

  • s3:x-amz-grant-read ‐ 읽기 액세스가 필요합니다.
  • s3:x-amz-grant-write ‐ 쓰기 액세스가 필요합니다.
  • s3:x-amz-grant-read-acp ‐ 버킷 ACL에 대한 읽기 권한이 필요합니다.
  • s3:x-amz-grant-write-acp ‐ 버킷 ACL에 대한 쓰기 권한이 필요합니다.
  • s3:x-amz-grant-full-control ‐ 완전한 제어가 필요합니다.
  • s3:x-amz-acl ‐ 이 필요합니다.미리 제공된 ACL
profile
코지베어

0개의 댓글