

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon S3 버킷을 위한 세션 정책 생성
<a name="users-policies-session"></a>

*세션 정책은* 사용자를 Amazon S3 버킷의 특정 부분으로 제한하는 AWS Identity and Access Management (IAM) 정책입니다. 이 정책은 액세스를 실시간으로 평가해 이를 수행합니다.

**참고**  
 세션 정책은 Amazon S3에서만 사용됩니다. Amazon EFS의 경우 POSIX 파일 권한을 사용하여 액세스를 제한합니다.

세션 정책은 사용자 그룹 전원이 Amazon S3 버킷의 특정 부분에만 액세스하도록 제한해야 할 때 사용합니다. 예를 들어 사용자 그룹이 `home` 디렉터리에만 액세스해야 할 수도 있습니다. 해당 사용자 그룹은 같은 IAM 역할을 공유합니다.

**참고**  
 세션 정책의 최대 길이는 2,048자입니다. 자세한 내용은 *API 참조*의 `CreateUser` 작업에 대한 [정책 요청 파라미터](https://docs.aws.amazon.com/transfer/latest/APIReference/API_CreateUser.html#API_CreateUser_RequestSyntax)를 참조하세요.

세션 정책을 생성하려면, IAM 정책에서 다음 정책 변수를 사용하세요.
+ `${transfer:HomeBucket}`
+ `${transfer:HomeDirectory}`
+ `${transfer:HomeFolder}`
+ `${transfer:UserName}`

**중요**  
관리형 정책에서는 위의 변수를 사용할 수 없습니다. 또한 위의 변수를 IAM 역할 정의에서 정책 변수로 사용할 수도 없습니다. IAM 정책에 있는 이러한 변수는 사용자를 설정할 때 생성하고 바로 공급합니다. 그리고 이 세션 정책에서는 `${aws:Username}` 변수는 사용할 수 없습니다. 이 변수는 AWS Transfer Family이(가) 요구하는 사용자 이름이 아닌 IAM 사용자 이름을 의미합니다.

## 세션 정책 예제
<a name="example-session-policy"></a>

다음 코드는 예 세션 정책을 보여줍니다.

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
      {
          "Sid": "AllowListingOfUserFolder",
          "Action": [
              "s3:ListBucket"
          ],
          "Effect": "Allow",
          "Resource": [
              "arn:aws:s3:::${transfer:HomeBucket}"
          ],
          "Condition": {
              "StringLike": {
                  "s3:prefix": [
                      "${transfer:HomeFolder}/*",
                      "${transfer:HomeFolder}"
                  ]
              }
          }
      },
      {
          "Sid": "HomeDirObjectAccess",
          "Effect": "Allow",
          "Action": [
              "s3:PutObject",
              "s3:GetObject",
              "s3:DeleteObjectVersion",
              "s3:DeleteObject",
              "s3:GetObjectVersion",
              "s3:GetObjectACL",
              "s3:PutObjectACL"
          ],
          "Resource": "arn:aws:s3:::${transfer:HomeDirectory}/*"
       }
  ]
}
```

**참고**  
위의 정책 예에서는 사용자의 홈 디렉터리가 디렉터리임을 나타내기 위해 후행 슬래시를 포함하도록 설정된 것으로 가정합니다. 그 반면에 후행 슬래시가 없이 사용자의 `HomeDirectory`를 설정하는 경우에는 이를 정책의 일부로 포함해야 합니다.

이전 예 정책에서, `transfer:HomeFolder`, `transfer:HomeBucket`, `transfer:HomeDirectory` 정책 파라미터의 사용을 기억해 두세요. 이러한 파라미터는 [HomeDirectory](https://docs.aws.amazon.com/transfer/latest/APIReference/API_CreateUser.html#TransferFamily-CreateUser-request-HomeDirectory) 및 [API Gateway 메서드 구현](authentication-api-gateway.md#authentication-api-method)에 설명된 대로 사용자에 맞게 구성된 `HomeDirectory`을 위해 설정됩니다 이러한 파라미터의 정의는 다음과 같습니다.
+ `transfer:HomeBucket` 파라미터는 `HomeDirectory`의 첫 번째 구성 요소로 대체됩니다.
+ `transfer:HomeFolder` 파라미터가 `HomeDirectory` 파라미터의 나머지 부분으로 대체됩니다. 
+ `transfer:HomeDirectory` 파라미터는 `Resource` 명령문에서 S3 Amazon 리소스 이름 (ARN)의 일부로 사용할 수 있도록 선행 슬래시(`/`)가 제거되었습니다.

**참고**  
 귀하가 논리적 디렉터리를 사용하는 경우—즉 사용자의 `homeDirectoryType`가 `LOGICAL`인 경우—이러한 정책 파라미터(`HomeBucket`, `HomeDirectory`, 및 `HomeFolder`)는 지원되지 않습니다.

예를 들어, Transfer Family 사용자에 대해 구성된 `HomeDirectory` 파라미터가 `/home/bob/amazon/stuff/`(이)라고 가정해 보겠습니다.
+ `transfer:HomeBucket`를 `/home`(으)로 설정합니다.
+ `transfer:HomeFolder`를 `/bob/amazon/stuff/`(으)로 설정합니다.
+ `transfer:HomeDirectory`는 `home/bob/amazon/stuff/`가 됩니다.

첫 번째 `"Sid"`은(는) 사용자가 `/home/bob/amazon/stuff/`부터 시작하여 모든 디렉터리를 나열할 수 있게 해 줍니다.

두 번째 `"Sid"`은(는) 동일한 경로인 `/home/bob/amazon/stuff/`에 대한 사용자 `put` 및 `get` 액세스를 제한합니다.

앞의 정책을 활성화하면, 로그인 시 사용자는 자신의 홈 디렉터리에 있는 객체만 액세스할 수 있습니다. 연결 시는 이러한 변수를 사용자에게 적합한 값으로 바 AWS Transfer Family 꿉니다. 이렇게 하면 같은 정책 설명서를 다수의 사용자에게 쉽게 적용할 수 있습니다. 이 방법은 Amazon S3 버킷에 대한 사용자의 액세스 관리에 필요한 IAM 역할과 정책 관리 오버헤드를 줄입니다.

세션 정책을 사용하면 업무 요건에 따라 각 사용자의 액세스를 조절할 수도 있습니다. 자세한 내용은 *IAM 사용자 가이드*의 [Permissions for AssumeRole, AssumeRoleWithSAML 및 AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_assumerole.html)를 참조하세요.

**참고**  
AWS Transfer Family 는 정책의 Amazon 리소스 이름(ARN) 대신 정책 JSON을 저장합니다. 따라서 IAM 콘솔에서 정책을 변경할 때 AWS Transfer Family 콘솔로 돌아가서 사용자를 최신 정책 내용으로 업데이트해야 합니다. **사용자 구성** 섹션의 **정책 정보** 탭에서 사용자를 업데이트할 수 있습니다.  
를 사용하는 경우 다음 명령을 사용하여 정책을 업데이트할 AWS CLI수 있습니다.  

```
aws transfer update-user --server-id server --user-name user --policy \
   "$(aws iam get-policy-version --policy-arn policy --version-id version --output json)"
