

# Amazon S3에서 요청에 권한을 부여하는 방법
<a name="how-s3-evaluates-access-control"></a>

Amazon S3가 요청을 수신하면(예: 버킷 또는 객체 작업) 먼저 요청자가 필요한 권한을 보유하고 있는지 확인합니다. Amazon S3는 요청을 승인할지 여부를 결정할 때 모든 관련 액세스 정책, 사용자 정책 및 리소스 기반 정책(버킷 정책, 버킷 액세스 제어 목록(ACL), 객체 ACL)을 평가합니다.

**참고**  
Amazon S3 권한 검사에서 유효한 권한을 찾지 못한 경우, 액세스 거부(403 금지) 권한 거부 오류가 반환됩니다. 자세한 내용은 [Amazon S3의 액세스 거부(403 금지) 오류 문제 해결](https://docs.aws.amazon.com/AmazonS3/latest/userguide/troubleshoot-403-errors.html)을 참조하세요.

요청자가 특정 작업을 수행할 권한을 보유하고 있는지 확인하기 위해 Amazon S3는 요청을 수신할 경우 다음을 순서대로 수행합니다.

1. 런타임 시 모든 관련 액세스 정책(사용자 정책, 버킷 정책, ACL)을 평가를 위한 정책 세트로 변환합니다.

1. 다음과 같은 단계로 발생한 정책 세트를 평가합니다. 각 단계에서 Amazon S3은 컨텍스트 권한에 기반해 특정 컨텍스트에서 하위 정책 세트를 평가합니다.

   1. **사용자 컨텍스트** – 사용자 컨텍스트에서 사용자가 속한 상위 계정은 컨텍스트 권한입니다.

      Amazon S3은 상위 계정이 소유한 하위 정책 세트를 평가합니다. 이러한 하위 세트에는 상위 계정에서 사용자에게 연결된 사용자 정책이 포함됩니다. 상위 계정에서 요청에 포함된 리소스(버킷, 객체)를 소유하는 경우에도, Amazon S3는 동시에 해당 리소스 정책(버킷 정책, 버킷 ACL, 객체 ACL)도 평가합니다.

      사용자는 작업 수행을 위해 상위 계정의 권한을 보유해야 합니다.

      이 단계는 AWS 계정의 사용자가 요청한 경우에만 적용됩니다. AWS 계정의 루트 사용자 자격 증명을 사용하여 요청이 이루어진 경우, Amazon S3는 이 단계를 건너뜁니다.

   1. **버킷 컨텍스트** – 버킷 컨텍스트에서 Amazon S3은 버킷을 소유한 AWS 계정이 소유한 정책을 평가합니다.

      버킷 작업에 대한 요청의 경우, 요청자는 버킷 소유자의 권한을 보유해야 합니다. 객체에 대한 요청의 경우, Amazon S3은 버킷 소유자가 객체에 대한 액세스를 명백하게 거부했는지 확인하기 위해 버킷 소유자가 소유한 모든 정책을 평가합니다. 명시적 거부가 있을 경우 Amazon S3은 요청에 권한을 부여하지 않습니다.

   1. **객체 컨텍스트** – 객체에 대한 요청의 경우, Amazon S3은 객체 소유자가 소유한 하위 정책 세트를 평가합니다.

다음은 Amazon S3가 요청을 승인하는 방법을 보여 주는 몇 가지 예시 시나리오입니다.

**Example – 요청자가 IAM 보안 주체인 경우**  
요청자가 IAM 보안 주체일 경우, Amazon S3에서는 보안 주체가 속한 상위 AWS 계정에서 작업 수행에 필요한 권한을 보안 주체에게 부여했는지를 확인해야 합니다. 또한 버킷 콘텐츠 나열 요청과 같은 버킷 작업에 대한 요청일 경우, Amazon S3에서는 버킷 소유자가 요청자가 작업을 수행할 수 있도록 권한을 부여했는지를 확인해야 합니다. 리소스에서 특정 작업을 수행하려면 IAM 보안 주체는 소속된 상위 AWS 계정과 리소스를 소유한 AWS 계정에서 모두 권한이 필요합니다.

 

**Example – 요청자가 IAM 보안 주체인 경우 - 버킷 소유자가 소유하지 않은 객체에 대한 작업 요청인 경우**  
버킷 소유자가 소유하지 않은 객체에 대한 작업 요청인 경우, Amazon S3는 요청자가 객체 소유자로부터 권한을 받았는지 확인해야 할 뿐만 아니라 버킷 정책을 통해 버킷 소유자가 객체에 대한 명시적인 거부를 설정하지 않았는지 확인해야 합니다. 버킷 소유자(요금 지불자)는 객체의 소유 여부와 관계 없이 버킷의 객체에 대한 액세스를 명백하게 거부할 수 있습니다. 또한 버킷 소유자는 버킷의 모든 객체를 삭제할 수도 있습니다.  
기본적으로 다른 AWS 계정이 S3 범용 버킷에 객체를 업로드하면 해당 계정(객체 작성자)이 객체를 소유하고 객체에 액세스할 수 있으며 액세스 제어 목록(ACL)을 통해 다른 사용자에게 객체에 대한 액세스 권한을 부여할 수 있습니다. 객체 소유권을 사용하여 ACL이 사용 중지되고 버킷 소유자로서 범용 버킷의 모든 객체를 자동으로 소유하도록 이 기본 동작을 변경할 수 있습니다. 결과적으로 데이터에 대한 액세스 제어는 IAM 사용자 정책, S3 버킷 정책, 가상 프라이빗 클라우드(VPC) 엔드포인트 정책 및 AWS Organizations 서비스 제어 정책(SCP)과 같은 정책을 기반으로 합니다. 자세한 내용은 [객체 소유권 제어 및 버킷에 대해 ACL 사용 중지](about-object-ownership.md) 섹션을 참조하세요.

Amazon S3가 액세스 정책을 평가하여 버킷 작업 및 객체 작업에 대한 요청을 승인하거나 거부하는 방법에 대한 자세한 내용은 다음 주제를 참조하십시오.

**Topics**
+ [

# Amazon S3에서 버킷 작업 요청에 권한을 부여하는 방법
](access-control-auth-workflow-bucket-operation.md)
+ [

# Amazon S3에서 객체 작업에 대한 요청에 권한을 부여하는 방법
](access-control-auth-workflow-object-operation.md)

# Amazon S3에서 버킷 작업 요청에 권한을 부여하는 방법
<a name="access-control-auth-workflow-bucket-operation"></a>

Amazon S3에서 버킷 작업에 대한 요청을 수신하면, Amazon S3는 모든 관련 권한을 정책 세트로 변환하여 런타임 시 평가합니다. 관련 권한에는 리소스 기반 권한(예: 버킷 정책 및 버킷 액세스 제어 목록)과 사용자 정책(요청이 IAM 보안 주체인 경우)이 포함됩니다. 그러면 Amazon S3가 특정 컨텍스트(사용자 컨텍스트 또는 버킷 컨텍스트)에 따라 일련의 단계를 통해 변환된 정책 세트를 평가합니다.

1. **사용자 컨텍스트** – 요청자가 IAM 보안 주체일 경우, 이 보안 주체는 소속된 상위 AWS 계정의 권한을 보유해야 합니다. 이 단계에서 Amazon S3은 상위 계정(또한 컨텍스트 권한으로 불림)이 소유한 하위 정책 세트를 평가합니다. 이러한 하위 정책 세트에는 상위 계정이 보안 주체에게 연결한 사용자 정책이 포함됩니다. 또한 상위 계정에서 요청 시 리소스를 소유한 경우(이 경우에는 버킷), Amazon S3은 동시에 해당 리소스 정책(버킷 정책, 버킷 ACL)을 평가합니다. 버킷 작업에 대한 요청이 만들어질 때마다 서버 액세스 로그에 요청자의 정식 ID가 기록됩니다. 자세한 내용은 [서버 액세스 로깅을 사용한 요청 로깅](ServerLogs.md) 섹션을 참조하세요.

1. **버킷 컨텍스트** – 요청자는 특정 버킷 작업을 수행할 수 있는 버킷 소유자의 권한을 보유해야 합니다. 이 단계에서 Amazon S3는 버킷을 소유한 AWS 계정이 소유한 하위 정책 세트를 평가합니다.

   버킷 소유자는 버킷 정책 또는 버킷 ACL을 사용하여 권한을 부여할 수 있습니다. 버킷을 소유한 AWS 계정이 IAM 보안 주체의 상위 계정이기도 한 경우 사용자 정책에서 버킷 권한을 구성할 수 있습니다.

 다음은 버킷 작업의 컨텍스트 기반 평가에 대한 그래픽을 이용한 그림입니다.

![\[버킷 작업에 대한 컨텍스트 기반 평가를 보여 주는 그림.\]](http://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/images/AccessControlAuthorizationFlowBucketResource.png)


다음 예는 평가 논리를 설명합니다.

## 예제 1: 버킷 소유자가 요청한 버킷 작업
<a name="example1-policy-eval-logic"></a>

 이 예제에서 버킷 소유자는 AWS 계정의 루트 자격 증명을 사용하여 버킷 작업을 위한 요청을 보냅니다.

![\[버킷 소유자가 요청한 버킷 작업을 보여 주는 그림.\]](http://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/images/example10-policy-eval-logic.png)


 Amazon S3은 다음과 같이 컨텍스트 평가를 수행합니다.

1.  AWS 계정의 루트 사용자 자격 증명을 사용하여 요청이 되므로 사용자 컨텍스트는 평가되지 않습니다.

1.  버킷 컨텍스트에서 Amazon S3은 요청자가 작업을 수행할 수 있는 권한을 보유하고 있는지 확인하기 위해 버킷 정책을 검토합니다. Amazon S3에서 요청에 권한을 부여합니다.

## 예제 2: 버킷 소유자가 아닌 AWS 계정에서 요청한 버킷 작업
<a name="example2-policy-eval-logic"></a>

이 예제에서는 AWS 계정 2222-2222-2222가 소유한 버킷 작업을 위해 AWS 계정 1111-1111-1111의 루트 사용자 자격 증명을 사용하여 요청이 이루어졌습니다. 이 요청과 관련된 어떤 IAM 사용자도 없습니다.

![\[버킷 소유자가 아닌 AWS 계정에서 요청한 버킷 작업을 보여 주는 그림.\]](http://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/images/example20-policy-eval-logic.png)


이 경우, Amazon S3는 다음과 같이 컨텍스트를 평가합니다.

1. AWS 계정의 루트 사용자 자격 증명을 사용하여 요청이 되므로 사용자 컨텍스트는 평가되지 않습니다.

1. 버킷 컨텍스트에서 Amazon S3은 버킷 정책을 검토합니다. 버킷 소유자(AWS 계정 2222-2222-2222)가 요청된 작업을 수행할 수 있도록 AWS 계정 1111-1111-1111에 권한을 부여하지 않은 경우, Amazon S3가 요청을 거부합니다. 그렇지 않으면 Amazon S3은 요청에 권한을 부여하고 해당 작업을 수행합니다.

## 예제 3: 상위 AWS 계정이 버킷 소유자인 IAM 보안 주체가 요청한 버킷 작업
<a name="example3-policy-eval-logic"></a>

 이 예제에서는 또한 버킷을 소유하고 있는 AWS 계정 1111-1111-1111의 IAM 사용자인 Jill이 요청을 보냅니다.

![\[IAM 보안 주체와 버킷 소유자가 요청한 버킷 작업을 보여 주는 그림.\]](http://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/images/example30-policy-eval-logic.png)


 Amazon S3은 다음의 컨텍스트 평가를 수행합니다.

1.  사용자 컨텍스트에서 IAM 보안 주체가 요청을 하기 때문에 Amazon S3는 상위 AWS 계정에 속한 모든 정책을 평가하여 Jill이 작업을 수행할 권한을 보유하고 있는지 확인합니다.

    이 예제에서는 보안 주체가 속한 상위 AWS 계정 1111-1111-1111도 버킷 소유자입니다. 따라서 사용자 정책 이외에도 Amazon S3에서는 이들이 동일한 계정에 속하기 때문에 동일한 컨텍스트에서 버킷 정책과 버킷 ACL을 평가합니다.

1. Amazon S3은 사용자 컨텍스트의 일부로 버킷 정책과 버킷 ACL을 평가했기 때문에 버킷 컨텍스트는 평가하지 않습니다.

## 예제 4: 상위 AWS 계정이 버킷 소유자가 아닌 IAM 보안 주체가 요청한 버킷 작업
<a name="example4-policy-eval-logic"></a>

이 예제에서는 상위 AWS 계정이 1111-1111-1111인 IAM 사용자인 Jill이 요청을 전송하지만 버킷은 다른 AWS 계정, 2222-2222-2222가 소유합니다.

![\[버킷 소유자가 아닌 IAM 보안 주체가 요청한 버킷 작업을 보여 주는 그림.\]](http://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/images/example40-policy-eval-logic.png)


Jill은 상위 AWS 계정 및 버킷 소유자 모두의 권한이 필요합니다. Amazon S3은 다음과 같이 컨텍스트를 평가합니다.

1. IAM 보안 주체가 요청을 하기 때문에 Amazon S3은 Jill이 필요한 권한을 보유하고 있는지 확인하기 위해 계정에서 작성한 정책을 검토하여 사용자 컨텍스트를 평가합니다. Jill이 권한을 보유한 경우 Amazon S3가 계속하여 버킷 컨텍스트를 평가합니다. Jill에게 권한이 없는 경우 Amazon S3는 요청을 거부합니다.

1.  버킷 컨텍스트에서 Amazon S3는 요청된 작업을 수행하기 위해 버킷 소유자 2222-2222-2222가 Jill(또는 Jill의 상위 AWS 계정)에게 권한을 부여했는지를 확인합니다. Jill이 해당 권한을 보유한 경우 Amazon S3가 요청을 승인하고 작업을 수행합니다. 그렇지 않으면 Amazon S3은 요청을 거부합니다.

# Amazon S3에서 객체 작업에 대한 요청에 권한을 부여하는 방법
<a name="access-control-auth-workflow-object-operation"></a>

Amazon S3는 객체 작업 요청을 수신하면 모든 관련 권한(리소스 기반 권한(객체 액세스 제어 목록(ACL), 버킷 정책, 버킷 ACL) 및 IAM 사용자 정책을 런타임에 평가할 정책 집합으로 변환합니다. 그런 다음 일련의 단계에서 발생한 정책 세트를 평가합니다. 각 단계에서 Amazon S3가 세 개의 특정 컨텍스트(사용자 컨텍스트, 버킷 컨텍스트 및 객체 컨텍스트)에서 정책의 하위 세트를 평가합니다.

1. **사용자 컨텍스트** – 요청자가 IAM 보안 주체일 경우, 이 보안 주체는 소속된 상위 AWS 계정의 권한을 보유해야 합니다. 이 단계에서 Amazon S3은 상위 계정(또한 컨텍스트 권한을 불림)이 소유한 하위 정책 세트를 평가합니다. 이러한 하위 정책 세트에는 상위 계정이 보안 주체에게 연결한 사용자 정책이 포함됩니다. 상위 계정에서 요청에 포함된 리소스(버킷, 객체)를 소유하는 경우에도, Amazon S3는 동시에 해당 리소스 정책(버킷 정책, 버킷 ACL, 객체 ACL)도 평가합니다.
**참고**  
상위 AWS 계정이 리소스(버킷 또는 객체)를 소유한 경우, 사용자 정책이나 리소스 정책 중 하나를 사용하여 IAM 보안 주체에게 리소스 권한을 부여할 수 있습니다.

1. **버킷 컨텍스트** – 이 컨텍스트에서 Amazon S3은 버킷을 소유한 AWS 계정이 소유한 정책을 평가합니다.

   요청에 포함된 객체를 소유한 AWS 계정이 버킷 소유자와 동일하지 않으면, Amazon S3는 버킷 소유자가 객체에 대한 액세스를 명시적으로 거부했는지 정책을 통해 평가합니다. 객체에 명시적으로 거부된 세트가 있는 경우 Amazon S3은 해당 요청에 권한을 부여하지 않습니다.

1. **객체 컨텍스트** – 요청자는 특정 객체 작업을 수행할 수 있는 객체 소유자의 권한을 보유해야 합니다. 이 단계에서 Amazon S3은 ACL을 평가합니다.
**참고**  
버킷과 객체 소유자가 같지 않은 경우 버킷 컨텍스트에서 평가되는 버킷 정책에서 객체에 대한 액세스 권한을 부여할 수 있습니다. 소유자가 다르면 객체 소유자는 객체 ACL을 사용하여 권한을 부여해야 합니다. 객체를 소유한 AWS 계정이 IAM 보안 주체가 속한 상위 계정이기도 한 경우, 사용자 컨텍스트에서 평가되는 사용자 정책에서 객체 권한을 구성할 수 있습니다. 이러한 액세스 정책 대안을 사용하는 것에 대한 자세한 내용은 [정책을 사용하여 Amazon S3 리소스에 대한 액세스를 관리하는 연습](example-walkthroughs-managing-access.md)을 참조하세요.  
버킷 소유자가 버킷의 모든 객체를 소유하고 버킷 정책 또는 IAM 기반 정책을 사용하여 이러한 객체에 대한 액세스를 관리하려는 경우 객체 소유권에 대해 버킷 소유자 시행 설정을 적용할 수 있습니다. 이 설정을 사용하면 버킷 소유자가 버킷의 모든 객체를 자동으로 소유하고 완전히 제어할 수 있습니다. 버킷 및 객체 ACL은 편집할 수 없으며 더 이상 액세스 대상으로 간주되지 않습니다. 자세한 내용은 [객체 소유권 제어 및 버킷에 대해 ACL 사용 중지](about-object-ownership.md) 섹션을 참조하세요.

 다음은 객체 작업의 컨텍스트 기반 평가에 대한 그림입니다.

![\[객체 작업에 대한 컨텍스트 기반 평가를 보여 주는 그림.\]](http://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/images/AccessControlAuthorizationFlowObjectResource.png)


## 객체 작업 요청의 예시
<a name="access-control-auth-workflow-object-operation-example1"></a>

이 예시에서는 상위 AWS 계정이 1111-1111-1111인 IAM 사용자 Jill이 AWS 계정 2222-2222-2222가 소유한 버킷에서 AWS 계정 3333-3333-3333이 소유한 객체에 대해 객체 작업 요청(예: `GetObject`)을 전송합니다.

![\[객체 작업 요청을 보여 주는 그림.\]](http://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/images/example50-policy-eval-logic.png)


Jill은 상위 AWS 계정, 버킷 소유자 및 객체 소유자의 권한이 필요합니다. Amazon S3은 다음과 같이 컨텍스트를 평가합니다.

1. IAM 보안 주체가 요청을 하기 때문에 Amazon S3는 상위 AWS 계정 1111-1111-1111에서 요청된 작업 수행을 위해 Jill에게 권한을 부여했는지 확인하기 위해 사용자 컨텍스트를 평가합니다. Jill이 해당 권한을 보유한 경우 Amazon S3은 버킷 컨텍스트를 평가합니다. 그렇지 않으면 Amazon S3은 요청을 거부합니다.

1. 버킷 컨텍스트에서, 버킷 소유자, AWS 계정 2222-2222-2222는 컨텍스트 권한입니다. Amazon S3은 버킷 소유자가 객체에 대한 Jill의 액세스를 명백하게 거부했는지 확인하기 위해 버킷 정책을 검토합니다.

1. 객체 컨텍스트에서 컨텍스트 권한은 AWS 계정 3333-3333-3333인 객체 소유자입니다. Amazon S3은 Jill이 객체에 액세스하는 권한을 보유 중인지 확인하기 위해 객체 ACL을 평가합니다. 권한을 보유한 경우 Amazon S3은 요청에 권한을 부여합니다.