

# 요청 인증 및 권한 부여
<a name="s3-express-authenticating-authorizing"></a>

기본적으로 디렉터리 버킷은 프라이빗이며 액세스 권한이 명시적으로 부여된 사용자만 액세스할 수 있습니다. 디렉터리 버킷의 액세스 제어 경계는 버킷 수준에서만 설정됩니다. 반면 범용 버킷의 액세스 제어 경계는 버킷, 접두사 또는 객체 태그 수준에서 설정할 수 있습니다. 이러한 차이는 디렉터리 버킷이 S3 Express One Zone 액세스에 대한 버킷 정책 또는 IAM ID 정책에 포함할 수 있는 유일한 리소스라는 것을 의미합니다.

Amazon S3 Express One Zone은 AWS Identity and Access Management(AWSIAM) 권한 부여와 세션 기반 권한 부여를 모두 지원합니다.
+ S3 Express One Zone에서 리전 엔드포인트 API 작업(버킷 수준 작업, 즉 컨트롤 플레인 작업)을 사용하려면 세션 관리가 필요하지 않은 IAM 권한 부여 모델을 사용해야 합니다. 작업에 대한 권한은 개별적으로 부여됩니다. 자세한 내용은 [IAM을 사용한 리전 엔드포인트 API 권한 부여](s3-express-security-iam.md) 섹션을 참조하세요.
+ `CopyObject` 및 `HeadBucket`을 제외한 영역 엔드포인트 API 작업(객체 수준 또는 데이터 플레인, 작업)을 사용하려면 `CreateSession` API 작업을 사용하여 지연 시간이 짧은 데이터 요청 권한 부여에 최적화된 세션을 만들고 관리합니다. 세션 토큰을 검색하고 사용하려면 ID 기반 정책 또는 버킷 정책에서 디렉터리 버킷에 대한 `s3express:CreateSession` 작업을 허용해야 합니다. 자세한 내용은 [IAM을 사용한 리전 엔드포인트 API 권한 부여](s3-express-security-iam.md) 섹션을 참조하세요. Amazon S3 콘솔에서, AWS Command Line Interface(AWS CLI)를 통해 또는 AWS SDK를 사용하여 S3 Express One Zone에 액세스하는 경우, S3 Express One Zone은 사용자를 대신하여 세션을 생성합니다.

`CreateSession` API 작업으로 새로운 세션 기반 메커니즘을 통해 요청을 인증하고 권한을 부여할 수 있습니다. `CreateSession`을 사용하여 지연 시간이 짧은 버킷 액세스를 제공하는 임시 보안 인증 정보를 요청할 수 있습니다. 이러한 임시 보안 인증 정보의 범위는 특정 디렉터리 버킷으로 지정됩니다.

`CreateSession` 작업을 수행하려면 최신 버전의 AWS SDK를 사용하거나 AWS Command Line Interface(AWS CLI)를 사용하는 것이 좋습니다. 지원되는 AWS SDK와 AWS CLI가 세션 설정, 새로 고침 및 종료를 사용자 대신 처리합니다.

영역(객체 수준) 작업에만 세션 토큰을 사용하여(`CopyObject` 및 `HeadBucket` 제외) 권한 부여와 관련된 지연 시간을 세션의 여러 요청에 분산합니다. 리전 엔드포인트 API 작업(버킷 수준 작업)의 경우 세션 관리가 필요하지 않은 IAM 인증을 사용합니다. 자세한 내용은 [IAM을 사용한 리전 엔드포인트 API 권한 부여](s3-express-security-iam.md) 및 [`CreateSession`을 사용하여 영역 엔드포인트 API 작업 권한 부여](s3-express-create-session.md)(을)를 참조하세요.

## API 작업의 권한 부여 및 인증 방법
<a name="s3-express-security-iam-authorization"></a>

다음 테이블에는 디렉터리 버킷 API 작업에 대한 인증 및 권한 부여 정보가 나열되어 있습니다. 테이블에는 각 API 작업에 대해 API 작업 이름, IAM 정책 작업, 엔드포인트 유형(리전 또는 영역), 권한 부여 메커니즘(IAM 또는 세션 기반)이 나와 있습니다. 또한, 교차 계정 액세스가 지원되는 곳도 나와 있습니다. 버킷 수준 작업에 대한 액세스는 IAM ID 기반 정책(사용자 또는 역할)에서만 부여할 수 있으며 버킷 정책으로는 부여할 수 없습니다.