```

## 세션 정책에 대한 중첩 대체
<a name="nested-variable-behavior"></a>

중첩 대체는 Transfer Family 세션 정책에서 수행되지 않습니다. 세션 정책은와 같은 중첩 변수를 사용할 수 있습니다`${transfer:HomeDirectory}`. 정책이 처리되면 외부 변수(예: `${transfer:HomeDirectory}`)가 다른 변수(예: \$1`amzn-s3-demo-bucket:/$(transfer:UserName}`)가 포함된 값으로 대체될 수 있습니다. 그러나 중첩 변수는 실제 사용자 이름(예: **johndoe**)으로 더 이상 대체되지 않습니다.

즉, Transfer Family에 대한 세션 정책을 생성할 때이 동작을 고려하고 정책 구조와 변수 사용량이 그에 따라 설계되어야 합니다. 중첩된 변수는 예상대로 확인되지 않을 수 있으며 정책은 의도한 권한을 부여하지 않을 수 있습니다. 세션 정책이 예상대로 작동하는지 철저히 테스트하고 검증하는 것이 중요합니다. 이 동작은 Transfer Family 환경에 대한 액세스 제어 및 권한을 구현할 때 주요 고려 사항입니다.

이 문제의 한 가지 해결 방법은 세션 정책에서 실제 Amazon S3 버킷 이름을 사용하는 것입니다. 예를 들어 세션 정책`${transfer:HomeDirectory}`에서를 지정하는 대신 amzn-s3-demo-bucket이 실제 버킷인를 사용합니다`${amzn-s3-demo-bucket/transfer:UserName}`.