액세스 관리 개요 - Amazon Simple Storage Service

액세스 관리 개요

Amazon S3에서 권한을 부여하려면 권한을 부여 받을 사용자, 권한 대상이 되는 Amazon S3 리소스, 해당 리소스에 허용되는 특정 작업을 결정합니다. 다음 섹션에서는 Amazon S3 리소스에 대한 개요와 이러한 리소스에 대한 액세스를 제어하기에 가장 좋은 방법을 결정하는 방법을 설명합니다.

Amazon S3 리소스: 버킷 및 객체

AWS에서 리소스는 작업할 수 있는 엔터티입니다. Amazon S3에서 버킷객체는 리소스이며 이 둘에는 모두 연결된 하위 리소스가 있습니다.

다음은 버킷 하위 리소스의 몇 가지 예입니다.

  • lifecycle - 수명 주기 구성 정보를 저장합니다. 자세한 내용은 스토리지 수명 주기 관리 단원을 참조하십시오.

  • website – 버킷을 웹 사이트 호스팅용으로 구성하는 경우 웹 사이트 구성 정보를 저장합니다. 자세한 내용은 Amazon S3를 사용하여 정적 웹 사이트 호스팅을 참조하세요.

  • versioning – 버전 관리 구성을 저장합니다. 자세한 내용은 Amazon Simple Storage Service API 참조PUT Bucket 버전 관리를 참조하십시오.

  • policyacl(액세스 통제 목록) - 버킷에 대한 액세스 권한 정보를 저장합니다.

  • cors(교차 오리진 리소스 공유) - 교차 오리진 요청을 허용하는 버킷 구성을 지원합니다. 자세한 내용은 교차 오리진 리소스 공유(CORS) 사용 단원을 참조하십시오.

  • object ownership – 새 객체를 업로드하는 사용자와 관계없이 버킷 소유자가 버킷의 새 객체에 대한 소유권을 얻을 수 있습니다. 자세한 내용은 객체 소유권 제어 및 버킷에 대해 ACL 사용 중지 단원을 참조하십시오.

  • logging – Amazon S3에 요청해 버킷 액세스 로그를 저장할 수 있습니다.

다음은 객체 하위 리소스의 몇 가지 예입니다.

  • acl - 객체에 대한 액세스 권한 목록을 저장합니다. 자세한 내용은 ACL(액세스 제어 목록) 개요 단원을 참조하십시오.

  • restore – 아카이빙된 객체의 임시 복원을 지원합니다. 자세한 내용은 Amazon Simple Storage Service API 참조POST Object 복원를 참조하십시오.

    S3 Glacier Flexible Retrieval 스토리지 클래스의 객체는 아카이브된 객체입니다. 객체에 액세스하려면, 우선 복원 요청을 해야 하며 이에 따라 아카이빙된 객체의 복사본이 복원됩니다. 요청 시 복원하려는 객체 복사본의 복원 일수를 지정합니다. 객체 아카이빙에 대한 자세한 정보는 스토리지 수명 주기 관리을 참조하십시오.

Amazon S3 버킷 및 객체 소유권

버킷과 객체는 Amazon S3 리소스입니다. 기본적으로 리소스 소유자만 이러한 리소스에 액세스할 수 있습니다. 리소스 소유자란 리소스를 생성한 AWS 계정을 말합니다. 예:

  • 버킷 생성 및 객체 업로드에 사용하는 AWS 계정은 해당 리소스를 소유합니다.

  • AWS Identity and Access Management(IAM) 사용자 또는 역할 자격 증명을 사용하여 객체를 업로드하는 경우 사용자 또는 역할이 속한 AWS 계정에서 객체를 소유합니다.

  • 버킷 소유자는 다른 AWS 계정(또는 다른 계정의 사용자)에 객체를 업로드할 수 있는 교차 계정 권한을 부여할 수 있습니다. 이 경우, 객체를 업로드하는 AWS 계정이 해당 객체의 소유자입니다. 버킷 소유자는 다른 계정 소유의 객체에 대한 권한이 없습니다. 단, 다음 경우는 예외입니다.

    • 버킷 소유자가 요금을 지불하는 경우. 버킷 소유자는 객체의 소유 여부와 관계 없이 모든 객체에 대한 액세스를 거부하거나 버킷에 있는 객체를 삭제할 수 있습니다.

    • 버킷 소유자는 객체 소유 여부에 관계 없이 모든 객체를 아카이빙하거나 아카이빙된 객체를 복원할 수 있습니다. 아카이빙이란 객체를 저장하는 데 사용하는 스토리지 클래스를 말합니다. 자세한 내용은 스토리지 수명 주기 관리 단원을 참조하십시오.