| API | 엔드포인트 유형 | IAM 작업 | 크로스 계정 액세스 | 
| --- | --- | --- | --- | 
| CreateBucket | 리전 | s3express:CreateBucket | 아니요 | 
| DeleteBucket | 리전 | s3express:DeleteBucket | 아니요 | 
| ListDirectoryBuckets | 리전 | s3express:ListAllMyDirectoryBuckets | 아니요 | 
| PutBucketPolicy | 리전 | s3express:PutBucketPolicy | 아니요 | 
| GetBucketPolicy | 리전 | s3express:GetBucketPolicy | 아니요 | 
| DeleteBucketPolicy | 리전 | s3express:DeleteBucketPolicy | 아니요 | 
| CreateSession | 영역 | s3express:CreateSession | 예 | 
| CopyObject | 영역 | s3express:CreateSession | 예  | 
| DeleteObject | 영역 | s3express:CreateSession | 예  | 
| DeleteObjects | 영역 | s3express:CreateSession | 예  | 
| HeadObject | 영역 | s3express:CreateSession | 예  | 
| PutObject | 영역 | s3express:CreateSession | 예 | 
| RenameObject | 영역 | s3express:CreateSession | 아니요 | 
| GetObjectAttributes | 영역 | s3express:CreateSession | 예 | 
| ListObjectsV2 | 영역 | s3express:CreateSession | 예  | 
| HeadBucket | 영역 | s3express:CreateSession | 예  | 
| CreateMultipartUpload | 영역 | s3express:CreateSession | 예 | 
| UploadPart | 영역 | s3express:CreateSession | 예  | 
| UploadPartCopy | 영역 | s3express:CreateSession | 예  | 
| CompleteMultipartUpload | 영역 | s3express:CreateSession | 예  | 
| AbortMultipartUpload | 영역 | s3express:CreateSession | 예  | 
| ListParts | 영역 | s3express:CreateSession | 예  | 
| ListMultipartUploads | 영역 | s3express:CreateSession | 예  | 
| ListAccessPointsForDirectoryBuckets | 영역 | s3express:ListAccessPointsForDirectoryBuckets | 예 | 
| GetAccessPointScope | 영역 | s3express:GetAccessPointScope | 예 | 
| PutAccessPointScope | 영역 | s3express:PutAccessPointScope | 예 | 
| DeleteAccessPointScope | 영역 | s3express:DeleteAccessPointScope | 예 | 

