

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

# 액세스 통제 관리
<a name="users-policies"></a>

 AWS Identity and Access Management (IAM) 정책을 사용하여 AWS Transfer Family 리소스에 대한 사용자의 액세스를 제어할 수 있습니다. IAM 정책은 명령문으로, 대부분 리소스에 대한 특정 수준의 액세스를 허용하는 JSON 형식을 취합니다. IAM 정책을 사용하여 SFTP 사용자가 수행하거나 수행하지 않게 할 파일 작업을 정의합니다. 또한 IAM 정책을 이용해 사용자에게 액세스를 허용할 S3 버킷 또는 일반 버킷을 정의할 수도 있습니다. 사용자에 대해 이러한 정책을 지정하려면 IAM 정책 및 신뢰 관계가 연결된 AWS Transfer Family 에 대한 IAM 역할을 생성합니다.

각 사용자에게 IAM 역할이 할당됩니다. 에서 AWS Transfer Family 사용하는 IAM 역할 유형을 *서비스 역할*이라고 합니다. 사용자가 서버에 로그인하면는 사용자에게 매핑된 IAM 역할을 AWS Transfer Family 가정합니다. Amazon S3 버킷에 대한 사용자 액세스를 제공하는 IAM 역할을 생성하는 방법에 대한 자세한 내용은 *IAM 사용 설명서*의 [AWS 서비스에 대한 권한을 위임할 역할 생성을 참조하세요](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html).

IAM 정책 내에서 특정 권한을 사용하여 Amazon S3 객체에 대한 쓰기 전용 액세스 권한을 부여할 수 있습니다. 자세한 내용은 [파일을 쓰고 나열할 수 있는 권한만 부여](configure-storage.md#headobject-access-denied)을 참조하세요.

 AWS 스토리지 블로그에는 최소 권한 액세스를 설정하는 방법을 자세히 설명하는 게시물이 포함되어 있습니다. 자세한 내용은 [AWS Transfer Family 워크플로에서 최소 권한 액세스 구현을 참조하세요](https://aws.amazon.com/blogs//storage/implementing-least-privilege-access-in-an-aws-transfer-family-workflow/).

**참고**  
 Amazon S3 버킷이 AWS Key Management Service (AWS KMS)를 사용하여 암호화된 경우 정책에 추가 권한을 지정해야 합니다. 자세한 내용은 [데이터 보호 및 암호화](encryption-at-rest.md)을 참조하세요. 또한 *IAM 사용자 가이드*에서 [세션 정책에](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session.html) 대한 자세한 정보를 확인할 수 있습니다.

**Topics**
+ [

# Amazon S3 버킷에 대한 읽기 및 쓰기 액세스 허용
](users-policies-all-access.md)
+ [

# Amazon S3 버킷을 위한 세션 정책 생성
](users-policies-session.md)
+ [

# 동적 권한 관리 접근 방식
](dynamic-permission-management.md)

# Amazon S3 버킷에 대한 읽기 및 쓰기 액세스 허용
<a name="users-policies-all-access"></a>

이 섹션에서는 특정 Amazon S3 버킷에 대한 읽기 및 쓰기 액세스를 허용하는 IAM 정책 생성 방법을 설명합니다. 이 IAM 정책이 있는 IAM 역할을 사용자에게 할당하면, 해당 사용자는 지정한 Amazon S3 버킷에 대한 읽기 및 쓰기 액세스 권한을 얻게 됩니다.

다음 정책은 Amazon S3 버킷에 대한 프로그래밍 방식의 읽기 및 쓰기 액세스 권한을 제공합니다. `GetObjectACL` 및 `PutObjectACL` 명령문은 크로스 계정 액세스를 활성화할 필요가 있는 경우에만 요구됩니다. 예컨대, Transfer Family 서버가 다른 계정의 버킷에 액세스할 필요가 있는 경우입니다.

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"ReadWriteS3",
      "Action": [
            "s3:ListBucket"
                ],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:GetObjectTagging",
        "s3:DeleteObject",              
        "s3:DeleteObjectVersion",
        "s3:GetObjectVersion",
        "s3:GetObjectVersionTagging",
        "s3:GetObjectACL",
        "s3:PutObjectACL"
      ],
      "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket/*"]
    }
  ]
}
```

`ListBucket` 작업은 버킷 자체에 대한 권한을 요구합니다. `PUT`, `GET`, `DELETE` 작업은 객체 권한을 요구합니다. 이들은 각각 다른 리소스이며, 따라서 서로 다른 Amazon 리소스 이름(ARN)을 이용해 지정됩니다.

사용자의 액세스를 지정된 Amazon S3 버킷의 `home` 접두사로만 제약하는 방법은 [Amazon S3 버킷을 위한 세션 정책 생성](users-policies-session.md) 섹션을 참조하세요.

# 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}`.

# 동적 권한 관리 접근 방식
<a name="dynamic-permission-management"></a>

## Transfer Family 권한 아키텍처 이해
<a name="permission-architecture-overview"></a>