소유권 및 인증 요청

버킷에 대한 모든 요청은 인증되었거나 인증되지 않았습니다. 인증된 요청에는 요청 발신자를 인증하는 서명 값이 포함되어야 하며 인증되지 않은 요청에는 포함되지 않아야 합니다. 요청 인증에 대한 자세한 내용은 요청 만들기 섹션을 참조하십시오.

버킷 소유자는 인증되지 않은 요청을 허용할 수 있습니다. 예를 들어 인증되지 않은 PUT 객체 요청은 버킷에 퍼블릭 버킷 정책이 있거나 버킷 ACL이 모든 사용자 그룹 또는 익명 사용자에 대해 WRITE 또는 FULL_CONTROL 액세스 권한을 부여할 때 허용됩니다. 퍼블릭 버킷 정책 및 퍼블릭 ACL(액세스 제어 목록)에 대한 자세한 내용은 "퍼블릭"의 의미 섹션을 참조하십시오.

모든 인증되지 않은 요청은 익명 사용자가 수행합니다. 이 사용자는 ACL에서 특정 정식 사용자 ID 65a011a29cdf8ec533ec3d1ccaae921c로 표시됩니다. 인증되지 않은 요청을 통해 객체가 버킷에 업로드되면 익명 사용자가 객체를 소유합니다. 기본 객체 ACL은 익명 사용자에게 객체 소유자로 FULL_CONTROL을 부여합니다. 따라서 Amazon S3은 인증되지 않은 요청으로 객체를 검색하거나 ACL을 수정할 수 있습니다.

익명 사용자가 객체를 수정하지 못하도록 하려면 익명 사용자가 버킷에 퍼블릭 쓰기를 허용하는 버킷 정책을 구현하지 않거나 익명 사용자가 버킷에 대한 쓰기 액세스를 허용하는 ACL을 사용하는 것이 좋습니다. Amazon S3 퍼블릭 액세스 차단을 사용하여 이 권장 동작을 적용할 수 있습니다.

퍼블릭 액세스 차단에 대한 자세한 내용은 Amazon S3 스토리지에 대한 퍼블릭 액세스 차단 섹션을 참조하십시오. ACL에 대한 자세한 내용은 ACL(액세스 제어 목록) 개요 단원을 참조하십시오.

중요

AWS 계정의 루트 사용자 자격 증명을 사용하여 인증된 요청을 하지 않는 것이 좋습니다. 대신, IAM 역할을 생성하고 해당 역할에 모든 액세스 권한을 부여합니다. 이러한 역할이 부여된 사용자를 관리자 사용자라고 합니다. AWS 계정 루트 사용자 자격 증명 대신, 관리자 역할에 할당된 자격 증명을 사용하여 AWS와 상호 작용하고 버킷 생성, 사용자 생성, 권한 부여 등의 태스크를 수행할 수 있습니다. 자세한 내용은 AWS 일반 참조의 AWS 계정 루트 사용자 보안 인증 정보 및 IAM 사용자 보안 인증 정보IAM 사용 설명서의 IAM 보안 모범 사례를 참조하십시오.

리소스 작업

Amazon S3은 Amazon S3 리소스를 처리하기 위한 작업을 제공합니다. 사용 가능한 작업은 서비스 승인 참조의 Amazon S3에서 정의한 작업을 참조하세요.

리소스 액세스 관리

액세스 관리란 액세스 정책을 작성하여 제3자(AWS 계정 및 사용자)에게 리소스 작업을 수행할 권한을 부여하는 것을 말합니다. 예를 들어, AWS 계정의 사용자에게 PUT Object 권한을 부여하면 해당 사용자가 귀하의 버킷에 객체를 업로드할 수 있습니다. 개별 사용자와 계정에 대한 권한 부여 뿐만 아니라 전체(익명 액세스) 사용자와 인증된 모든 사용자(AWS 자격 증명이 있는 사용자)에게 권한을 부여할 수 있습니다. 예를 들어, 버킷을 웹사이트로 구성하는 경우 누구에게나 GET Object 권한을 부여해 객체를 공개할 수 있습니다.