**Topics**
+ [API 작업의 권한 부여 및 인증 방법](#s3-express-security-iam-authorization)
+ [IAM을 사용한 리전 엔드포인트 API 권한 부여](s3-express-security-iam.md)
+ [`CreateSession`을 사용하여 영역 엔드포인트 API 작업 권한 부여](s3-express-create-session.md)

# IAM을 사용한 리전 엔드포인트 API 권한 부여
<a name="s3-express-security-iam"></a>

AWS Identity and Access Management(IAM)는 관리자가 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있도록 지원하는 AWS 서비스입니다. IAM 관리자는 어떤 사용자가 디렉터리 버킷의 Amazon S3 리소스와 S3 Express One Zone 작업을 사용할 수 있도록 인증(로그인)되고 권한이 부여(권한 보유)될 수 있는지 제어합니다. IAM은 추가 요금 없이 사용할 수 있습니다.

기본적으로 사용자는 디렉터리 버킷에 대한 권한이 없습니다. 디렉터리 버킷에 대한 액세스 권한을 부여하려면 IAM을 사용하여 사용자, 그룹 또는 역할을 생성하고 해당 ID에 권한을 연결하면 됩니다. IAM에 대한 자세한 내용은 **IAM 사용 설명서의 [IAM의 보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 참조하세요.

액세스 권한을 제공하려면 다음 방법을 사용하여 사용자, 그룹 또는 역할에 권한을 추가하면 됩니다.
+ **AWS IAM Identity Center 내의 사용자 및 그룹** - 권한 세트를 생성합니다. *AWS IAM Identity Center 사용자 안내서*에서 [권한 세트 생성](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-started-create-a-permission-set.html)의 지침을 따릅니다.
+ **ID 제공업체를 통해 IAM에서 관리되는 사용자** - ID 페더레이션을 위한 역할을 생성합니다. *IAM 사용 설명서*의 [서드 파티 자격 증명 공급자의 역할 만들기(페더레이션)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp.html)의 지침을 따릅니다.
+ **IAM 역할 및 사용자** - 사용자가 맡을 수 있는 역할을 생성합니다. **IAM 사용 설명서에서 [역할을 생성하여 IAM 사용자에게 권한 위임](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)의 지침을 따르세요.

IAM for S3 Express One Zone에 대한 자세한 내용은 다음 주제를 참조하세요.

**Topics**
+ [보안 주체](#s3-express-security-iam-principals)
+ [리소스](#s3-express-security-iam-resources)
+ [디렉터리 버킷에 대한 작업](#s3-express-security-iam-actions)
+ [디렉터리 버킷에 대한 IAM ID 기반 정책](s3-express-security-iam-identity-policies.md)
+ [디렉터리 버킷에 대한 버킷 정책 예제](s3-express-security-iam-example-bucket-policies.md)

## 보안 주체
<a name="s3-express-security-iam-principals"></a>

버킷에 대한 액세스 권한을 부여하는 리소스 기반 정책을 생성할 때, `Principal` 요소를 사용하여 해당 리소스에 대한 작업이나 작업을 요청할 수 있는 사람 또는 애플리케이션을 지정해야 합니다. 디렉터리 버킷 정책의 경우, 다음 보안 주체를 사용할 수 있습니다.
+ AWS 계정
+ IAM 사용자
+ IAM 역할
+ 페더레이션 사용자

자세한 내용은 *IAM 사용 설명서*에서 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)를 참조하세요.

## 리소스
<a name="s3-express-security-iam-resources"></a>

디렉터리 버킷의 Amazon 리소스 이름(ARN)에는 `s3express` 네임스페이스, AWS 리전, AWS 계정 ID, AWS 영역 ID(가용 영역 또는 로컬 영역 ID)가 포함된 디렉터리 버킷 이름이 포함됩니다.

디렉터리 버킷에 액세스하고 작업을 수행하려면 다음 ARN 형식을 사용해야 합니다.

```
arn:aws:s3express:region:account-id:bucket/base-bucket-name--zone-id--x-s3
```

디렉터리 버킷의 액세스 포인트에 액세스하고 작업을 수행하려면 다음 ARN 형식을 사용해야 합니다.

```
arn:aws::s3express:region:account-id:accesspoint/accesspoint-basename--zone-id--xa-s3
```

ARN에 대한 자세한 내용은 **IAM 사용 설명서의 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html) 섹션을 참조하세요. 리소스에 대한 자세한 내용은 **IAM 사용 설명서의 [IAM JSON 정책 요소: Resource](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_resource.html)를 참조하세요.

## 디렉터리 버킷에 대한 작업
<a name="s3-express-security-iam-actions"></a>

IAM ID 기반 정책 또는 리소스 기반 정책에서 어떤 S3 작업을 허용 또는 거부할지 정의합니다. 작업은 특정 API 작업에 해당합니다. 디렉터리 버킷을 사용할 경우 S3 Express One Zone 네임스페이스를 사용하여 `s3express`라는 권한을 부여해야 합니다.

`s3express:CreateSession` 권한을 허용하면 `CreateSession` API 작업이 모든 영역 엔드포인트 API (객체 수준) 작업에 대한 임시 세션 토큰을 검색합니다. 이 세션 토큰은 다른 모든 영역 엔드포인트 API 작업에 사용되는 자격 증명을 반환합니다. 따라서 IAM 정책을 사용하여 영역 API 작업에 액세스 권한을 부여하지 않습니다. 대신 `CreateSession`은 모든 객체 수준 작업에 대한 액세스를 활성화합니다. 영역 API 작업 및 권한 목록은 [요청 인증 및 권한 부여](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-authenticating-authorizing.html)를 참조하세요.

`CreateSession` API 작업에 대한 자세한 내용은 **Amazon Simple Storage Service API 참조의 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html) 섹션을 참조하세요.

IAM 정책 설명의 `Action` 요소에서는 다음 작업을 지정할 수 있습니다. 정책을 사용하여 AWS에서 작업할 수 있는 권한을 부여합니다. 정책에서 작업을 사용하면 일반적으로 이름이 같은 API 작업에 대한 액세스를 허용하거나 거부합니다. 그러나 경우에 따라 하나의 API 작업으로 둘 이상의 작업에 대한 액세스가 제어됩니다. 버킷 수준 작업에 대한 액세스는 IAM ID 기반 정책(사용자 또는 역할)에서만 부여할 수 있으며 버킷 정책으로는 부여할 수 없습니다.

액세스 포인트 정책을 구성하는 방법에 대한 자세한 내용은 [디렉터리 버킷의 액세스 포인트를 사용하도록 IAM 정책 구성](access-points-directory-buckets-policies.md) 섹션을 참조하세요.

자세한 내용은 [Actions, resources, and condition keys for Amazon S3 Express](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3express.html)를 참조하세요.

# 디렉터리 버킷에 대한 IAM ID 기반 정책
<a name="s3-express-security-iam-identity-policies"></a>

디렉터리 버킷을 생성하려면 먼저 AWS Identity and Access Management(IAM) 역할 또는 사용자에게 필요한 권한을 부여해야 합니다. 이 예시 정책은 `CreateSession` API 작업(영역 엔드포인트(객체 수준) API 작업에 사용) 및 모든 리전 엔드포인트(버킷 수준) API 작업에 대한 액세스를 허용합니다. 이 정책은 모든 디렉터리 버킷에서 `CreateSession` API 작업을 사용할 수 있도록 허용하지만, 리전 엔드포인트 API 작업은 지정된 디렉터리 버킷에만 사용할 수 있습니다. 이 정책 예를 사용하려면 `user input placeholders`를 실제 정보로 바꾸세요.

# 디렉터리 버킷에 대한 버킷 정책 예제
<a name="s3-express-security-iam-example-bucket-policies"></a>

이 섹션에서는 디렉터리 버킷 정책의 예제를 제공합니다. 이러한 정책을 사용하려면 `user input placeholders`를 실제 정보로 대체하세요.

다음 예시 버킷 정책은 AWS 계정 ID `111122223333`이 지정된 디렉터리 버킷에 `CreateSession` API 작업을 사용할 수 있도록 허용합니다. 세션 모드가 지정되지 않으면, 세션은 허용되는 최대 권한으로 생성됩니다(먼저 `ReadWrite`를 시도하고, 허용되지 않으면 `ReadOnly`를 시도). 이 정책은 영역 엔드포인트(객체 수준) API 작업에 대한 액세스 권한을 부여합니다.

**Example - `CreateSession` 직접 호출을 허용하는 버킷 정책**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ReadWriteAccess",
            "Effect": "Allow",
            "Resource": "arn:aws:s3express:us-west-2:111122223333:bucket/amzn-s3-demo-bucket--usw2-az1--x-s3",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:root"
                ]
            },
            "Action": [
                "s3express:CreateSession"
            ]
        }
    ]
}
```

**Example - `ReadOnly` 세션에서 `CreateSession` 직접 호출을 허용하는 버킷 정책**  
다음 예시 버킷 정책은 AWS 계정 ID인 `111122223333`이 `CreateSession` API 작업을 사용할 수 있도록 허용합니다. 이 정책은 `ReadOnly` 값과 함께 `s3express:SessionMode` 조건 키를 사용하여 읽기 전용 세션을 설정합니다.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ReadOnlyAccess",
            "Effect": "Allow",
            "Principal": {
                "AWS": "111122223333"
            },
            "Action": "s3express:CreateSession",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "s3express:SessionMode": "ReadOnly"
                }
            }
        }
    ]
}
```

