S3 Access Grants 개념

S3 Access Grants 개념 (S3 Access Grants concepts)

S3 Access Grants는 접두사, 버킷 또는 객체별로 Amazon S3 데이터에 대한 접근 권한을 정의하는 단순화된 모델이에요. 이 문서에서는 S3 Access Grants의 핵심 개념인 인스턴스, 위치, grant, 임시 자격 증명을 설명해요.

출처: 문서

S3 Access Grants 워크플로

S3 Access Grants 워크플로는 다음과 같아요.

  1. S3 Access Grants 인스턴스를 만들어요. S3 Access Grants 인스턴스 작업 참고.
  2. S3 Access Grants 인스턴스 안에서 Amazon S3 데이터의 위치를 등록하고, 이 위치를 AWS Identity and Access Management(IAM) 역할에 매핑해요. 위치 등록 참고.
  3. grantee(수혜자)를 위한 grant를 만들어 S3 리소스에 대한 접근을 부여해요. S3 Access Grants의 grant 작업 참고.
  4. grantee가 S3 Access Grants에서 임시 자격 증명을 요청해요. S3 Access Grants를 통해 Amazon S3 데이터 접근 요청 참고.
  5. grantee가 그 임시 자격 증명으로 S3 데이터에 접근해요. S3 Access Grants가 제공한 자격 증명으로 S3 데이터 접근 참고.

자세한 내용은 S3 Access Grants 시작하기를 참고하세요.

S3 Access Grants 인스턴스

S3 Access Grants 인스턴스는 개별 grant의 논리적 컨테이너예요. S3 Access Grants 인스턴스를 만들 때는 AWS 리전을 지정해야 해요. 내 AWS 계정의 각 AWS 리전에는 S3 Access Grants 인스턴스가 하나 있을 수 있어요. 자세한 내용은 S3 Access Grants 인스턴스 작업을 참고하세요.

기업 디렉터리의 사용자와 그룹 자격 증명에 접근을 부여하려면 S3 Access Grants 인스턴스를 AWS IAM Identity Center 인스턴스와도 연결해야 해요. 자세한 내용은 S3 Access Grants와 기업 디렉터리 자격 증명을 참고하세요.