액세스 정책 옵션

액세스 정책은 누가 무엇에 액세스 할 수 있는지를 나타냅니다. 액세스 정책은 리소스(버킷 및 객체) 또는 사용자와 연결할 수 있습니다. 이에 따른 사용 가능한 Amazon S3 액세스 정책을 다음과 같이 분류할 수 있습니다.

  • 리소스 기반 정책 - 버킷 정책과 ACL(액세스 제어 목록)은 Amazon S3 리소스에 연결되는 리소스 기반입니다.

    
							버킷 ACL 및 버킷 정책이 있는 S3 버킷과 객체 ACL이 있는 S3 객체가 들어 있는 AWS 계정 리소스를 나타내는 다이어그램입니다.
    • ACL - 각 버킷과 객체마다 연결된 ACL이 있습니다. ACL은 피부여자와 그에 부여된 권한을 식별하는 권한 부여 목록입니다. ACL로 다른 AWS 계정에 기본적인 읽기/쓰기 권한을 부여합니다. ACL은 Amazon S3별 XML 스키마를 사용합니다.

      다음은 버킷 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 모두 동일한 XML 스키마를 사용합니다.

    • 버킷 정책 – 본인의 버킷에 한해 다른 AWS 계정 또는 IAM 사용자에게 버킷과 버킷에 포함된 객체에 대한 권한을 부여하는 버킷 정책을 추가할 수 있습니다. 모든 객체 권한은 해당 버킷 소유자가 생성하는 객체에만 적용됩니다. 버킷 정책은 ACL 기반 액세스 정책을 보완하며 대부분의 경우 액세스 정책을 대신합니다.

      다음은 버킷 정책의 예입니다. 버킷 정책(및 사용자 정책)은 JSON 파일로 나타냅니다. 이 정책은 버킷의 모든 객체에 대한 익명 읽기 권한을 허가합니다. 버킷 정책에 이름이 s3:GetObject인 버킷의 객체에 대해 examplebucket 작업(읽기 권한)을 허용한다는 설명이 있습니다.  해당 정책은 와일드카드(*)를 사용해 principal을 지정하여 익명 액세스를 허용하므로 신중하게 사용해야 합니다. 예를 들어 다음 버킷 정책은 누구나 객체에 액세스할 수 있도록 설정합니다.

      { "Version":"2012-10-17", "Statement": [ { "Sid":"GrantAnonymousReadPermissions", "Effect":"Allow", "Principal": "*", "Action":["s3:GetObject"], "Resource":["arn:aws:s3:::awsexamplebucket1/*"] } ] }
  • 사용자 정책 – IAM으로 Amazon S3 리소스에 대한 액세스를 관리할 수 있습니다. 사용자 계정으로 IAM 사용자, 그룹, 역할을 만들고 액세스 정책을 연결하면 Amazon S3 등 AWS 리소스에 액세스할 수 있습니다.

    
							연결된 사용자 정책이 있는 AWS 계정 관리자 및 다른 사용자를 나타내는 다이어그램입니다.

    IAM 사용에 관한 자세한 내용은 AWS Identity and Access Management(IAM)를 참조하십시오.

    다음은 사용자 정책의 예입니다. IAM 사용자 정책은 사용자와 연결되므로 이 정책에서는 익명 권한을 부여할 수 없습니다. 예시로 든 정책은 연결된 사용자가 버킷과 버킷에 포함된 객체에 대해 6개의 다양한 Amazon S3 작업을 수행할 수 있도록 허용해 줍니다. 이 정책을 특정 IAM 사용자, 그룹 및 역할과 연결할 수 있습니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AssignUserActions", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket", "s3:DeleteObject", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::awsexamplebucket1/*", "arn:aws:s3:::awsexamplebucket1" ] }, { "Sid": "ExampleStatement2", "Effect": "Allow", "Action": "s3:ListAllMyBuckets", "Resource": "*" } ] }

요청을 받으면 Amazon S3이 모든 액세스 정책을 평가해 권한 부여나 요청 거부를 결정합니다. Amazon S3의 해당 정책 평가에 대한 자세한 정보는 Amazon S3에서 요청에 권한을 부여하는 방법 단원을 참조하십시오.

IAM Access Analyzer for S3

Amazon S3 콘솔에서 IAM Access Analyzer for S3를 사용하여 퍼블릭 또는 공유 액세스 권한을 부여하는 ACL(버킷 액세스 제어 목록), 버킷 정책 또는 액세스 포인트 정책이 있는 모든 버킷을 검토할 수 있습니다. IAM Access Analyzer for S3는 인터넷상의 모든 사용자 또는 조직 외부의 AWS 계정을 포함한 다른 AWS 계정에 대한 액세스를 허용하도록 구성된 S3 버킷에 대한 알림을 제공합니다. 각 퍼블릭 버킷 또는 공유 버킷에 대해 퍼블릭 액세스 또는 공유 액세스의 수준과 소스를 보고하는 결과가 수신됩니다.

IAM Access Analyzer for S3에서는 한 번의 클릭으로 버킷에 대한 모든 퍼블릭 액세스를 차단할 수 있습니다. 특정 사용 사례를 지원하기 위해 퍼블릭 액세스가 필요하지 않은 경우 버킷에 대한 모든 액세스를 차단하는 것이 좋습니다. 모든 퍼블릭 액세스를 차단하기 전에 애플리케이션이 퍼블릭 액세스 없이 계속 올바르게 작동하는지 확인하세요. 자세한 내용은 Amazon S3 스토리지에 대한 퍼블릭 액세스 차단 단원을 참조하십시오.

또한 버킷 수준 권한 설정으로 드릴다운하여 세부적인 액세스 수준을 구성할 수 있습니다. 퍼블릭 액세스 또는 공유 액세스가 필요한 것으로 확인된 특정 사용 사례의 경우, 버킷에 대한 결과를 보관하여 버킷을 퍼블릭 상태로 유지할 것인지 공유 상태로 유지할 것인지 확인하고 기록할 수 있습니다. 언제든지 재방문하여 해당 버킷 구성을 수정할 수 있습니다. 감사 목적으로 결과를 CSV 보고서로 다운로드할 수도 있습니다.

Amazon S3 콘솔에서는 IAM Access Analyzer for S3를 추가 비용 없이 사용할 수 있습니다. IAM Access Analyzer for S3는 AWS Identity and Access Management(IAM) IAM Access Analyzer를 통해 제공됩니다. Amazon S3 콘솔에서 IAM Access Analyzer for S3를 사용하려면 IAM 콘솔을 방문하여 리전별로 IAM Access Analyzer에서 계정 수준 분석기를 생성해야 합니다.

IAM Access Analyzer for S3에 대한 자세한 내용은 IAM Access Analyzer for S3를 사용하여 버킷 액세스 검토 섹션을 참조하세요.

어떤 액세스 제어 방법을 사용해야 합니까?

액세스 정책 생성 옵션을 사용하는 경우, 다음과 같은 질문을 합니다.

  • 각 액세스 제어 방법에 따른 사용시기는 언제입니까? 예를 들어, 버킷 권한을 부여하려면 버킷 정책과 버킷 ACL 중 어느 것을 사용해야 합니까?

    나는 1개의 버킷과 그 버킷에 든 객체를 소유하고 있습니다. 리소스 기반 액세스 정책과 IAM 자격 증명 기반 정책 중 어느 것을 사용해야 합니까?

    리소스 기반 액세스 정책을 사용하는 경우, 객체 권한 관리에 버킷 정책과 객체 ACL 중 어느 것을 사용해야 합니까?

  • 1개의 버킷을 소유하고 있더라도 그 버킷에 있는 모든 객체를 소유한 것은 아닙니다. 다른 사람이 소유하고 있는 객체에 대한 액세스 권한은 어떻게 관리합니까?

  • 이러한 액세스 정책 옵션을 결합하여 액세스를 허용하는 경우, Amazon S3은 사용자에게 요청 작업 수행 권한이 있는지 여부를 어떻게 판단합니까?

다음 섹션에서는 이러한 액세스 제어 옵션과 Amazon S3의 액세스 제어 방식 평가 방법, 액세스 제어 방법에 따른 사용 시기를 살펴봅니다. 또한 실습 예제도 제시합니다.