**Example - `CreateSession` 직접 호출에 대한 크로스 계정 액세스를 허용하는 버킷 정책**  
다음 예시 버킷 정책은 AWS 계정 ID인 `111122223333`이 AWS 계정 ID *`444455556666`*이 소유한 지정된 디렉터리 버킷에 `CreateSession` API 작업을 사용할 수 있도록 허용합니다.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CrossAccount",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": [
                "s3express:CreateSession"
            ],
            "Resource": "arn:aws:s3express:us-west-2:444455556666:bucket/amzn-s3-demo-bucket--usw2-az1--x-s3"
        }
    ]
}
```

# `CreateSession`을 사용하여 영역 엔드포인트 API 작업 권한 부여
<a name="s3-express-create-session"></a>

`CopyObject` 및 `HeadBucket`을 제외한 영역 엔드포인트 API 작업(객체 수준 또는 데이터 플레인, 작업)을 사용하려면 `CreateSession` API 작업을 사용하여 지연 시간이 짧은 데이터 요청 권한 부여에 최적화된 세션을 만들고 관리합니다. 세션 토큰을 검색하고 사용하려면 ID 기반 정책 또는 버킷 정책에서 디렉터리 버킷에 대한 `s3express:CreateSession` 작업을 허용해야 합니다. 자세한 내용은 [IAM을 사용한 리전 엔드포인트 API 권한 부여](s3-express-security-iam.md) 섹션을 참조하세요. Amazon S3 콘솔에서, AWS Command Line Interface(AWS CLI)를 통해 또는 AWS SDK를 사용하여 S3 Express One Zone에 액세스하는 경우, S3 Express One Zone은 사용자를 대신하여 세션을 생성합니다. 그러나 AWS CLI 또는 AWS SDK를 사용할 때는 `SessionMode` 파라미터를 수정할 수 없습니다.

Amazon S3 REST API를 사용하는 경우 `CreateSession` API 작업을 사용하여 액세스 키 ID, 비밀 액세스 키, 세션 토큰 및 만료 시간이 포함된 임시 보안 인증 정보를 얻을 수 있습니다. 임시 보안 인증 정보는 IAM 사용자 보안 인증 정보와 같은 장기 보안 인증 정보와 동일한 권한을 제공하지만 임시 보안 인증 정보에 세션 토큰을 포함해야 합니다.

**세션 모드**  
세션 모드는 세션의 범위를 정의합니다. 세션 모드가 CreateSession API 요청에 지정되지 않은 경우 CreateSession 작업은 최대 허용 권한으로 세션을 생성하려고 합니다.(먼저 `ReadWrite`를 시도하고, `ReadWrite`이 정책에서 허용하지 않는 경우에 한해 `ReadOnly`로 돌아감). 버킷 정책에서 `s3express:SessionMode` 조건 키를 지정하여 `ReadWrite` 또는 `ReadOnly` 세션을 생성할 수 있는 사용자를 명시적으로 제어할 수 있습니다. `ReadWrite` 또는 `ReadOnly` 세션에 대한 자세한 내용은 **Amazon S3 API 참조의 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html)에 대한 `x-amz-create-session-mode` 파라미터를 참조하세요. 생성할 버킷 정책에 대한 자세한 내용은 [디렉터리 버킷에 대한 버킷 정책 예제](s3-express-security-iam-example-bucket-policies.md) 섹션을 참조하세요.

**세션 토큰**  
임시 보안 인증 정보를 사용하여 직접 호출할 때 호출에 세션 토큰을 포함해야 합니다. 세션 토큰은 임시 보안 인증 정보와 함께 반환됩니다. 세션 토큰은 디렉터리 버킷으로 범위가 지정되며 보안 인증 정보가 유효하고 만료되지 않았다는 것을 확인하는 데 사용됩니다. 세션을 보호하기 위해 임시 보안 인증 정보는 5분 후에 만료됩니다.

**`CopyObject` 및 `HeadBucket`**  
임시 보안 인증 정보는 특정 디렉터리 버킷으로 범위가 지정되며 지정된 디렉터리 버킷에 대한 모든 영역(객체 수준) 작업 API 직접 호출에 대해 자동으로 활성화됩니다. 다른 영역 엔드포인트 API 작업과 달리 `CopyObject` 및 `HeadBucket`은 `CreateSession` 인증을 사용하지 않습니다. 모든 `CopyObject` 및 `HeadBucket` 요청은 IAM 보안 인증 정보를 사용하여 인증 및 서명되어야 합니다. 하지만 다른 영역 엔드포인트 API 작업과 마찬가지로 `CopyObject` 및 `HeadBucket`은 여전히 `s3express:CreateSession`을 사용하여 권한이 부여됩니다.

자세한 내용은 *Amazon Simple Storage Service API 참조*에서 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html)를 참조하세요.