새로 만든 S3 Access Grants 인스턴스는 비어 있어요. 인스턴스에 위치를 등록해야 하는데, 위치는 S3 기본 경로(s3://), 버킷 또는 버킷 안의 접두사가 될 수 있어요. 위치를 하나 이상 등록한 뒤에 이 등록된 위치의 데이터에 접근을 주는 접근 grant를 만들 수 있어요.

위치(Locations)

S3 Access Grants 위치는 버킷이나 접두사를 AWS Identity and Access Management(IAM) 역할에 매핑해요. S3 Access Grants는 이 IAM 역할을 맡아 해당 위치에 접근하는 grantee에게 임시 자격 증명을 제공해요. 접근 grant를 만들기 전에 먼저 S3 Access Grants 인스턴스에 위치를 하나 이상 등록해야 해요.

기본 위치(s3://)를 등록하고 IAM 역할에 매핑하는 걸 권장해요. 기본 S3 경로(s3://)의 위치는 내 계정의 AWS 리전에 있는 모든 S3 버킷에 대한 접근을 다뤄요. 접근 grant를 만들 때 grant 범위를 기본 위치 안의 버킷, 접두사 또는 객체로 좁힐 수 있어요.

더 복잡한 접근 관리 사용 사례는 기본 위치 외에 더 많은 위치를 등록해야 할 수 있어요. 이러한 사용 사례의 몇 가지 예시는 다음과 같아요.

  • amzn-s3-demo-bucket이 IAM 역할이 매핑된 S3 Access Grants 인스턴스의 등록된 위치인데, 이 IAM 역할이 버킷 안의 특정 접두사에 접근이 거부된 상황을 가정해 봐요. 이 경우 IAM 역할이 접근할 수 없는 접두사를 별도의 위치로 등록하고, 필요한 접근을 가진 다른 IAM 역할에 그 위치를 매핑할 수 있어요.
  • VPC(가상 사설 클라우드) 엔드포인트 안의 사용자에게만 접근을 제한하는 grant를 만들고 싶은 상황을 가정해 봐요. 이 경우 IAM 역할이 VPC 엔드포인트로 접근을 제한하는 버킷의 위치를 등록할 수 있어요. 나중에 grantee가 S3 Access Grants에 자격 증명을 요청하면 S3 Access Grants는 위치의 IAM 역할을 맡아 임시 자격 증명을 제공해요. 이 자격 증명은 호출자가 VPC 엔드포인트 안에 있지 않으면 특정 버킷에 대한 접근을 거부해요. 이 거부 권한은 grant에 지정된 일반적인 READ, WRITE 또는 READWRITE 권한에 추가로 적용돼요.

내 사용 사례가 S3 Access Grants 인스턴스에 여러 위치를 등록해야 한다면 다음 중 아무거나 등록할 수 있어요.

  • 기본 S3 위치(s3://)
  • 버킷(예: amzn-s3-demo-bucket) 또는 여러 버킷
  • 버킷과 접두사(예: amzn-s3-demo-bucket/prefix*) 또는 여러 접두사

S3 Access Grants 인스턴스에 등록할 수 있는 최대 위치 수는 S3 Access Grants 한계를 참고하세요. S3 Access Grants 위치 등록에 대한 자세한 내용은 위치 등록을 참고하세요.

S3 Access Grants 인스턴스에 첫 위치를 등록한 뒤에도 인스턴스에는 여전히 개별 접근 grant가 없어요. 따라서 S3 데이터에 아직 어떤 접근도 부여되지 않았어요. 이제 접근을 부여하는 grant를 만들 수 있어요. grant 만들기에 대한 자세한 내용은 S3 Access Grants의 grant 작업을 참고하세요.

Grant

S3 Access Grants 인스턴스의 개별 grant는 특정 자격 증명(IAM 보안 주체 또는 기업 디렉터리의 사용자나 그룹)이 S3 Access Grants 인스턴스에 등록된 위치 안에서 접근을 얻을 수 있게 해요.

grant를 만들 때 등록된 위치 전체에 접근을 부여할 필요는 없어요. 위치 안에서 grant의 접근 범위를 좁힐 수 있어요. 등록된 위치가 기본 S3 경로(s3://)라면 grant의 범위를 버킷, 버킷 안의 접두사 또는 특정 객체로 좁혀야 해요. grant의 등록된 위치가 버킷이나 접두사라면 전체 버킷이나 접두사에 접근을 주거나, 선택적으로 grant의 범위를 접두사, 하위 접두사 또는 객체로 좁힐 수 있어요.

grant에서 접근 수준도 READ, WRITE 또는 READWRITE로 설정해요. 기업 디렉터리 그룹 01234567-89ab-cdef-0123-456789abcdef에게 s3://amzn-s3-demo-bucket/projects/items/* 버킷에 대한 READ 접근을 주는 grant가 있다고 가정해 봐요. 이 그룹의 사용자는 amzn-s3-demo-bucket이라는 버킷에서 projects/items/ 접두사로 시작하는 객체 키 이름을 가진 모든 객체에 대해 READ 접근을 가질 수 있어요.

S3 Access Grants 인스턴스에서 만들 수 있는 최대 grant 수는 S3 Access Grants 한계를 참고하세요. grant 만들기에 대한 자세한 내용은 grant 만들기를 참고하세요.

S3 Access Grants 임시 자격 증명

grant를 만든 뒤에 grant에 지정된 자격 증명을 활용하는 인가된 애플리케이션은 시기적절(just-in-time) 접근 자격 증명을 요청할 수 있어요. 이러려면 애플리케이션이 GetDataAccess S3 API 작업을 호출해요. grantee는 이 API 작업으로 내가 공유한 S3 데이터에 대한 접근을 요청할 수 있어요.

S3 Access Grants 인스턴스는 GetDataAccess 요청을 인스턴스가 가진 grant에 대해 평가해요. 요청자에게 일치하는 grant가 있으면 S3 Access Grants는 일치하는 grant의 등록된 위치와 연결된 IAM 역할을 맡아요. S3 Access Grants는 임시 자격 증명의 권한을 grant의 범위가 지정하는 S3 버킷, 접두사 또는 객체에만 접근하도록 좁혀요.

임시 접근 자격 증명의 만료 시간은 기본적으로 1시간이지만 15분에서 12시간 사이의 값으로 설정할 수 있어요. AssumeRole API 참조의 최대 세션 기간을 참고하세요.

작동 방식

다음 다이어그램에서 범위가 s3://인 기본 Amazon S3 위치가 IAM 역할 s3ag-location-role과 함께 등록돼 있어요. 이 IAM 역할은 S3 Access Grants를 통해 자격 증명을 얻을 때 계정 안에서 Amazon S3 작업을 수행할 권한이 있어요.

이 위치 안에서 IAM 사용자 두 명을 위한 개별 접근 grant 두 개가 만들어져요. IAM 사용자 Bob은 DOC-BUCKET-EXAMPLE 버킷의 bob/ 접두사에 대해 READ와 WRITE 접근을 모두 부여받아요. 또 다른 IAM 역할 Alice는 DOC-BUCKET-EXAMPLE 버킷의 alice/ 접두사에 대해 READ 접근만 부여받아요. 파란색으로 표시된 grant는 Bob이 DOC-BUCKET-EXAMPLE 버킷의 bob/ 접두사에 접근하도록 정의돼요. 초록색으로 표시된 grant는 Alice가 DOC-BUCKET-EXAMPLE 버킷의 alice/ 접두사에 접근하도록 정의돼요.

Bob이 데이터를 READ할 때가 되면, Bob의 grant가 있는 위치와 연결된 IAM 역할이 S3 Access Grants GetDataAccess API 작업을 호출해요. Bob이 s3://DOC-BUCKET-EXAMPLE/bob/*로 시작하는 S3 접두사나 객체를 READ하려 하면 GetDataAccess 요청은 s3://DOC-BUCKET-EXAMPLE/bob/*에 접근할 권한이 있는 임시 IAM 세션 자격 증명 집합을 반환해요. 마찬가지로 Bob은 s3://DOC-BUCKET-EXAMPLE/bob/*로 시작하는 S3 접두사나 객체에 WRITE할 수도 있어요. grant가 그것도 허용하니까요.

마찬가지로 Alice는 s3://DOC-BUCKET-EXAMPLE/alice/로 시작하는 어떤 것이든 READ할 수 있어요. 하지만 s3://의 어떤 버킷, 접두사 또는 객체에 무엇이든 WRITE하려 하면 그녀에게 WRITE 접근을 주는 grant가 없으므로 Access Denied(403 Forbidden) 오류를 받아요. 또한 Alice가 s3://DOC-BUCKET-EXAMPLE/alice/ 밖의 데이터에 어떤 수준의 접근(READ나 WRITE)을 요청해도 다시 Access Denied 오류를 받아요.

이 패턴은 많은 사용자와 버킷으로 확장되며 그 권한 관리도 단순화해요. 개별 사용자-접두사 접근 관계를 추가하거나 제거할 때마다 잠재적으로 큰 S3 버킷 정책을 편집하는 대신, 개별적이고 독립적인 grant를 추가하고 제거할 수 있어요.

더 알아보기 (Learn more)