AWS Transfer Family 는 런타임 시 IAM 역할의 유효 권한을 제한할 수 있는 세션 정책을 통해 동적 권한 관리를 지원합니다. 이 접근 방식은 서비스 관리형 사용자와 사용자 지정 자격 증명 공급자 사용자 모두에서 작동하지만 Amazon S3(Amazon EFS 아님)와 파일을 주고받을 때만 지원됩니다.

모든 AWS Transfer Family 사용자는 다음으로 구성된 권한 모델을 사용합니다.

1. *기본 IAM 역할* - 사용자의 기본 권한을 정의합니다.

1. *선택적 세션 정책* - 런타임 시 기본 권한을 제한(범위 축소)합니다.

유효 권한은 기본 역할 권한과 세션 정책 권한의 교집합입니다. 세션 정책은 권한을 제한할 수만 있으며 기본 역할이 허용하는 것 이상의 추가 권한을 부여할 수는 없습니다.

이 아키텍처는 두 사용자 유형에 모두 적용됩니다.
+ *서비스 관리형 사용자 -* 세션 정책은 사용자 설정에서 직접 구성할 수 있습니다.
+ *사용자 지정 자격 증명 공급자 사용자* - 세션 정책을 인증 응답의 일부로 반환하거나에 저장할 수 있습니다. AWS Secrets Manager

## 권한 관리에 대한 두 가지 접근 방식
<a name="permission-management-approaches"></a>

고유한 액세스 패턴이 필요한 Transfer Family 사용자를 위한 권한을 설계할 때 두 가지 주요 접근 방식 중에서 선택할 수 있습니다.

사용자당 역할 1개  
각 Transfer Family 사용자에 대해 해당 사용자의 필요에 맞는 특정 권한을 가진 별도의 IAM 역할을 생성합니다. 다음과 같은 경우이 접근 방식을 사용합니다.  
+ 각 사용자에게는 매우 다른 권한이 필요합니다.
+ 권한 관리는 조직의 다양한 사용자가 처리합니다.
+ 개별 사용자 액세스를 세밀하게 제어해야 합니다.

세션 정책과 역할 공유  
광범위한 권한(예: 여러 사용자 홈 디렉터리가 포함된 전체 Amazon S3 버킷에 대한 액세스)이 있는 단일 IAM 역할을 사용하고 세션 정책을 적용하여 각 사용자를 특정 영역으로 제한합니다. 이 접근 방식은 각 사용자에 대해 별도의 역할을 관리하는 것에 비해 관리 오버헤드를 크게 줄입니다. 다음과 같은 경우이 접근 방식을 사용합니다.  
+ 사용자에게는 비슷한 유형의 액세스가 필요하지만 다른 리소스에 대한 액세스가 필요합니다(예: 모든 사용자에게 읽기/쓰기 액세스가 필요하지만 각각 자신의 폴더에만 액세스).
+ 역할 관리를 간소화하고 수십 또는 수백 개의 개별 역할을 생성하지 않으려는 경우
+ 사용자는 공유 버킷 내의 지정된 홈 디렉터리에만 액세스해야 합니다.
+ 권한 관리는 조직 내에서 중앙 집중화됩니다.
예를 들어 사용자 "alice", "bob" 및 "charlie"에 대해 별도의 역할을 생성하는 대신 전체 `s3://company-transfers/` 버킷에 액세스할 수 있는 하나의 역할을 생성한 다음 세션 정책을 사용하여 alice를 `s3://company-transfers/alice/`로, bob을 `s3://company-transfers/bob/`로 제한할 수 있습니다.

## 세션 정책 구현
<a name="session-policy-implementation"></a>

세션 정책은 사용자에게 할당된 기본 IAM 역할의 유효 권한을 제한하여 작동합니다. 최종 권한은 역할 권한과 세션 정책의 권한의 교집합입니다.

다음 두 가지 방법으로 동적 세션 정책을 구현할 수 있습니다.

변수 대체  
세션 정책`${transfer:HomeBucket}`에서 `${transfer:Username}`, `${transfer:HomeDirectory}`및와 같은 Transfer Family 정책 변수를 사용합니다. 이러한 변수는 런타임 시 실제 값으로 자동 대체됩니다. 이러한 변수에 대한 자세한 내용은 섹션을 참조하세요[Amazon S3 버킷을 위한 세션 정책 생성](users-policies-session.md).

동적 생성  
사용자 지정 자격 증명 공급자의 경우 Lambda 함수 또는 API Gateway 메on-the-fly 일부로 세션 정책을 즉시 생성합니다. 이 접근 방식을 사용하면 인증 시 사용자 속성, 그룹 멤버십 또는 외부 데이터 소스를 기반으로 고도로 사용자 지정된 정책을 생성할 수 있습니다.  
세션 정책 JSON과 `Policy` 함께 라는 키를 값으로 AWS Secrets Manager 포함하여에 사전 생성된 세션 정책을 저장할 수도 있습니다. 이를 통해 사용자별 액세스 제어를 유지하면서 여러 사용자에 대해 동일한 광범위한 IAM 역할을 사용할 수 있습니다.

**참고**  
세션 정책은 Amazon S3와의 파일 전송에만 지원됩니다. Amazon EFS 파일 시스템에는 적용되지 않습니다. Amazon EFS의 경우 권한은 UID/GID 및 파일 시스템 자체 내에 적용된 권한 비트에 의해 관리됩니다.

## 사용자 유형별 구현
<a name="implementation-by-user-type"></a>

서비스 관리형 사용자  
서비스 관리형 사용자의 경우 AWS Transfer Family 콘솔, API 또는 CLI를 통해 사용자 구성에서 직접 세션 정책을 지정할 수 있습니다. 자세한 내용은 [서비스 관리형과 작업](service-managed-users.md) 단원을 참조하십시오.

사용자 지정 자격 증명 공급자 사용자  
사용자 지정 자격 증명 공급자 사용자의 경우 두 가지 방법으로 세션 정책을 제공할 수 있습니다.  
+ 세션 정책과 `Policy` 함께 라는 키를 값으로 포함 AWS Secrets Manager 시켜를 통해
+ 인증 결과의 일부로 Lambda 함수 응답 또는 API Gateway 응답에서 직접
자세한 내용은 [사용자 지정 자격 증명 공급자 솔루션](custom-idp-toolkit.md) 단원을 참조하십시오.

## 예: 세션 정책을 사용하여 역할 관리 간소화
<a name="dynamic-permission-example"></a>

이 예제에서는 동적 권한 관리가 보안을 유지하면서 관리 오버헤드를 크게 줄이는 방법을 보여줍니다.

### 시나리오
<a name="scenario-description"></a>

조직에 파일을 전송하기 위해 SFTP 액세스 권한이 필요한 사용자가 50명 있습니다. 각 사용자는 라는 공유 Amazon S3 버킷 내의 자체 폴더에만 액세스해야 합니다`company-transfers`. 세션 정책이 없으면 50개의 개별 IAM 역할을 생성해야 합니다.

기존 접근 방식(세션 정책 없음)  
+ 50개의 IAM 역할 생성: `TransferRole-Alice`, `TransferRole-Bob``TransferRole-Charlie`, 등
+ 각 역할에는 해당 사용자의 폴더에 대한 특정 권한만 있습니다.
+ 권한을 관리하려면 개별 역할을 업데이트해야 합니다.
+ 새 사용자를 추가하려면 새 역할을 생성해야 합니다.

동적 접근 방식(세션 정책 사용)  
+ IAM 역할 1개 생성: 전체 버킷에 대한 광범위한 권한 `TransferRole-Shared` 있음
+ 세션 정책을 사용하여 런타임 시 각 사용자를 특정 폴더로 제한
+ 권한을 관리하려면 하나의 역할 또는 세션 정책 템플릿을 업데이트해야 합니다.
+ 새 사용자를 추가하면 새 역할이 필요하지 않고 사용자 구성만 필요합니다.

### 구현
<a name="implementation-example"></a>

동적 접근 방식을 구현하는 방법은 다음과 같습니다( `company-transfers` 버킷을 실제 Amazon S3 버킷으로 대체하는 예제로 사용).

**동적 권한 관리를 구현하려면**

1. 광범위한 Amazon S3 권한을 사용하여 공유 IAM 역할 하나를 생성합니다.  
****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "s3:GetObject",
           "s3:PutObject",
           "s3:DeleteObject"
         ],
         "Resource": "arn:aws:s3:::company-transfers/*"
       },
       {
         "Effect": "Allow",
         "Action": "s3:ListBucket",
         "Resource": "arn:aws:s3:::company-transfers"
       }
     ]
   }
   ```

1. 사용자의 폴더에 대한 액세스를 제한하는 세션 정책 템플릿을 생성합니다.  
****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "s3:GetObject",
           "s3:PutObject",
           "s3:DeleteObject"
         ],
         "Resource": "arn:aws:s3:::company-transfers/${transfer:Username}/*"
       },
       {
         "Effect": "Allow",
         "Action": "s3:ListBucket",
         "Resource": "arn:aws:s3:::company-transfers",
         "Condition": {
           "StringLike": {
             "s3:prefix": "${transfer:Username}*"
           }
         }
       }
     ]
   }
   ```

1. 다음을 사용하여 각 사용자를 구성합니다.
   + 공유 IAM 역할
   + 세션 정책은 다음과 같이 적용됩니다.
     + *서비스 관리형 사용자*: 사용자를 생성하거나 수정할 때 API 또는 CLI를 사용하여 정책 파라미터를 통해 JSON을 적용합니다(콘솔은 사전 정의된 정책 옵션만 제공).
     + *사용자 지정 자격 증명 공급자 사용자*: 인증 중에 Lambda 함수 응답의 일부로 반환하거나 사용자의 자격 증명과 함께 "정책"이라는 키 AWS Secrets Manager 로에 저장합니다.
   + 홈 디렉터리: `/company-transfers/${transfer:Username}/`