

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

# 서버 엔드포인트에 대한 사용자 관리
<a name="create-user"></a>

다음 섹션에서는 AWS Transfer Family AWS Directory Service for Microsoft Active Directory 또는 사용자 지정 자격 증명 공급자를 사용하여 사용자를 추가하는 방법에 대한 정보를 찾을 수 있습니다.

또한 각 사용자 속성의 일부로, 사용자의 SSH(보안 쉘) 퍼블릭 키를 저장합니다. 키 기반 인증에는 이렇게 해야 합니다. 프라이빗 키는 사용자의 컴퓨터에 로컬로 저장됩니다. 사용자가 클라이언트를 사용하여 서버에 인증 요청을 보내면, 서버에서는 먼저 사용자를 사용자가 연관된 SSH 프라이빗 키에 대한 액세스 권한을 가지고 있는지 확인합니다. 그러면 서버가 사용자를 성공적으로 인증합니다.

**참고**  
여러 SSH 키가 있는 사용자의 자동 배포 및 관리는 섹션을 참조하세요[Transfer Family Terraform 모듈](terraform.md).

또한 사용자의 홈 디렉터리 또는 랜딩 디렉터리를 지정하고, AWS Identity and Access Management (IAM) 역할을 사용자에게 할당합니다. 원한다면 세션 정책을 제공해 사용자 액세스를 Amazon S3 버킷의 홈 디렉터리로 제한할 수도 있습니다.

**중요**  
AWS Transfer Family 는 SFTP 서버에 대한 인증에서 1\$12자 길이의 사용자 이름을 차단합니다. 또한 `root` 사용자 이름도 차단합니다.  
그 이유는 암호 스캐너의 악의적인 로그인 시도가 대량으로 발생하기 때문입니다.

## 아마존 EFS와 아마존 S3
<a name="efs-vs-s3-users"></a>

각 스토리지 옵션의 특징:
+ 액세스를 제한하려면: Amazon S3는 세션 정책을 지원하고, Amazon EFS는 POSIX 사용자, 그룹 및 보조 그룹 ID를 지원합니다.
+  둘 다 퍼블릭/프라이빗 키 지원 
+  둘 다 홈 디렉터리 지원 
+  둘 다 논리적 디렉터리 지원 
**참고**  
 Amazon S3의 경우 논리적 디렉터리에 대한 대부분의 지원은 API/CLI를 통해 이루어집니다. 콘솔의 **제약** 확인란을 사용하여 사용자를 홈 디렉터리에 잠글 수 있지만 가상 디렉터리 구조를 지정할 수는 없습니다.

## 논리적 디렉터리
<a name="logical-dir-users"></a>

사용자의 논리적 디렉터리 값을 지정하는 경우 사용하는 파라미터는 사용자 타입에 따라 달라집니다.
+ 서비스 관리 사용자의 경우 `HomeDirectoryMappings`에서 논리적 디렉터리 값을 제공하세요.
+ 사용자 지정 자격 증명 공급자 사용자의 경우에 논리적 디렉터리 값을 제공합니다`HomeDirectoryDetails`.

AWS Transfer Family 는 LOGICAL HomeDirectoryType을 사용할 때 HomeDirectory 값 지정을 지원합니다. 이는 응답에 HomeDirectoryDetails가 제공되는 서비스 관리형 사용자, Active Directory 액세스 및 사용자 지정 자격 증명 공급자 구현에 적용됩니다.

**중요**  
LOGICAL HomeDirectoryType을 사용하여 HomeDirectory를 지정할 때 값은 논리적 디렉터리 매핑 중 하나에 매핑되어야 합니다. 서비스는 사용자 생성 및 업데이트 중에 이를 검증하여 작동하지 않는 구성을 방지합니다.

### 기본 동작
<a name="logical-dir-default"></a>

기본적으로 지정하지 않은 상태로 두면 LOGICAL 모드의 경우 HomeDirectory가 "/"로 설정됩니다. 이 동작은 변경되지 않으며 기존 사용자 정의와 호환됩니다.
+ HomeDirectory를 *대상이* 아닌 *항목에* 매핑해야 합니다. 자세한 내용은 [논리적 디렉터리 사용 규칙](logical-dir-mappings.md#logical-dir-rules) 섹션을 참조하세요.
+ 가상 디렉터리의 구조에 대한 자세한 내용은 단원을 참조하십시오[가상 디렉터리 구조](implement-log-dirs.md#virtual-dirs).

### 사용자 지정 자격 증명 공급자 고려 사항
<a name="logical-dir-custom-idp"></a>

사용자 지정 자격 증명 공급자를 사용하는 경우 이제 LOGICAL HomeDirectoryType을 사용하는 동안 응답에 HomeDirectory를 지정할 수 있습니다. TestIdentityProvider API 호출은 사용자 지정 IDP가 LOGICAL 모드에서 HomeDirectory를 지정할 때 올바른 결과를 생성합니다.

HomeDirectory 및 LOGICAL HomeDirectoryType을 사용한 사용자 지정 IDP 응답의 예:

```
{
  "Role": "arn:aws:iam::123456789012:role/transfer-user-role",
  "HomeDirectoryType": "LOGICAL",
  "HomeDirectory": "/marketing",
  "HomeDirectoryDetails": "[{\"Entry\":\"/\",\"Target\":\"/bucket/home\"},{\"Entry\":\"/marketing\",\"Target\":\"/marketing-bucket/campaigns\"}]"
}
```

## Active Directory 그룹 할당량
<a name="ad-group-quotas"></a>

AWS Transfer Family 의 기본 제한은 서버당 Active Directory 그룹 100개입니다. 사용 사례에 100개 이상의 그룹이 필요한 경우 용 사용자 지정 자격 증명 공급자를 [사용한 Active Directory 인증 간소화에 설명된 대로 사용자 지정 자격 증명 공급자 AWS Transfer Family](https://aws.amazon.com/blogs/storage/simplify-active-directory-authentication-with-a-custom-identity-provider-for-aws-transfer-family/)솔루션을 사용하는 것이 좋습니다.

이 제한은 다음 자격 증명 공급자를 사용하는 서버에 적용됩니다.
+ AWS Microsoft Active Directory용 디렉터리 서비스
+ AWS Entra ID 도메인 서비스를 위한 디렉터리 서비스

서비스 한도 증가를 요청해야 하는 경우의 [AWS 서비스 할당량을 참조하세요](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)*AWS 일반 참조*. 사용 사례에 100개 이상의 그룹이 필요한 경우 용 사용자 지정 자격 증명 공급자를 [사용한 Active Directory 인증 간소화에 설명된 대로 사용자 지정 자격 증명 공급자 AWS Transfer Family](https://aws.amazon.com/blogs/storage/simplify-active-directory-authentication-with-a-custom-identity-provider-for-aws-transfer-family/)솔루션을 사용하는 것이 좋습니다.

Active Directory 그룹 제한과 관련된 문제 해결 정보는 섹션을 참조하세요[Active Directory 그룹 제한 초과](auth-issues.md#managed-ad-group-limits).

**Topics**
+ [아마존 EFS와 아마존 S3](#efs-vs-s3-users)
+ [논리적 디렉터리](#logical-dir-users)
+ [Active Directory 그룹 할당량](#ad-group-quotas)
+ [서비스 관리형과 작업](service-managed-users.md)
+ [사용자 지정 자격 증명 공급자와 작업](custom-idp-intro.md)
+ [Microsoft Active Directory용 AWS Directory Service 사용](directory-services-users.md)
+ [Entra ID 도메인 서비스에 AWS 디렉터리 서비스 사용](azure-sftp.md)

# 서비스 관리형과 작업
<a name="service-managed-users"></a>

서버의 **도메인** 설정에 따라 Amazon S3 또는 Amazon EFS 서비스 관리 사용자를 서버에 추가할 수 있습니다. 자세한 내용은 [SFTP, FTPS 또는 FTP 서버 엔드포인트 구성](tf-server-endpoint.md) 단원을 참조하십시오.

서비스 관리형 자격 증명 타입을 사용한다면, 사용자를 파일 전송 프로토콜 지원 서버에 추가해야 합니다. 이 작업을 할 때 각 사용자 이름은 서버 내에서 고유해야 합니다.

서비스 관리 사용자를 프로그래밍 방식으로 추가하려면 [CreateUser](https://docs.aws.amazon.com/transfer/latest/APIReference/API_CreateUser.html) API의 [예](https://docs.aws.amazon.com/transfer/latest/APIReference/API_CreateUser.html#API_CreateUser_Examples)를 참조하세요.

**참고**  
서비스 관리형 사용자의 경우 논리적 디렉터리 항목은 2,000개로 제한됩니다. 논리적 디렉터리 사용에 대한 자세한 내용은 섹션을 참조하세요[논리적 디렉터리를 사용하여 Transfer Family 디렉터리 구조를 단순화합니다.](logical-dir-mappings.md).

**Topics**
+ [Amazon S3 서비스 관리 사용자 추가](#add-s3-user)
+ [Amazon EFS 서비스 관리 사용자 추가](#add-efs-user)
+ [서비스 관리 사용자 관리](#managing-service-managed-users)

## Amazon S3 서비스 관리 사용자 추가
<a name="add-s3-user"></a>

**참고**  
 교차 계정 Amazon S3 버킷을 구성하려면 지식 센터 문서: [ 다른 AWS 계정에 있는 Amazon Simple Storage Service 버킷을 사용하도록 AWS Transfer Family 서버를 구성하려면 어떻게 해야 합니까?에 설명된 단계를 따르세요](https://aws.amazon.com/premiumsupport/knowledge-center/sftp-cross-account-s3-bucket/).

**Amazon S3 서비스 관리 사용자를 서버에 추가하려면**

1. [https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/) AWS Transfer Family 콘솔을 연 다음 탐색 창에서 **서버를** 선택합니다.

1. **서버** 페이지에서 사용자를 추가할 서버의 확인란을 선택합니다.

1. **사용자 추가**를 선택합니다.

1. **사용자 구성** 섹션의 **사용자 이름**에 사용자 이름을 입력합니다. 이 사용자 이름은 3\$1100자여야 합니다. 사용자 이름에 a\$1z, A\$1Z, 0\$19, 밑줄 '\$1', 하이픈 '-', 마침표 '.' 및 at 기호 '@' 문자를 사용할 수 있습니다. 사용자 이름은 하이픈 '-', 마침표 '.' 또는 at 기호 '@'로 시작할 수 없습니다.

1. **액세스**에는 Amazon S3 버킷에 대한 액세스를 제공하는, 이전에 생성한 IAM 역할을 선택합니다.

   이 IAM 역할은 [IAM 역할 및 정책 생성](requirements-roles.md)의 절차를 사용하여 생성했습니다. 해당 IAM 역할은 Amazon S3 버킷에 대한 액세스를 제공하는 IAM 정책을 포함합니다. 또한 다른 IAM 정책에 정의된 AWS Transfer Family 서비스와의 신뢰 관계도 포함됩니다. 사용자에 대한 세분화된 액세스 제어가 필요한 경우 [AWS Transfer Family 및 Amazon S3를 사용한 데이터 액세스 제어 향상](https://aws.amazon.com/blogs/storage/enhance-data-access-control-with-aws-transfer-family-and-amazon-s3-access-points/) 블로그 게시물을 참조하세요.

1. (옵션) **정책**에서 다음 중 하나를 선택합니다.
   + **없음**
   + **기존 정책**
   + **IAM에서 정책 선택**: 기존 세션 정책을 선택할 수 있습니다. 정책의 세부 정보가 포함된 JSON 객체를 보려면 **보기**를 선택합니다.
   + **홈 폴더 기반 정책 자동 생성**: 세션 정책을 자동으로 생성합니다. 정책의 세부 정보가 포함된 JSON 객체를 보려면 **보기**를 선택합니다.
**참고**  
**홈 폴더를 기반으로 정책 자동 생성**을 선택하는 경우 이 사용자에 대해 **제약**을 선택하지 마세요.

   세션 정책에 대한 자세한 내용은 [Amazon S3 버킷을 위한 세션 정책 생성](users-policies-session.md), 또는 [IAM 역할 및 정책 생성](requirements-roles.md)단원을 참조하십시오[동적 권한 관리 접근 방식](dynamic-permission-management.md).

1. **홈 디렉터리**에서 전송할 데이터를 저장할 Amazon S3 버킷을 선택합니다 AWS Transfer Family. 사용자가 클라이언트를 이용해 로그인하면 도착하게 되는 `home` 디렉터리의 경로를 입력합니다.

   이 파라미터를 입력하지 않으면 Amazon 버킷의 `root` 디렉터리를 사용합니다. 이 경우 IAM 역할이 이 `root` 디렉터리에 대한 액세스를 제공하는지 확인하세요.
**참고**  
사용자의 사용자 이름을 포함하는 디렉터리 경로 선택을 권장합니다. 세션 정책을 효과적으로 사용할 수 있습니다. 세션 정책은 사용자의 `home` 디렉터리에 대한 Amazon S3 버킷에서의 사용자 액세스를 제한합니다.

1. (옵션) **제약**의 경우, 사용자가 해당 폴더 외부에 액세스할 수 없고 Amazon S3 버킷 또는 폴더 이름을 볼 수 없도록 확인란을 선택합니다.
**참고**  
사용자에게 홈 디렉터리를 할당하고 사용자를 해당 홈 디렉터리로 제한하면 지정된 폴더에 대한 사용자 액세스를 차단하기에 충분해야 합니다. 추가 통제를 적용해야 하는 경우 세션 정책을 사용하세요.  
이 사용자에 대해 **제약**을 선택하면 홈 폴더가 제한된 사용자에 대해 정의된 값이 아니기 때문에 **홈 폴더 기반 정책 자동 생성**을 선택할 수 없습니다.

1. **SSH 퍼블릭 키**에는 SSH 키 쌍의 퍼블릭 SSH 키 부분을 입력합니다.

   서비스에서 사용자의 키를 확인해야 새 사용자를 추가할 수 있습니다.
**참고**  
SSH 키 쌍을 만드는 방법에 대한 지침은 [서비스 관리 사용자를 위한 SSH 키 생성](sshkeygen.md)를 참조하세요.

1. (옵션) **키**와 **값**에 하나 이상의 태그를 키-값 쌍로 입력하고 **태그 추가**를 선택합니다.

1. **추가**를 선택해 새 사용자를 원하는 서버에 추가합니다.

   새 사용자는 **서버 세부 정보** 페이지의 **사용자** 섹션에 나타납니다.

**다음 단계** - 그 다음 단계에서는 [클라이언트를 사용하여 서버 엔드포인트를 통한 파일 전송](transfer-file.md)로 계속 진행하세요.

## Amazon EFS 서비스 관리 사용자 추가
<a name="add-efs-user"></a>

Amazon EFS는 Portable Operating System Interface(POSIX) 파일 권한 모델을 사용하여 파일 소유권을 나타냅니다.
+  Amazon EFS 파일 소유권에 대한 자세한 설명은 [Amazon EFS 파일 소유권](configure-storage.md#efs-file-ownership)을 참조하세요.
+ EFS 사용자를 위한 디렉터리 설정에 대한 자세한 설명은 [Transfer Family를 위한 Amazon EFS 사용자 설정](configure-storage.md#configure-efs-users-permissions) 섹션을 참조하세요.

**Amazon EFS 서비스 관리 사용자를 서버에 추가하려면**

1. [https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/) AWS Transfer Family 콘솔을 연 다음 탐색 창에서 **서버를** 선택합니다.

1. **서버** 페이지에서 사용자를 추가하려는 Amazon EFS 서버를 선택합니다.

1. **사용자 추가**를 선택하여 **사용자 추가** 페이지를 표시합니다.

1. **사용자 구성** 섹션에서 다음 설정을 구성합니다.

   1. 이 **사용자 이름**은 최소 3글자에서 최대 100자여야 합니다. 사용자 이름에는 a\$1z, A\$1Z, 0\$19, 밑줄(\$1)와 하이픈(-), 마침표(.) 및 골뱅이 기호(@) 등의 문자를 사용할 수 있습니다. 사용자 이름은 하이픈 '-', 마침표 '.' 및 "@" 기호로 시작할 수 없습니다.

   1.  **사용자 ID** 및 **그룹 ID**의 경우, 다음을 참고하세요: 
      + 처음 생성하는 사용자의 경우, **그룹 ID**와 **사용자 ID** 모두에 대한 **0**의 값을 입력하는 것이 좋습니다. 이렇게 하면 Amazon EFS에 대한 사용자 관리자 권한이 부여됩니다.
      + 추가 사용자의 경우, 사용자의 POSIX 사용자 ID 및 그룹 ID를 입력합니다. 이러한 ID는 사용자가 수행하는 모든 Amazon Elastic File System 작업에 사용됩니다.
      + **사용자 ID** 및 **그룹 ID**의 경우 앞에 0을 사용하지 마세요. 예컨대, **12345**는 허용되지만 **012345**는 허용되지 않습니다.

   1. (옵션) **보조 그룹 ID**의 경우 각 사용자에 대해 하나 이상의 추가 POSIX 그룹 ID를 쉼표로 구분하여 입력합니다.

   1. **액세스**에서 다음과 같은 IAM 역할을 선택합니다.
      + 액세스하려는 Amazon EFS 리소스(파일 시스템)에 대한 액세스 권한만 사용자에게 부여합니다.
      + 사용자가 수행할 수 있는 파일 시스템 작업과 수행할 수 없는 파일 시스템 작업을 정의합니다.

      마운트 액세스 및 읽기/쓰기 권한이 있는 Amazon EFS 파일 시스템 선택에는 IAM 역할을 사용하는 것이 좋습니다. 예를 들어, 다음 두 AWS 관리형 정책의 조합은 매우 허용적이지만 사용자에게 필요한 권한을 부여합니다.
      +  AmazonElasticFileSystemClientFullAccess 
      +  AWSTransferConsoleFullAccess 

      자세한 내용은 블로그 게시물 [Amazon Elastic File System을 위한AWS Transfer Family 지원](https://aws.amazon.com/blogs/aws/new-aws-transfer-family-support-for-amazon-elastic-file-system/)을 참조하세요.

   1. **홈 디렉터리**의 경우, 다음을 수행합니다.
      +  AWS Transfer Family를 사용하여 전송할 데이터를 저장하는 데 사용할 Amazon EFS 파일 시스템을 선택합니다.
      + 홈 디렉터리를 **제약**으로 설정할지 여부를 결정하세요. 홈 디렉터리를 **제약**으로 설정하면 다음과 같은 결과가 발생합니다:
        + Amazon EFS 사용자는 해당 폴더 외부의 파일이나 디렉터리에 액세스할 수 없습니다.
        + 아마존 EFS 사용자는 아마존 EFS 파일 시스템 이름(**fs-xxxxxxx**)을 볼 수 없습니다.
**참고**  
**제약** 옵션을 선택하면 Amazon EFS 사용자의 경우 심볼릭 링크가 확인되지 않습니다.
      + (옵션) 사용자가 클라이언트를 사용하여 로그인할 때 들어갈 홈 디렉터리의 경로를 입력합니다.

        홈 디렉터리를 지정하지 않는 경우 Amazon EFS 파일 시스템의 루트 디렉터리가 사용됩니다. 이 경우 IAM 역할이 이 루트 디렉터리에 대한 액세스를 제공하는지 확인하세요.

1. **SSH 퍼블릭 키**에는 SSH 키 쌍의 퍼블릭 SSH 키 부분을 입력합니다.

   서비스에서 사용자의 키를 확인해야 새 사용자를 추가할 수 있습니다.
**참고**  
SSH 키 쌍을 만드는 방법에 대한 지침은 [서비스 관리 사용자를 위한 SSH 키 생성](sshkeygen.md)를 참조하세요.

1. (옵션) 사용자의 태그를 입력하세요. **키** 및 **값**에 하나 이상의 태그를 키-값 쌍로 입력하고 **태그 추가**를 선택합니다.

1. **추가**를 선택해 새 사용자를 원하는 서버에 추가합니다.

   새 사용자는 **서버 세부 정보** 페이지의 **사용자** 섹션에 나타납니다.

 Transfer Family 서버에 처음 SFTP를 연결할 때 발생할 수 있는 문제는 다음과 같습니다: 
+  `sftp` 명령을 실행해도 프롬프트가 나타나지 않으면 다음 메시지가 표시될 수 있습니다.

   `Couldn't canonicalize: Permission denied` 

   `Need cwd` 

   이 경우 사용자 역할에 대한 정책 권한을 늘려야 합니다. 와 같은 AWS 관리형 정책을 추가할 수 있습니다`AmazonElasticFileSystemClientFullAccess`.
+ 사용자의 홈 디렉터리를 보라는 `sftp` 프롬프트에 `pwd`를 입력하면 다음 메시지가 표시될 수 있습니다. 여기서 *USER-HOME-DIRECTORY*는 SFTP 사용자의 홈 디렉터리입니다.

   `remote readdir("/USER-HOME-DIRECTORY"): No such file or directory` 

  이 경우 상위 디렉터리(`cd ..`)로 이동하여 사용자의 홈 디렉터리(`mkdir username`)를 만들 수 있어야 합니다.

**다음 단계** - 그 다음 단계에서는 [클라이언트를 사용하여 서버 엔드포인트를 통한 파일 전송](transfer-file.md)로 계속 진행하세요.

## 서비스 관리 사용자 관리
<a name="managing-service-managed-users"></a>

 이 섹션에서는 사용자 목록을 보는 방법, 사용자 세부 정보를 편집하는 방법, SSH 퍼블릭 키를 추가하는 방법에 대한 정보를 찾을 수 있습니다.
+ [사용자 목록 보기](#list-users)
+ [사용자 세부 정보 보기 또는 편집](#view-user-details)
+ [사용자 삭제](#delete-user)
+ [SSH 퍼블릭 키 추가](#add-user-ssh-key)
+ [SSH 퍼블릭 키 삭제](#delete-user-ssh-key)<a name="list-users"></a>

**사용자 목록을 찾으려면**

1. [https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/) AWS Transfer Family 콘솔을 엽니다.

1. 탐색 창에서 **서버**를 선택하여 **서버** 페이지를 표시합니다.

1. **서버 ID** 열에서 식별자를 선택하여 **서버 세부 정보** 페이지를 표시합니다.

1. **사용자**에서 사용자 목록을 확인합니다.<a name="view-user-details"></a>

**사용자 세부 정보를 보거나 편집하려면**

1. [https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/) AWS Transfer Family 콘솔을 엽니다.

1. 탐색 창에서 **서버**를 선택하여 **서버** 페이지를 표시합니다.

1. **서버 ID** 열에서 식별자를 선택하여 **서버 세부 정보** 페이지를 표시합니다.

1. **사용자**에서 사용자 이름을 선택하면 **사용자 세부 정보** 페이지가 표시됩니다.

   **편집**을 선택하여 이 페이지에서 사용자의 속성을 변경할 수 있습니다.

1. **사용자 세부 정보** 페이지에서 **사용자 구성** 옆의 **편집**을 선택합니다.  
![\[사용자 구성을 편집하기 위한 화면을 보여주는 이미지\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/edit-user-details-page-user-config.png)

1. **구성 편집** 페이지의 Access에서 Amazon S3 버킷에 대한 **액세스**를 제공하는 이전에 생성한 IAM 역할을 선택합니다.

   이 IAM 역할은 [IAM 역할 및 정책 생성](requirements-roles.md)의 절차를 사용하여 생성했습니다. 해당 IAM 역할은 Amazon S3 버킷에 대한 액세스를 제공하는 IAM 정책을 포함합니다. 또한 다른 IAM 정책에 정의된 AWS Transfer Family 서비스와의 신뢰 관계도 포함됩니다.

1. (옵션) **정책**에서 다음 중 하나를 선택합니다.
   + **없음**
   + **기존 정책**
   + **IAM에서 정책을 선택하여** 기존 정책을 선택합니다. 정책의 세부 정보가 포함된 JSON 객체를 보려면 **보기**를 선택합니다.

   세션 정책에 대한 자세한 설명은 [IAM 역할 및 정책 생성](requirements-roles.md) 섹션을 참조하세요. 세션 정책 생성에 대한 자세한 설명은 [Amazon S3 버킷을 위한 세션 정책 생성](users-policies-session.md) 섹션을 참조하세요.

1. **홈 디렉터리**에서 전송할 데이터를 저장할 Amazon S3 버킷을 선택합니다 AWS Transfer Family. 사용자가 클라이언트를 이용해 로그인하면 도착하게 되는 `home` 디렉터리의 경로를 입력합니다.

   이 파라미터를 입력하지 않으면 Amazon S3 버킷의 `root` 디렉터리가 사용됩니다. 이 경우 IAM 역할이 이 `root` 디렉터리에 대한 액세스를 제공하는지 확인하세요.
**참고**  
사용자의 사용자 이름을 포함하는 디렉터리 경로 선택을 권장합니다. 세션 정책을 효과적으로 사용할 수 있습니다. 세션 정책은 사용자의 `home` 디렉터리에 대한 Amazon S3 버킷에서의 사용자 액세스를 제한합니다.

1. (옵션) **제약**의 경우, 사용자가 해당 폴더 외부에 액세스할 수 없고 Amazon S3 버킷 또는 폴더 이름을 볼 수 없도록 확인란을 선택합니다.
**참고**  
사용자에게 홈 디렉터리를 할당하고 해당 홈 디렉터리로 사용자를 제한하는 경우 이 정도면 지정된 폴더에 대한 사용자 액세스를 잠그기에 충분합니다. 추가 통제를 적용해야 하는 경우 세션 정책을 사용하세요.

1. **저장**을 선택하여 변경 사항을 저장합니다.<a name="delete-user"></a>

**사용자 삭제**

1. [https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/) AWS Transfer Family 콘솔을 엽니다.

1. 탐색 창에서 **서버**를 선택하여 **서버** 페이지를 표시합니다.

1. **서버 ID** 열에서 식별자를 선택하여 **서버 세부 정보** 페이지를 표시합니다.

1. **사용자**에서 사용자 이름을 선택하면 **사용자 세부 정보** 페이지가 표시됩니다.

1. **사용자 세부 정보** 페이지에서 사용자 이름 오른쪽에 있는 **삭제**를 선택합니다.

1. 표시되는 확인 대화 상자에서 단어 **delete**을 입력한 다음 **삭제**를 선택하여 사용자 삭제를 확인합니다.

 사용자 목록에서 **사용자**가 삭제됩니다.<a name="add-user-ssh-key"></a>

**사용자의 SSH 퍼블릭 키를 추가하려면**

1. [https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/) AWS Transfer Family 콘솔을 엽니다.

1. 탐색 창에서 **서버**를 선택합니다.

1. **서버 ID** 열에서 식별자를 선택하여 **서버 세부 정보** 페이지를 표시합니다.

1. **사용자**에서 사용자 이름을 선택하면 **사용자 세부 정보** 페이지가 표시됩니다.

1. **Add SSH public key(SSH 퍼블릭 키 추가)**를 선택해 새 SSH 퍼블릭 키를 사용자에 추가합니다.
**참고**  
SSH 키는 SSH(Secure Shell) File Transfer Protocol(SFTP)을 지원하는 서버에서만 사용됩니다. SSH 키 쌍을 생성하는 자세한 방법은 [서비스 관리 사용자를 위한 SSH 키 생성](sshkeygen.md) 섹션을 참조하세요.

1. **SSH public key(SSH 퍼블릭 키)**에는 SSH 키 쌍의 SSH 퍼블릭 키 부분을 입력합니다.

   서비스에서 사용자의 키를 확인해야 새 사용자를 추가할 수 있습니다. SSH 키의 형식은 `ssh-rsa string`입니다. SSH 키 쌍을 생성하려면 [서비스 관리 사용자를 위한 SSH 키 생성](sshkeygen.md) 섹션을 참조하세요.

1. **키 추가**를 선택합니다.<a name="delete-user-ssh-key"></a>

**사용자의 SSH 퍼블릭 키를 삭제하려면**

1. [https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/) AWS Transfer Family 콘솔을 엽니다.

1. 탐색 창에서 **서버**를 선택합니다.

1. **서버 ID** 열에서 식별자를 선택하여 **서버 세부 정보** 페이지를 표시합니다.

1. **사용자**에서 사용자 이름을 선택하면 **사용자 세부 정보** 페이지가 표시됩니다.

1. 퍼블릭 키를 삭제하려면 해당 SSH 키 확인란을 선택하고 **삭제**를 선택합니다.

# 사용자 지정 자격 증명 공급자와 작업
<a name="custom-idp-intro"></a>

AWS Transfer Family 는 사용자 지정 자격 증명 공급자가 안전한 파일 전송을 위해 사용자를 인증하고 권한을 부여할 수 있는 몇 가지 옵션을 제공합니다. 다음은 주요 접근 방식입니다.
+ [사용자 지정 자격 증명 공급자 솔루션](custom-idp-toolkit.md)-이 주제에서는 GitHub에서 호스팅되는 툴킷을 사용하여 Transfer Family 사용자 지정 자격 증명 공급자 솔루션을 설명합니다.
**참고**  
대부분의 사용 사례에서 권장되는 옵션입니다. 특히 100개 이상의 Active Directory 그룹을 지원해야 하는 경우 사용자 지정 ID 제공업체 솔루션은 그룹 제한 없이 확장 가능한 대안을 제공합니다. 이 솔루션은 블로그 게시물 [Simplify Active Directory authentication with a custom identity provider for에 설명되어 있습니다 AWS Transfer Family](https://aws.amazon.com/blogs/storage/simplify-active-directory-authentication-with-a-custom-identity-provider-for-aws-transfer-family/).
+ [Amazon API Gateway를 ID 제공자 통합에 사용](authentication-api-gateway.md)-이 주제에서는 AWS Lambda 함수를 사용하여 Amazon API Gateway 메서드를 지원하는 방법을 설명합니다.

  단일 Amazon API Gateway 메서드를 사용하여 RESTful 인터페이스를 제공할 수 있습니다. Transfer Family는 이 메서드를 호출하여 자격 증명 공급자에 연결합니다. 자격 증명 공급자는 사용자가 Amazon S3 또는 Amazon EFS에 액세스할 수 있도록 인증하고 권한을 부여합니다. ID 제공업체를 통합하기 위해 RESTful API가 필요하거나를 사용하여 지리 차단 또는 속도 제한 요청에 기능을 AWS WAF 활용하려는 경우이 옵션을 사용합니다. 자세한 내용은 [Amazon API Gateway를 ID 제공자 통합에 사용](authentication-api-gateway.md)을 참조하세요.
+ [동적 권한 관리 접근 방식](dynamic-permission-management.md)-이 주제에서는 세션 정책을 사용하여 사용자 권한을 동적으로 관리하는 접근 방식을 설명합니다.

  사용자를 인증하려면, AWS Transfer Family를 사용하여 기존 ID 제공자를 사용할 수 있습니다. Amazon S3 또는 Amazon Elastic File System (Amazon EFS)에 액세스할 수 있도록 사용자를 인증하고 권한을 부여하는 AWS Lambda 함수를 사용하여 자격 증명 공급자를 통합합니다. 자세한 내용은 [AWS Lambda 를 사용하여 자격 증명 공급자 통합](custom-lambda-idp.md)를 참조하세요. 또한 AWS Transfer Family Management Console에서 전송된 파일 수 및 바이트 수와 같은 지표에 대한 CloudWatch 그래프에 액세스할 수 있으므로 중앙 집중식 대시보드를 사용하여 파일 전송을 모니터링할 수 있는 단일 창을 제공합니다.
+ Transfer Family는 파일 전송 솔루션 구축을 안내하는 블로그 게시물과 워크숍을 제공합니다. 이 솔루션은 관리형 SFTP/FTPS 엔드포인트 AWS Transfer Family 에를 활용하고 사용자 관리를 위해 Amazon Cognito 및 DynamoDB를 활용합니다.

  블로그 게시물은 [AWS Transfer Family 및 Amazon S3에서 Amazon Cognito를 자격 증명 공급자로 사용에서 확인할 수 있습니다Amazon S3](https://aws.amazon.com/blogs/storage/using-amazon-cognito-as-an-identity-provider-with-aws-transfer-family-and-amazon-s3/). 여기에서 워크숍에 대한 세부 정보를 볼 수 [있습니다](https://catalog.workshops.aws/transfer-family-sftp/en-US).

**참고**  
사용자 지정 자격 증명 공급자의 경우 사용자 이름은 최소 3자에서 최대 100자여야 합니다. 사용자 이름에는 a\$1z, A\$1Z, 0\$19, 밑줄 '\$1', 하이픈 '-', 마침표 '.' 및 at 기호 '@' 문자를 사용할 수 있습니다. 사용자 이름은 하이픈 '-', 마침표 '.' 또는 기호 '@'로 시작할 수 없습니다.

사용자 지정 자격 증명 공급자를 구현할 때는 다음 모범 사례를 고려하세요.
+ Transfer Family 서버와 동일한 AWS 계정 및 리전에 솔루션을 배포합니다.
+ IAM 역할 및 정책을 구성할 때 최소 권한 원칙을 구현합니다.
+ 보안 강화를 위해 IP 허용 목록 및 표준화된 로깅과 같은 기능을 사용합니다.
+ 배포하기 전에 비프로덕션 환경에서 사용자 지정 자격 증명 공급자를 철저히 테스트합니다.

**Topics**
+ [사용자 지정 자격 증명 공급자 솔루션](custom-idp-toolkit.md)
+ [AWS Lambda 를 사용하여 자격 증명 공급자 통합](custom-lambda-idp.md)
+ [Amazon API Gateway를 ID 제공자 통합에 사용](authentication-api-gateway.md)
+ [여러 인증 방법 사용](custom-idp-mfa.md)
+ [사용자 지정 자격 증명 공급자에 대한 IPv6 지원](custom-idp-ipv6.md)

# 사용자 지정 자격 증명 공급자 솔루션
<a name="custom-idp-toolkit"></a>

 AWS Transfer Family 사용자 지정 ID 제공업체 솔루션은 기업이 서비스를 구현할 때 가지고 있는 많은 일반적인 인증 및 권한 부여 사용 사례를 해결하는 모듈식 사용자 지정 ID 제공업체 솔루션입니다. 이 솔루션은 세분화된 사용자별 세션 구성으로 사용자 지정 자격 증명 공급자를 구현하기 위한 재사용 가능한 기반을 제공하고 인증 및 권한 부여 로직을 분리하여 다양한 사용 사례에 유연하고 easy-to-maintain 기반을 제공합니다.

 AWS Transfer Family 사용자 지정 ID 제공업체 솔루션을 사용하면 일반적인 엔터프라이즈 인증 및 권한 부여 사용 사례를 해결할 수 있습니다. 이 모듈식 솔루션은 다음을 제공합니다.
+ 사용자 지정 자격 증명 공급자를 구현하기 위한 재사용 가능한 기반 
+ 세분화된 사용자별 세션 구성 
+ 별도의 인증 및 권한 부여 로직 

## 사용자 지정 자격 증명 도구 키트의 구현 세부 정보
<a name="idp-toolkit-implementation-details"></a>

이 솔루션은 다양한 사용 사례를 위한 유연하고 유지 관리 가능한 기반을 제공합니다. 시작하려면 [https://github.com/aws-samples/toolkit-for-aws-transfer-family](https://github.com/aws-samples/toolkit-for-aws-transfer-family) 도구 키트를 검토한 다음 [시작하기](https://github.com/aws-samples/toolkit-for-aws-transfer-family/tree/main/solutions/custom-idp#getting-started) 섹션의 배포 지침을 따르세요.

![\[GitHub에서 사용할 수 있는 사용자 지정 자격 증명 공급자 툴킷의 아키텍처 다이어그램입니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/custom-idp-solution-high-level-architecture.png)


**참고**  
이전에 사용자 지정 자격 증명 공급자 템플릿과 예제를 사용한 적이 있다면이 솔루션을 대신 채택하는 것이 좋습니다. 앞으로 공급자별 모듈은이 솔루션을 표준화합니다. 이 솔루션에는 지속적인 유지 관리 및 기능 개선 사항이 적용됩니다.

이 솔루션에는 로깅을 포함한 세부 정보와 `HomeDirectoryDetails` 파라미터와 AWS Transfer Family같이 필요한 추가 세션 메타데이터를 저장할 위치를 설명하는 사용자 지정 공급자를 구현하기 위한 표준 패턴이 포함되어 있습니다. 이 솔루션은 세분화된 사용자별 세션 구성으로 사용자 지정 ID 제공업체를 구현하기 위한 재사용 가능한 기반을 제공하고, 인증을 완료하고 세션 설정을 설정하기 위해 Transfer Family에 반환되는 구성을 빌드하는 재사용 가능한 로직에서 ID 제공업체 인증 로직을 분리합니다.

이 솔루션의 코드 및 지원 리소스는 [https://github.com/aws-samples/toolkit-for-aws-transfer-family](https://github.com/aws-samples/toolkit-for-aws-transfer-family) 확인할 수 있습니다.

도구 키트에는 다음 기능이 포함되어 있습니다.
+ 필요한 리소스를 프로비저닝하는 [AWS Serverless Application Model](https://aws.amazon.com/serverless/sam) 템플릿입니다. 선택적으로 블로그 게시물 웹 애플리케이션 방화벽 및 Amazon API Gateway로 보안에 설명된 AWS WAF대로 통합하도록 Amazon API Gateway를 배포하고 구성합니다. [AWS Transfer FamilyAWS Amazon API Gateway](https://aws.amazon.com/blogs/storage/securing-aws-transfer-family-with-aws-web-application-firewall-and-amazon-api-gateway/)
+ , 및 `HomeDirectoryDetails``Role`와 같은 사용자 세션 설정을 포함하여 자격 증명 공급자에 대한 구성 메타데이터를 저장하는 [Amazon DynamoDB](https://aws.amazon.com/dynamodb) 스키마입니다`Policy`.
+ 향후 솔루션에 새 자격 증명 공급자를 모듈로 추가할 수 있는 모듈식 접근 방식입니다.
+ 속성 검색: 선택적으로 AD, LDAP, Okta 등 지원되는 자격 증명 공급자로부터 IAM 역할 및 POSIX 프로파일(UID 및 GID) 속성을 검색합니다.
+ 솔루션의 동일한 배포를 사용하여 단일 Transfer Family 서버와 여러 Transfer Family 서버에 연결된 여러 자격 증명 공급자를 지원합니다.
+ 사용자 또는 자격 증명 공급자별로 선택적으로 구성할 수 있는 IP 허용 목록과 같은 기본 제공 IP 허용 목록 검사입니다.
+ 문제 해결을 돕기 위해 구성 가능한 로그 수준 및 추적 지원이 포함된 세부 로깅.

사용자 지정 ID 제공업체 솔루션을 배포하기 전에 다음 AWS 리소스가 있어야 합니다.
+ NAT 게이트웨이 또는 DynamoDB 게이트웨이 엔드포인트를 통해 인터넷에 연결된 프라이빗 서브넷이 있는 Amazon Virtual Private Cloud(VPC)입니다.
+ 다음 작업을 수행할 수 있는 적절한 IAM 권한:
  + `custom-idp.yaml` CloudFormation 템플릿을 배포합니다.
  +  AWS CodePipeline 프로젝트 생성
  +  AWS CodeBuild 프로젝트 생성
  + IAM 역할 및 정책 생성

**중요**  
대상 Transfer Family 서버 AWS 리전 가 포함된 동일한 AWS 계정 및에 솔루션을 배포해야 합니다.

## 지원되는 ID 제공업체
<a name="custom-supported-idp"></a>

다음 목록에는 사용자 지정 자격 증명 공급자 솔루션에 지원되는 자격 증명 공급자에 대한 세부 정보가 포함되어 있습니다.


| 제공업체 | 암호 흐름 | 퍼블릭 키 흐름 | 멀티 팩터 | 속성 검색 | 세부 정보 | 
| --- | --- | --- | --- | --- | --- | 
| Active Directory 및 LDAP | 예 | 예 | 아니요 | 예 | 사용자 확인은 퍼블릭 키 인증 흐름의 일부로 수행할 수 있습니다. | 
| Argon2(로컬 해시) | 예 | 아니요 | 아니요 | 아니요 | Argon2 해시는 '로컬' 암호 기반 인증 사용 사례에 대한 사용자 레코드에 저장됩니다. | 
| Amazon Cognito | 예 | 아니요 | 예\$1 | 아니요 | 시간 기반 일회용 암호(TOTP) 기반 다중 인증만 해당됩니다. \$1SMS 기반 MFA는 지원되지 않습니다. | 
| Entra ID(이전 Azure AD) | 예 | 아니요 | 아니요 | 아니요 |  | 
| Okta | 예 | 예 | 예\$1 | 예 | TOTP 기반 MFA만 해당됩니다. | 
| 퍼블릭 키 | 아니요 | 예 | 아니요 | 아니요 | 퍼블릭 키는 DynamoDB의 사용자 레코드에 저장됩니다. | 
| Secrets Manager  | 예 | 예 | 아니요 | 아니요 |  | 

# AWS Lambda 를 사용하여 자격 증명 공급자 통합
<a name="custom-lambda-idp"></a>

이 주제에서는 사용자 지정 자격 증명 공급자에 연결하는 AWS Lambda 함수를 생성하는 방법을 설명합니다. Okta, Secrets Manager, OneLogin과 같은 사용자 지정 ID 공급자를 사용하거나 권한 부여 및 인증 로직이 포함된 사용자 지정 데이터 저장소를 사용할 수 있습니다.

대부분의 사용 사례에서 사용자 지정 자격 증명 공급자를 구성하는 권장 방법은를 사용하는 것입니다[사용자 지정 자격 증명 공급자 솔루션](custom-idp-toolkit.md).

**참고**  
Lambda를 ID 공급자로 사용하는 Transfer Family 서버를 생성하기 전에 함수를 생성해야 합니다. Lambda 함수의 예는 [예 Lambda 함수](#lambda-auth-examples)를 참조하세요. 또는 [Lambda 함수 템플릿](#lambda-idp-templates) 중 하나를 사용하는 CloudFormation 스택을 배포할 수 있습니다. 또한 Lambda 함수가 Transfer Family를 신뢰하는 리소스 기반 정책을 사용하는지 확인하세요. 정책 예제는 [Lambda 리소스 기반 정책](#lambda-resource-policy)을 참조하세요.

1. [AWS Transfer Family 콘솔](https://console.aws.amazon.com/transfer/)을 엽니다.

1. **서버 생성**을 선택하여 **서버 생성** 페이지를 엽니다. **ID 제공자 선택**를 위해 다음 스크린샷과 같이 **사용자 지정 ID 공급자**를 선택합니다.  
![\[맞춤 ID 공급자가 선택된 ID 공급자 선택콘솔 섹션. 또한 사용자가 자신의 암호 또는 키를 사용하여 인증할 수 있는 기본값이 선택되어 있습니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/custom-lambda-console.png)
**참고**  
인증 방법은 SFTP를 Transfer Family 서버의 프로토콜 중 하나로 활성화한 경우에만 사용할 수 있습니다.

1. 기본값인 자격 **증명 공급자를 연결하는 AWS Lambda 데 사용**이 선택되어 있는지 확인합니다.

1. **AWS Lambda 함수**에서 Lambda 함수의 이름을 선택합니다.

1. 나머지 상자를 채운 다음 **서버 만들기**를 선택합니다. 서버를 만들기 위한 나머지 단계에 대한 자세한 내용은 [SFTP, FTPS 또는 FTP 서버 엔드포인트 구성](tf-server-endpoint.md)을 참조하세요.

## Lambda 리소스 기반 정책
<a name="lambda-resource-policy"></a>

Transfer Family 서버 및 Lambda ARN을 참조하는 정책이 있어야 합니다. 예를 들어 ID 공급자에 연결되는 Lambda 함수와 함께 다음 정책을 사용할 수 있습니다. 정책은 JSON을 문자열로 이스케이프합니다.

****  

```
"Policy":
"{\"Version\":\"2012-10-17\",
\"Id\":\"default\",
\"Statement\":[
  {\"Sid\":\"AllowTransferInvocation\",
  \"Effect\":\"Allow\",
  \"Principal\":{\"Service\":\"transfer.amazonaws.com\"},
  \"Action\":\"lambda:InvokeFunction\",
  \"Resource\":\"arn:aws:lambda:region:123456789012:function:my-lambda-auth-function\",
  \"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:transfer:region:123456789012:server/server-id\"}}}
]}"
```

**참고**  
상기 예 정책에서 각 *사용자 입력 자리 표시자*를 자신의 정보로 바꿉니다.

## 이벤트 메시지 구조
<a name="event-message-structure"></a>

사용자 지정 IDP에 대해 권한 부여자 Lambda 함수로 전송되는 SFTP 서버의 이벤트 메시지 구조는 다음과 같습니다.

```
{
    "username": "value",
    "password": "value",
    "protocol": "SFTP",
    "serverId": "s-abcd123456",
    "sourceIp": "192.168.0.100"
}
```

서버로 전송되는 로그인 자격 증명의 값인 `username`과 `password`의 위치는 어디입니까?

예를 들어, 다음 명령을 입력해서 연결합니다.

```
sftp bobusa@server_hostname
```

새 암호를 두 번 입력하라는 메시지가 나타납니다.

```
Enter password:
    mysecretpassword
```

Lambda 함수 내에서 전달된 이벤트를 인쇄하여 Lambda 함수에서 이를 확인할 수 있습니다. 그것은 다음 텍스트 블록과 비슷하게 보여야 합니다.

```
{
    "username": "bobusa",
    "password": "mysecretpassword",
    "protocol": "SFTP",
    "serverId": "s-abcd123456",
    "sourceIp": "192.168.0.100"
}
```

이벤트 구조는 FTP와 FTPS와 비슷한데, 유일한 차이점은 SFTP라기 보다 오히려 아닌 해당 값이 `protocol`파라미터에 사용된다는 것입니다.

## 인증을 위한 Lambda 함수
<a name="authentication-lambda-examples"></a>

다양한 인증 전략을 구현하려면 Lambda 함수를 편집하세요. 애플리케이션의 요구 사항을 충족하는 데 도움이 되도록 CloudFormation 스택을 배포할 수 있습니다. 자세한 내용은 [개발자 안내서](https://docs.aws.amazon.com/lambda/latest/dg/lambda-nodejs.html)나 [AWS Lambda Node.js로 Lambda 함수 구축](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)을 참조하세요.

**Topics**
+ [유효 Lambda 값](#lambda-valid-values)
+ [예 Lambda 함수](#lambda-auth-examples)
+ [구성 테스트](#authentication-test-configuration)
+ [Lambda 함수 템플릿](#lambda-idp-templates)

### 유효 Lambda 값
<a name="lambda-valid-values"></a>

다음 표에는 사용자 지정 ID 공급자에 사용되는 Lambda 함수에 대해 Transfer Family가 허용하는 값에 대한 세부 정보가 설명되어 있습니다.


|  값  |  설명  |  필수  | 
| --- | --- | --- | 
|  `Role`  |  Amazon S3 버킷 또는 Amazon EFS 파일 시스템에 대한 사용자 액세스를 제어하는 IAM 역할의 Amazon 리소스 이름(ARN)을 지정합니다. 이 역할에 연결된 정책은 Amazon S3 버킷 또는 Amazon EFS 파일 시스템에 대한 파일 송수신 시 사용자에게 제공할 액세스의 수준을 결정합니다. 또한 IAM 역할에는 사용자의 전송 요청을 처리할 때 서버가 해당 리소스에 액세스할 수 있도록 허용하는 신뢰 관계가 포함되어야 합니다. 신뢰 관계 설정에 대한 자세한 내용은 [신뢰 관계를 구축하기 위해](requirements-roles.md#establish-trust-transfer)을 참조하세요.   |  필수  | 
|  `PosixProfile`  |  Amazon EFS 파일 시스템에 대한 사용자의 액세스를 제어하는 사용자 ID(`Uid`), 그룹 ID(`Gid`) 및 보조 그룹 ID(`SecondaryGids`)를 포함한 전체 POSIX 자격 증명입니다. 파일 시스템의 파일 및 디렉터리에 설정된 POSIX 권한에 따라 Amazon EFS 파일 시스템에서 파일을 송수신할 때 사용자에게 제공되는 액세스 수준이 결정됩니다.  |  Amazon EFS 백업 스토리지에 필요  | 
|  `PublicKeys`  |  이 사용자에게 유효한 SSH 퍼블릭 키 값 목록. 목록이 비어 있으면 유효한 로그인이 아님을 의미합니다. 암호 인증 중에는 반환할 수 없습니다.  |  선택 사항  | 
|  `Policy`  |  여러 사용자에 대해 동일한 IAM 역할을 사용할 수 있도록 한 사용자에 대한 세션 정책입니다. 이 정책은 Amazon S3 버킷의 부분에 대한 사용자 액세스의 범위를 축소합니다. 사용자 지정 자격 증명 공급자와 함께 세션 정책을 사용하는 방법에 대한 자세한 내용은이 주제의 세션 정책 예제를 참조하세요.  |  선택 사항  | 
|  `HomeDirectoryType`  |  사용자가 서버에 로그인하는 경우 홈 디렉터리가 될 랜딩 디렉터리(폴더) 타입입니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/custom-lambda-idp.html)  |  선택 사항  | 
|  `HomeDirectoryDetails`  |  사용자에게 표시할 Amazon S3 또는 Amazon EFS 경로 및 키와 이러한 경로 및 키를 사용자에게 시각적으로 표시할 방법을 지정하는 논리적 디렉터리 매핑입니다. `Entry` 및 `Target` 쌍을 지정해야 합니다. 여기서 `Entry`는 경로가 표시되는 방식을 보여주고 `Target`는 실제 Amazon S3 경로입니다.  |   `HomeDirectoryType`이 `LOGICAL`의 값을 가진 경우 필요  | 
|  `HomeDirectory`  |  클라이언트를 사용하여 서버에 로그인하는 경우 랜딩 디렉터리(폴더)입니다. 형식은 스토리지 백엔드에 따라 다릅니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/custom-lambda-idp.html)  버킷 이름 또는 Amazon EFS 파일 시스템 ID가 경로에 포함되어야 합니다. 이 정보를 생략하면 파일 전송 중에 "파일을 찾을 수 없음" 오류가 발생합니다.   |  선택 사항  | 

**참고**  
`HomeDirectoryDetails`는 JSON 맵의 문자열 표현입니다. 이는 실제 JSON 맵 객체인 `PosixProfile`과 문자열로 구성된 JSON 배열인 `PublicKeys`과 대조적입니다. 언어별 세부 정보는 코드 예를 참조하세요.

**HomeDirectory 형식 요구 사항**  
`HomeDirectory` 파라미터를 사용할 때는 전체 경로 형식을 포함해야 합니다.  
**Amazon S3 스토리지의 경우:** 항상 버킷 이름을 형식으로 포함합니다. `/bucket-name/path` 
**Amazon EFS 스토리지의 경우:** 파일 시스템 ID를 항상 형식으로 포함 `/fs-12345/path`
"파일을 찾을 수 없음" 오류의 일반적인 원인은 `HomeDirectory` 경로에서 버킷 이름 또는 EFS 파일 시스템 ID를 생략하는 것입니다. 스토리지 식별자 `/` 없이 `HomeDirectory`로 설정하면 인증은 성공하지만 파일 작업은 실패합니다.

### 예 Lambda 함수
<a name="lambda-auth-examples"></a>

이 섹션에서는 NodeJS와 Python 모두에서 사용할 수 있는 Lambda 함수 몇 가지를 소개합니다.

**참고**  
이 예에서는 사용자, 역할, POSIX 프로필, 암호 및 홈 디렉토리 세부 정보가 모두 예시이므로 실제 값으로 바꿔야 합니다.

------
#### [ Logical home directory, NodeJS ]

다음 NodeJS 예 함수는 [논리적 홈 디렉터리](https://docs.aws.amazon.com/transfer/latest/userguide/logical-dir-mappings.html)가 있는 사용자에 대한 세부 정보를 제공합니다.

```
// GetUserConfig Lambda

exports.handler = (event, context, callback) => {
  console.log("Username:", event.username, "ServerId: ", event.serverId);

  var response;
  // Check if the username presented for authentication is correct. This doesn't check the value of the server ID, only that it is provided.
  if (event.serverId !== "" && event.username == 'example-user') {
    var homeDirectoryDetails = [
      {
        Entry: "/",
        Target: "/fs-faa1a123"
      }
    ];
    response = {
      Role: 'arn:aws:iam::123456789012:role/transfer-access-role', // The user is authenticated if and only if the Role field is not blank
      PosixProfile: {"Gid": 65534, "Uid": 65534}, // Required for EFS access, but not needed for S3
      HomeDirectoryDetails: JSON.stringify(homeDirectoryDetails),
      HomeDirectoryType: "LOGICAL",
    };

    // Check if password is provided
    if (!event.password) {
      // If no password provided, return the user's SSH public key
      response['PublicKeys'] = [ "ssh-rsa abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789" ];
    // Check if password is correct
    } else if (event.password !== 'Password1234') {
      // Return HTTP status 200 but with no role in the response to indicate authentication failure
      response = {};
    }
  } else {
    // Return HTTP status 200 but with no role in the response to indicate authentication failure
    response = {};
  }
  callback(null, response);
};
```

------
#### [ Path-based home directory, NodeJS ]

다음 NodeJS 예 함수는 경로 기반의 홈 디렉터리가 있는 사용자에 대한 세부 정보를 제공합니다.

```
// GetUserConfig Lambda

exports.handler = (event, context, callback) => {
  console.log("Username:", event.username, "ServerId: ", event.serverId);

  var response;
  // Check if the username presented for authentication is correct. This doesn't check the value of the server ID, only that it is provided.
  // There is also event.protocol (one of "FTP", "FTPS", "SFTP") and event.sourceIp (e.g., "127.0.0.1") to further restrict logins.
  if (event.serverId !== "" && event.username == 'example-user') {
    response = {
      Role: 'arn:aws:iam::123456789012:role/transfer-access-role', // The user is authenticated if and only if the Role field is not blank
      Policy: '', // Optional, JSON stringified blob to further restrict this user's permissions
      // HomeDirectory format depends on your storage backend:
      // For S3: '/bucket-name/user-home-directory' (e.g., '/my-transfer-bucket/users/john')
      // For EFS: '/fs-12345/user-home-directory' (e.g., '/fs-faa1a123/users/john')
      HomeDirectory: '/my-transfer-bucket/users/example-user' // S3 example - replace with your bucket name
      // HomeDirectory: '/fs-faa1a123/users/example-user' // EFS example - uncomment for EFS
    };
    
    // Check if password is provided
    if (!event.password) {
      // If no password provided, return the user's SSH public key
     response['PublicKeys'] = [ "ssh-rsa abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789" ];
    // Check if password is correct
    } else if (event.password !== 'Password1234') {
      // Return HTTP status 200 but with no role in the response to indicate authentication failure
      response = {};
    } 
  } else {
    // Return HTTP status 200 but with no role in the response to indicate authentication failure
    response = {};
  }
  callback(null, response);
};
```

------
#### [ Logical home directory, Python ]

다음 Python 예 함수는 [논리적 홈 디렉터리](https://docs.aws.amazon.com/transfer/latest/userguide/logical-dir-mappings.html)가 있는 사용자에 대한 세부 정보를 제공합니다.

```
# GetUserConfig Python Lambda with LOGICAL HomeDirectoryDetails
import json

def lambda_handler(event, context):
  print("Username: {}, ServerId: {}".format(event['username'], event['serverId']))

  response = {}

  # Check if the username presented for authentication is correct. This doesn't check the value of the server ID, only that it is provided.
  if event['serverId'] != '' and event['username'] == 'example-user':
    homeDirectoryDetails = [
      {
        'Entry': '/',
        'Target': '/fs-faa1a123'
      }
    ]
    response = {
      'Role': 'arn:aws:iam::123456789012:role/transfer-access-role', # The user will be authenticated if and only if the Role field is not blank
      'PosixProfile': {"Gid": 65534, "Uid": 65534}, # Required for EFS access, but not needed for S3
      'HomeDirectoryDetails': json.dumps(homeDirectoryDetails),
      'HomeDirectoryType': "LOGICAL"
    }

    # Check if password is provided
    if event.get('password', '') == '':
      # If no password provided, return the user's SSH public key
     response['PublicKeys'] = [ "ssh-rsa abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789" ]
    # Check if password is correct
    elif event['password'] != 'Password1234':
      # Return HTTP status 200 but with no role in the response to indicate authentication failure
      response = {}
  else:
    # Return HTTP status 200 but with no role in the response to indicate authentication failure
    response = {}

  return response
```

------
#### [ Path-based home directory, Python ]

다음 Python 예 함수는 경로 기반 홈 디렉터리가 있는 사용자에 대한 세부 정보를 제공합니다.

```
# GetUserConfig Python Lambda with PATH HomeDirectory

def lambda_handler(event, context):
  print("Username: {}, ServerId: {}".format(event['username'], event['serverId']))

  response = {}

  # Check if the username presented for authentication is correct. This doesn't check the value of the server ID, only that it is provided.
  # There is also event.protocol (one of "FTP", "FTPS", "SFTP") and event.sourceIp (e.g., "127.0.0.1") to further restrict logins.
  if event['serverId'] != '' and event['username'] == 'example-user':
    response = {
      'Role': 'arn:aws:iam::123456789012:role/transfer-access-role', # The user will be authenticated if and only if the Role field is not blank
      'Policy': '', #  Optional, JSON stringified blob to further restrict this user's permissions
      # HomeDirectory format depends on your storage backend:
      # For S3: '/bucket-name/user-home-directory' (e.g., '/my-transfer-bucket/users/john')
      # For EFS: '/fs-12345/user-home-directory' (e.g., '/fs-faa1a123/users/john')
      'HomeDirectory': '/my-transfer-bucket/users/example-user', # S3 example - replace with your bucket name
      # 'HomeDirectory': '/fs-faa1a123/users/example-user', # EFS example - uncomment for EFS
      'HomeDirectoryType': "PATH" # Not strictly required, defaults to PATH
    }
    
    # Check if password is provided
    if event.get('password', '') == '':
      # If no password provided, return the user's SSH public key
     response['PublicKeys'] = [ "ssh-rsa abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789" ]
    # Check if password is correct
    elif event['password'] != 'Password1234':
      # Return HTTP status 200 but with no role in the response to indicate authentication failure
      response = {}
  else:
    # Return HTTP status 200 but with no role in the response to indicate authentication failure
    response = {}

  return response
```

------

### 구성 테스트
<a name="authentication-test-configuration"></a>

사용자 지정 ID 공급자를 만든 후에는 구성을 테스트해야 합니다.

------
#### [ Console ]

**AWS Transfer Family 콘솔을 사용하여 구성을 테스트하려면**

1. [AWS Transfer Family 콘솔](https://console.aws.amazon.com/transfer/)을 엽니다.

1. **서버** 페이지에서 새 서버를 선택하고 **작업**을 선택한 다음 **테스트**를 선택합니다.

1.  CloudFormation 스택을 배포할 때 설정한 **사용자 이름** 및 **암호**에 텍스트를 입력합니다. 기본 옵션을 유지한 경우 사용자 이름은 `myuser` 이고 암호는 `MySuperSecretPassword`입니다.

1. **서버 프로토콜을** 선택하고 CloudFormation 스택을 배포할 때 설정한 경우 **소스 IP의 IP** 주소를 입력합니다.

------
#### [ CLI ]

**AWS CLI를 사용하여 구성을 테스트하려면**

1. [test-identity-provider](https://docs.aws.amazon.com/cli/latest/reference/transfer/test-identity-provider.html) 명령을 실행합니다. 다음 단계에서 설명하는 대로 `user input placeholder` 각각을 사용자 고유의 정보로 바꾸세요.

   ```
   aws transfer test-identity-provider --server-id s-1234abcd5678efgh --user-name myuser --user-password MySuperSecretPassword --server-protocol FTP --source-ip 127.0.0.1
   ```

1. 서버 ID를 입력합니다.

1.  CloudFormation 스택을 배포할 때 설정한 사용자 이름과 암호를 입력합니다. 기본 옵션을 유지한 경우 사용자 이름은 `myuser` 이고 암호는 `MySuperSecretPassword`입니다.

1.  CloudFormation 스택을 배포할 때 설정한 경우 서버 프로토콜과 소스 IP 주소를 입력합니다.

------

사용자 인증에 성공하면 테스트 결과 `StatusCode: 200` HTTP 응답, 빈 문자열 `Message: ""` (그렇지 않으면 실패 이유가 포함됨) 및 `Response` 필드가 반환됩니다.

**참고**  
 아래 응답 예에서 `Response` 필드는 '문자열화' (프로그램 내에서 사용할 수 있는 플랫 JSON 문자열로 변환) 된 JSON 객체이며, 사용자의 역할 및 권한에 대한 세부 정보를 포함합니다.

```
{
    "Response":"{\"Policy\":\"{\\\"Version\\\":\\\"2012-10-17\\\",\\\"Statement\\\":[{\\\"Sid\\\":\\\"ReadAndListAllBuckets\\\",\\\"Effect\\\":\\\"Allow\\\",\\\"Action\\\":[\\\"s3:ListAllMybuckets\\\",\\\"s3:GetBucketLocation\\\",\\\"s3:ListBucket\\\",\\\"s3:GetObjectVersion\\\",\\\"s3:GetObjectVersion\\\"],\\\"Resource\\\":\\\"*\\\"}]}\",\"Role\":\"arn:aws:iam::000000000000:role/MyUserS3AccessRole\",\"HomeDirectory\":\"/\"}",
    "StatusCode": 200,
    "Message": ""
}
```

### Lambda 함수 템플릿
<a name="lambda-idp-templates"></a>

인증에 Lambda 함수를 사용하는 CloudFormation 스택을 배포할 수 있습니다. 로그인 자격 증명을 사용하여 사용자를 인증하고 권한을 부여하는 여러 템플릿을 제공합니다. 이러한 템플릿 또는 AWS Lambda 코드를 수정하여 사용자 액세스를 추가로 사용자 지정할 수 있습니다.

**참고**  
템플릿에 FIPS 지원 보안 정책을 지정 CloudFormation 하여를 통해 FIPS 지원 AWS Transfer Family 서버를 생성할 수 있습니다. 사용 가능한 보안 정책은 [AWS Transfer Family 서버에 대한 보안 정책](security-policies.md)에 설명되어 있습니다.

**인증에 사용할 CloudFormation 스택을 생성하려면**

1. [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) CloudFormation 콘솔을 엽니다.

1. *AWS CloudFormation 사용 설명서*의 CloudFormation 스택 템플릿 [선택에서 기존 템플릿의 스택](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-using-console-create-stack-template.html) 배포 지침을 따릅니다.

1. 다음 템플릿 중 하나를 사용하여 Transfer Family의 인증에 사용할 Lambda 함수를 생성합니다.
   + [클래식 (Amazon Cognito) 스택 템플릿](https://s3.amazonaws.com/aws-transfer-resources/custom-idp-templates/aws-transfer-custom-idp-basic-lambda-cognito-s3.template.yml)

     에서 사용자 지정 자격 증명 공급자로 사용할를 생성하기 AWS Lambda 위한 기본 템플릿입니다 AWS Transfer Family. 암호 기반 인증을 위해 Amazon Cognito에 대해 인증하며, 퍼블릭 키 기반 인증을 사용하는 경우 Amazon S3 버킷에서 퍼블릭 키가 반환됩니다. 배포 후에는 Lambda 함수 코드를 수정하여 다른 작업을 수행할 수 있습니다.
   + [AWS Secrets Manager 스택 템플릿](https://s3.amazonaws.com/aws-transfer-resources/custom-idp-templates/aws-transfer-custom-idp-secrets-manager-lambda.template.yml)

     가 AWS Transfer Family 서버 AWS Lambda 와 함께 사용하여 Secrets Manager를 자격 증명 공급자로 통합하는 기본 템플릿입니다. 형식 AWS Secrets Manager 의에 있는 항목에 대해 인증합니다`aws/transfer/server-id/username`. 또한 암호에는 Transfer Family에 반환된 모든 사용자 속성에 대한 키-값 쌍이 들어 있어야 합니다. 배포 후에는 Lambda 함수 코드를 수정하여 다른 작업을 수행할 수 있습니다.
   + [Okta 스택 템플릿](https://s3.amazonaws.com/aws-transfer-resources/custom-idp-templates/aws-transfer-custom-idp-okta-lambda.template.yml):가 AWS Transfer Family 서버 AWS Lambda 와 함께 사용하여 Okta를 사용자 지정 자격 증명 공급자로 통합하는 기본 템플릿입니다.
   + [Okta-mfa 스택 템플릿](https://s3.amazonaws.com/aws-transfer-resources/custom-idp-templates/aws-transfer-custom-idp-okta-mfa-lambda.template.yml):가 AWS Transfer Family 서버와 AWS Lambda 함께 사용하여 Okta를 다중 인증과 통합하는 기본 템플릿으로, 사용자 지정 자격 증명 공급자입니다.
   + [ Azure Active Directory 템플릿](https://s3.amazonaws.com/aws-transfer-resources/custom-idp-templates/aws-transfer-custom-idp-basic-lambda-azure-ad.template.yml):이 스택에 대한 세부 정보는 블로그 게시물 [Authenticating to AWS Transfer Family with Azure Active Directory and AWS Lambda](https://aws.amazon.com/blogs/storage/authenticating-to-aws-transfer-family-with-azure-active-directory-and-aws-lambda/)에 설명되어 있습니다.

   스택을 배포한 후에는 CloudFormation 콘솔의 **출력** 탭에서 스택에 대한 세부 정보를 볼 수 있습니다.

   사용자 지정 ID 공급자를 Transfer Family 워크플로에 통합하는 가장 쉬운 방법은 이러한 스택 중 하나를 배포하는 것입니다.

# Amazon API Gateway를 ID 제공자 통합에 사용
<a name="authentication-api-gateway"></a>

이 주제에서는 AWS Lambda 함수를 사용하여 API Gateway 메서드를 지원하는 방법을 설명합니다. ID 제공업체를 통합하기 위해 RESTful API가 필요하거나를 사용하여 지리 차단 또는 속도 제한 요청에 대한 기능을 AWS WAF 활용하려는 경우이 옵션을 사용합니다.

대부분의 사용 사례에서 사용자 지정 자격 증명 공급자를 구성하는 권장 방법은를 사용하는 것입니다[사용자 지정 자격 증명 공급자 솔루션](custom-idp-toolkit.md).

**API Gateway를 사용하여 ID 공급자를 통합하는 경우의 제한**
+ 이 구성은 사용자 지정 도메인을 지원하지 않습니다.
+ 이 구성은 프라이빗 API Gateway URL을 지원하지 않습니다.

둘 중 하나가 필요한 경우, API Gateway 없이 Lambda를 ID 공급자로서 사용할 수 있습니다. 자세한 내용은 [AWS Lambda 를 사용하여 자격 증명 공급자 통합](custom-lambda-idp.md)를 참조하세요.

## API Gateway 메서드를 사용하여 인증
<a name="authentication-custom-ip"></a>

Transfer Family의 ID 공급자로 사용할 API Gateway 메서드를 생성할 수 있습니다. 이 접근 방식은 API를 생성하고 제공할 수 있는 매우 안전한 방법을 제공합니다. API Gateway를 사용하면 모든 수신 API 작업이 더 안전하게 전송되도록 HTTPS 엔드포인트를 생성할 수 있습니다. API Gateway 서비스에 대한 자세한 내용은 [API Gateway 개발자 안내서](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html)를 참조하세요.

API Gateway는 내부적으로를 AWS 사용하는 AWS Identity and Access Management (IAM)을 기반으로 동일한 인증을 `AWS_IAM`제공하는 라는 권한 부여 방법을 제공합니다. 로 `AWS_IAM` 인증을 활성화하면 API를 호출할 수 있는 명시적 권한을 가진 호출자만 해당 API의 API Gateway 메서드에 연결할 수 있습니다.

API Gateway 메서드를 Transfer Family의 사용자 지정 ID 공급자로 사용하려면 API Gateway 메서드에 IAM을 활성화해야 합니다. 이 프로세스의 일환으로 Transfer Family가 게이트웨이를 사용할 수 있는 권한을 IAM 역할에 제공합니다.

**참고**  
보안을 강화하기 위해 웹 애플리케이션 방화벽을 구성할 수 있습니다. AWS WAF 은(는) Amazon API Gateway에 전달되는 HTTP 및 HTTPS 요청을 모니터링할 수 있게 해주는 웹 애플리케이션 방화벽입니다. 자세한 내용은 [웹 애플리케이션 방화벽 추가](web-application-firewall.md)을 참조하세요.

**API Gateway 캐싱을 활성화하지 않음**  
Transfer Family의 사용자 지정 자격 증명 공급자로 API Gateway 메서드를 사용하는 경우 API Gateway 메서드에 대한 캐싱을 활성화하지 마십시오. 캐싱은 다음과 같은 이유로 인증 요청에 부적절하고 유효하지 않습니다.  
각 인증 요청은 고유하며 캐시된 응답이 아닌 라이브 응답이 필요합니다.
Transfer Family는 중복되거나 반복적인 요청을 API Gateway로 보내지 않으므로 캐싱은 이점을 제공하지 않습니다.
캐싱을 활성화하면 API Gateway가 일치하지 않는 데이터로 응답하여 인증 요청에 유효하지 않은 응답이 발생합니다.

**Transfer Family를 통한 사용자 지정 인증에 API Gateway 방법을 사용하려면**

1.  CloudFormation 스택을 생성합니다. 방법:
**참고**  
스택 템플릿이 BASE64-encoded 암호를 사용하도록 업데이트되었습니다. 자세한 내용은 섹션을 참조하세요[CloudFormation 템플릿 개선 사항](#base64-templates).

   1. [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) CloudFormation 콘솔을 엽니다.

   1. *AWS CloudFormation 사용 설명서*의 CloudFormation 스택 템플릿 [선택에서 기존 템플릿의 스택](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-using-console-create-stack-template.html) 배포 지침을 따릅니다.

   1. 다음 기본 템플릿 중 하나를 사용하여 Transfer Family에서 사용자 지정 ID 공급자로 사용할 AWS Lambda지원 API Gateway 메서드를 만들 수 있습니다.
      + [기본 스택 템플릿](https://s3.amazonaws.com/aws-transfer-resources/custom-idp-templates/aws-transfer-custom-idp-basic-apig.template.yml)

        기본적으로 API Gateway 메서드는 하드 코딩된 SSH(Secure Shell) 키 또는 암호를 사용하여 단일 서버의 단일 사용자를 인증하는 사용자 지정 자격 증명 공급자로 사용됩니다. 배포 후에는 Lambda 함수 코드를 수정하여 다른 작업을 수행할 수 있습니다.
      + [AWS Secrets Manager 스택 템플릿](https://s3.amazonaws.com/aws-transfer-resources/custom-idp-templates/aws-transfer-custom-idp-secrets-manager-apig.template.yml)

        기본적으로 API Gateway 메서드는 Secrets Manager에 있는 다음 형식의 `aws/transfer/server-id/username` 항목에 대해 인증합니다. 또한 암호에는 Transfer Family에 반환된 모든 사용자 속성에 대한 키-값 쌍이 들어 있어야 합니다. 배포 후에는 Lambda 함수 코드를 수정하여 다른 작업을 수행할 수 있습니다. 자세한 내용은 블로그 게시물 [AWS Transfer Family 사용 시 암호 인증 활성화를 참조하세요 AWS Secrets Manager](https://aws.amazon.com/blogs/storage/enable-password-authentication-for-aws-transfer-family-using-aws-secrets-manager-updated/).
      + [Okta 스택 템플릿](https://s3.amazonaws.com/aws-transfer-resources/custom-idp-templates/aws-transfer-custom-idp-okta-apig.template.yml)

        API Gateway 메서드는 Transfer Family의 사용자 지정 ID 공급자로서 Okta와 통합됩니다. 자세한 내용은 블로그 게시물 [Okta를 AWS Transfer Family를 사용한 ID 공급자로서 사용](https://aws.amazon.com/blogs/storage/using-okta-as-an-identity-provider-with-aws-transfer-for-sftp/)을 참조하세요.

   사용자 지정 ID 공급자를 Transfer Family 워크플로에 통합하는 가장 쉬운 방법은 이러한 스택 중 하나를 배포하는 것입니다. 각 스택은 Lambda 함수를 사용하여 API Gateway에 기반한 API 메서드를 지원합니다. 그런 다음 Transfer Family에서 API 메서드를 사용자 지정 ID 공급자로 사용할 수 있습니다. 기본적으로 Lambda 함수는 암호로 `myuser` 호출된 단일 사용자를 인증합니다.`MySuperSecretPassword` 배포 후에는보안 인증 정보를 편집하거나 Lambda 함수 코드를 업데이트하여 다른 작업을 수행할 수 있습니다.
**중요**  
기본 사용자 및 암호 보안 인증 정보를 편집하는 것이 좋습니다.

   스택을 배포한 후에는 CloudFormation 콘솔의 **출력** 탭에서 스택에 대한 세부 정보를 볼 수 있습니다. 이러한 세부 정보에는 스택의 Amazon 리소스 이름(ARN), 스택이 생성한 IAM 역할의 ARN, 새 게이트웨이의 URL이 포함됩니다.
**참고**  
사용자 지정 ID 공급자 옵션을 사용하여 사용자를 위한 암호 기반 인증을 활성화하고 API Gateway에서 제공하는 요청 및 응답 로깅을 활성화하는 경우, API Gateway는 사용자의 암호를 Amazon CloudWatch Logs에 기록합니다. 프로덕션 환경에서는 이 로그를 사용하지 않는 것이 좋습니다. 자세한 내용은 *API 게이트웨이 개발자 안내서*의 [Set up CloudWatch를 API 게이트웨이에 로그인 하도록 설정](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-logging.html)을 참조하세요.

1. 서버의 API Gateway 메서드 구성을 확인합니다. 방법:

   1. [https://console.aws.amazon.com/apigateway/](https://console.aws.amazon.com/apigateway/)에서 Amazon API Gateway 콘솔을 엽니다.

   1. 템플릿이 **생성한 사용자 지정 자격 증명 공급자 기본 템플릿 전송 API**를 선택합니다. CloudFormation 게이트웨이를 보려면 리전을 선택해야 할 수 있습니다.

   1. **리소스** 창에서 **GET**을 선택합니다. 다음 스크린샷은 올바름 방법 설정을 보여줍니다.  
![\[요청 경로 및 URL 쿼리 문자열에 대한 메서드 구성 파라미터를 보여주는 API 구성 세부 정보\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/apig-config-method-fields.png)

   이 지점에서 API Gateway 를 배포할 준비가 완료됩니다.

1. **작업** 및 **API 배포**를 선택합니다. **배포 단계에서** **prod**를 선택한 다음 **배**포를 선택합니다.

   API Gateway 메서드가 성공적으로 배포되면 다음 스크린샷과 같이 **스테이지** > **스테이지 세부 정보**에서 성능을 확인합니다.
**참고**  
화면 상단에 표시되는 **URL 호출** 주소를 복사합니다. 다음 단계에 필요할 수 있습니다.  
![\[호출 URL이 강조 표시된 스테이지 세부 정보입니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/apig-config-method-invoke.png)

1. [https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/) AWS Transfer Family 콘솔을 엽니다.

1. 스택을 생성할 때 Transfer Family가 생성되었어야 합니다. 그렇지 않은 경우 다음 단계를 사용하여 서버를 구성합니다.

   1. **서버 생성**을 선택하여 **서버 생성** 페이지를 엽니다. **ID 공급자 선택**에서 **사용자** 지정을 선택한 다음 **Amazon API Gateway를 선택하여 다음 스크린샷과 같이 ID 공급자에 연결합니다**.  
![\[사용자 지정 자격 증명 공급자가 선택되고 자격 증명 공급자에 연결하기 위해 API Gateway가 선택된 자격 증명 공급자 화면입니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/create-server-choose-idp-custom.png)

   1. **Amazon API Gateway URL 제공** 텍스트 상자에 이 절차의 3단계에서 생성한 API Gateway 엔드포인트의 **호출 URL** 주소를 붙여넣습니다.

   1. **역할**에서 CloudFormation 템플릿에 의해 생성된 IAM 역할을 선택합니다. 이 역할을 통해 Transfer Family는 API 게이트웨이 메서드를 간접 호출할 수 있습니다.

      호출 역할에는 1단계에서 생성한 CloudFormation 스택에 대해 선택한 스택 이름이 포함됩니다. 형식은 다음과 같습니다. `CloudFormation-stack-name-TransferIdentityProviderRole-ABC123DEF456GHI` 

   1. 나머지 상자를 채운 다음 **서버 만들기**를 선택합니다. 서버를 만들기 위한 나머지 단계에 대한 자세한 내용은 [SFTP, FTPS 또는 FTP 서버 엔드포인트 구성](tf-server-endpoint.md)을 참조하세요.

## API Gateway 메서드 구현
<a name="authentication-api-method"></a>

Transfer Family를 위한 사용자 지정 ID 공급자를 생성하려면 API Gateway 메서드에서 리소스 경로가 `/servers/serverId/users/username/config` 인 단일 메서드를 구현해야 합니다. `serverId`와 `username` 값은 RESTful 리소스 경로에서 얻습니다. 또한 다음 이미지에서 보여지듯이 **메서드 요청의** 같이 **URL 쿼리 문자열 파라미터**로서 `sourceIp` 및 `protocol`를 추가합니다.

![\[GET 메서드 세부 정보를 보여주는 API Gateway의 리소스 화면입니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/apig-config-method-request.png)


**참고**  
이 사용자 이름은 최소 3글자에서 최대 100자여야 합니다. 사용자 이름에는 a\$1z, A\$1Z, 0\$19, 밑줄 '\$1', 하이픈 '-', 마침표 '.' 및 at 기호 '@' 문자를 사용할 수 있습니다. 사용자 이름은 하이픈 '-', 마침표 '.' 또는 기호 '@'로 시작할 수 없습니다.

Transfer Family가 사용자를 대신해 암호 인증을 시도하면, 서비스는 `Password:` 헤더 필드를 공급합니다. `Password:` 헤더가 없는 경우, Transfer Family는 퍼블릭 키 인증을 시도하여 사용자를 인증합니다.

ID 공급자를 사용하여 최종 사용자를 인증하고 권한을 부여하는 경우 자격 증명을 검증하는 것 외에도 최종 사용자가 사용하는 클라이언트의 IP 주소를 기반으로 액세스 요청을 허용하거나 거부할 수 있습니다. 이 기능을 사용하면 S3 버킷 또는 Amazon EFS 파일 시스템에 저장된 데이터가 지원되는 프로토콜을 통해 신뢰할 수 있는 것으로 지정한 IP 주소에서만 액세스할 수 있습니다. 이 기능을 활성화하려면 `sourceIp`를 쿼리 문자열에 포함해야 합니다.

서버에 여러 프로토콜을 사용하도록 설정한 상태에서 여러 프로토콜에서 동일한 사용자 이름을 사용하여 액세스를 제공하려는 경우 ID 공급자에 각 프로토콜별 자격 증명이 설정되어 있으면 그렇게 할 수 있습니다. 이 기능을 활성화하려면 RESTful 리소스 경로에 `protocol` 값을 포함해야 합니다.

API Gateway 메서드는 항상 HTTP 상태 코드를 반환해야 `200` 합니다. 모든 다른 HTTP 상태 코드는 API 액세스하는데 오류를 나타냅니다.

**Amazon S3 응답 예**  
예 응답 본문은 Amazon S3용 다음 형식의 JSON 문서입니다.

```
{
 "Role": "IAM role with configured S3 permissions",
 "PublicKeys": [
     "ssh-rsa public-key1",
     "ssh-rsa public-key2"
  ],
 "Policy": "STS Assume role session policy",
 "HomeDirectory": "/amzn-s3-demo-bucket/path/to/home/directory"
}
```

**참고**  
 정책은 JSON을 문자열로 이스케이프합니다. 예제:   

****  

```
"Policy":
"{
  \"Version\": \"2012-10-17\",
  \"Statement\":
     [
     {\"Condition\":
        {\"StringLike\":
            {\"s3:prefix\":
               [\"user/*\", \"user/\"]}},
     \"Resource\": \"arn:aws:s3:::amzn-s3-demo-bucket\",
     \"Action\": \"s3:ListBucket\",
     \"Effect\": \"Allow\",
     \"Sid\": \"ListHomeDir\"},
     {\"Resource\": \"arn:aws:s3:::*\",
        \"Action\": [\"s3:PutObject\",
        \"s3:GetObject\",
        \"s3:DeleteObjectVersion\",
        \"s3:DeleteObject\",
        \"s3:GetObjectVersion\",
        \"s3:GetObjectACL\",
        \"s3:PutObjectACL\"],
     \"Effect\": \"Allow\",
     \"Sid\": \"HomeDirObjectAccess\"}]
}"
```

다음 예 응답은 사용자의 홈 디렉터리 타입이 논리적임을 보여줍니다.

```
{
   "Role": "arn:aws:iam::123456789012:role/transfer-access-role-s3",
   "HomeDirectoryType":"LOGICAL",
   "HomeDirectoryDetails":"[{\"Entry\":\"/\",\"Target\":\"/amzn-s3-demo-bucket1\"}]",
   "PublicKeys":[""]
}
```

**Amazon EFS 예 응답**  
예 응답 본문은 Amazon EFS용 다음 형식의 JSON 문서입니다.

```
{
 "Role": "IAM role with configured EFS permissions",
 "PublicKeys": [
     "ssh-rsa public-key1",
     "ssh-rsa public-key2"
  ],
 "PosixProfile": {
   "Uid": "POSIX user ID",
   "Gid": "POSIX group ID",
   "SecondaryGids": [Optional list of secondary Group IDs],
 },
 "HomeDirectory": "/fs-id/path/to/home/directory"
}
```

`Role` 필드는 인증에 성공했음을 나타냅니다. 암호 인증을 할 때(`Password:`헤더를 제공할 때), SSH 퍼블릭 키를 제공할 필요가 없습니다. 사용자를 인증할 수 없는 경우(예: 암호가 잘못된 경우) 메서드는 `Role` 설정되지 않은 응답을 반환해야 합니다. 이러한 응답의 예로는 빈 JSON 객체를 들 수 있습니다.

 다음 예 응답은 사용자가 논리적인 홈 디렉터리 타입을 가졌다는 것을 보여줍니다.

```
{
    "Role": "arn:aws:iam::123456789012:role/transfer-access-role-efs",
    "HomeDirectoryType": "LOGICAL",
    "HomeDirectoryDetails":"[{\"Entry\":\"/\",\"Target\":\"/faa1a123\"}]",
    "PublicKeys":[""],
    "PosixProfile":{"Uid":65534,"Gid":65534}
}
```

Lambda 함수에 JSON 형식으로 사용자 정책을 포함할 수 있습니다. Transfer Family의 사용자 정책 구성에 대한 자세한 내용은 단원을 참조하세요[액세스 통제 관리](users-policies.md).

## 기본 Lambda 함수
<a name="authentication-lambda-examples-default"></a>

다양한 인증 전략을 구현하려면, 사용자의 게이트웨이 사용하는 Lambda 함수를 편집하세요. 애플리케이션의 요구 사항을 충족하는 데 도움이 되려면 Node.js에서 다음 예 Lambda 함수를 사용할 수 있습니다. 자세한 내용은 [개발자 안내서](https://docs.aws.amazon.com/lambda/latest/dg/lambda-nodejs.html)나 [AWS Lambda Node.js로 Lambda 함수 구축](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)을 참조하세요.

다음 예 Lambda 함수는 사용자 이름, 암호 (암호 인증을 수행하는 경우), 서버 ID, 프로토콜 및 클라이언트 IP 주소를 가져옵니다. 이러한 입력을 조합하여 ID 공급자를 조회하고 로그인을 허용할지 여부를 결정할 수 있습니다.

**참고**  
서버에 여러 프로토콜을 사용하도록 설정한 상태에서 여러 프로토콜에서 동일한 사용자 이름을 사용하여 액세스를 제공하려는 경우 ID 공급자에 각 프로토콜별 보안 인증이 설정되어 있으면 그렇게 할 수 있습니다.  
FTP (파일 전송 프로토콜)의 경우, Secure Shell(SSH) SFTP (파일 전송 프로토콜) 및 SSL을 통한 파일 전송 프로토콜 (FTPS)의 분리된 보아 인증을 유지하는 것이 좋습니다. SFTP 및 FTPS와 달리 FTP는 자격 증명을 일반 텍스트로 전송하므로 FTP에 대해 별도의 보안 인증을 유지하는 것이 좋습니다. FTP 자격 증명을 SFTP 또는 FTPS에서 분리하면 FTP 자격 증명이 공유되거나 노출되더라도 SFTP 또는 FTPS를 사용하는 워크로드의 보안을 유지할 수 있습니다.

이 예 함수는 퍼블릭 키 인증을 수행하는 경우 퍼블릭 키와 함께 역할 및 논리적 홈 디렉터리 세부 정보를 반환합니다.

서비스 관리 사용자를 생성할 때는 해당 사용자의 홈 디렉터리를 논리적 또는 물리적 디렉터리로 설정합니다. 마찬가지로 원하는 사용자의 물리적 또는 논리적 디렉터리 구조를 전달하려면 Lambda 함수 결과가 필요합니다. 설정하는 파라미터는 [https://docs.aws.amazon.com//transfer/latest/APIReference/API_CreateUser.html#TransferFamily-CreateUser-request-HomeDirectoryType](https://docs.aws.amazon.com//transfer/latest/APIReference/API_CreateUser.html#TransferFamily-CreateUser-request-HomeDirectoryType)필드 값에 따라 달라집니다.
+ `HomeDirectoryType`을 `PATH`로 설정 — `HomeDirectory` 필드는 사용자에게 표시되는 절대 Amazon S3 버킷 접두사 또는 Amazon EFS 절대 경로여야 합니다.
+ `HomeDirectoryType`을 `LOGICAL`로 설정 — `HomeDirectory` 필드를 설정하지 *마세요*. 대신 서비스 관리 사용자를 위한 [https://docs.aws.amazon.com//transfer/latest/APIReference/API_CreateUser.html#TransferFamily-CreateUser-request-HomeDirectoryMappings](https://docs.aws.amazon.com//transfer/latest/APIReference/API_CreateUser.html#TransferFamily-CreateUser-request-HomeDirectoryMappings)매개 변수에 설명된 값과 유사하게 원하는 항목/대상 매핑을 제공하는 `HomeDirectoryDetails` 필드를 설정합니다.

예 함수는 [예 Lambda 함수](custom-lambda-idp.md#lambda-auth-examples)에 나열되어 있습니다. 

## 와 함께 사용할 Lambda 함수 AWS Secrets Manager
<a name="authentication-lambda-examples-secrets-mgr"></a>

를 자격 증명 공급자 AWS Secrets Manager 로 사용하려면 샘플 CloudFormation 템플릿에서 Lambda 함수로 작업할 수 있습니다. Lambda 함수는 사용자 자격 증명으로 Secrets Manager 서비스를 쿼리하고, 성공하면 지정된 시크릿을 반환합니다. Secrets Manager 사용에 대한 자세한 내용은 [AWS Secrets Manager 사용 설명서](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)를 참조하세요.

이 Lambda 함수를 사용하는 샘플 CloudFormation 템플릿을 다운로드하려면 [에서 제공하는 Amazon S3 버킷 AWS Transfer Family](https://s3.amazonaws.com/aws-transfer-resources/custom-idp-templates/aws-transfer-custom-idp-secrets-manager-apig.template.yml)으로 이동합니다.

## CloudFormation 템플릿 개선 사항
<a name="base64-templates"></a>

API Gateway 인터페이스가 게시된 CloudFormation 템플릿을 개선했습니다. 템플릿은 이제 API Gateway에서 BASE64-encoded 암호를 사용합니다. 기존 배포는 이러한 개선 사항 없이 계속 작동하지만 기본 US-ASCII 문자 집합을 벗어나는 문자가 있는 암호는 허용하지 않습니다.

이 기능을 활성화하는 템플릿의 변경 사항은 다음과 같습니다.
+ `GetUserConfigRequest AWS::ApiGateway::Method` 리소스에이 `RequestTemplates` 코드가 있어야 합니다(기울임꼴 줄은 업데이트된 줄임).

  ```
  RequestTemplates:
     application/json: |
     {
        "username": "$util.urlDecode($input.params('username'))",
        "password": "$util.escapeJavaScript($util.base64Decode($input.params('PasswordBase64'))).replaceAll("\\'","'")",
        "protocol": "$input.params('protocol')",
        "serverId": "$input.params('serverId')",
        "sourceIp": "$input.params('sourceIp')"
  }
  ```
+ `PasswordBase64` 헤더를 사용하려면 `GetUserConfig` 리소스`RequestParameters`의가 변경되어야 합니다(기울임꼴 줄은 업데이트된 줄임).

  ```
  RequestParameters:
     method.request.header.PasswordBase64: false
     method.request.querystring.protocol: false
     method.request.querystring.sourceIp: false
  ```

**스택의 템플릿이 최신인지 확인하려면**

1. [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) CloudFormation 콘솔을 엽니다.

1. 스택 목록에서 스택을 선택합니다.

1. 세부 정보 패널에서 **템플릿** 탭을 선택합니다.

1. 다음을 찾습니다.
   + 를 검색`RequestTemplates`하고 다음 줄이 있는지 확인합니다.

     ```
     "password": "$util.escapeJavaScript($util.base64Decode($input.params('PasswordBase64'))).replaceAll("\\'","'")",
     ```
   + 를 검색`RequestParameters`하고 다음 줄이 있는지 확인합니다.

     ```
     method.request.header.PasswordBase64: false
     ```

업데이트된 줄이 표시되지 않으면 스택을 편집합니다. CloudFormation 스택을 업데이트하는 방법에 대한 자세한 내용은 *AWS CloudFormation, 사용 설명서*의 [스택 템플릿 수정](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-get-template.html)을 참조하세요.

# 여러 인증 방법 사용
<a name="custom-idp-mfa"></a>

Transfer Family 서버는 여러 인증 방법을 사용할 때 AND 로직을 제어합니다. Transfer Family는 이를 사용자 지정 자격 증명 공급자에 대한 두 개의 개별 요청으로 취급하지만 그 효과가 결합됩니다.

인증을 완료하려면 두 요청 모두 올바른 응답으로 성공적으로 반환되어야 합니다. Transfer Family는 두 개의 응답을 완료해야 합니다. 즉, Amazon EFS를 스토리지에 사용하는 경우 필요한 모든 요소(역할, 홈 디렉터리, 정책 및 POSIX 프로필)가 포함되어 있습니다. 또한 Transfer Family는 암호 응답에 퍼블릭 키를 포함해서는 안 됩니다.

퍼블릭 키 요청은 자격 증명 공급자와 별도의 응답이 있어야 합니다. **암호 OR 키** 또는 **암호 AND 키를** 사용할 때는이 동작이 변경되지 않습니다.

SSH/SFTP 프로토콜은 먼저 퍼블릭 키 인증을 통해 소프트웨어 클라이언트에 챌린지를 수행한 다음 암호 인증을 요청합니다. 이 작업을 수행하려면 사용자가 인증을 완료하기 전에 두 작업이 모두 성공해야 합니다.

사용자 지정 자격 증명 공급자 옵션의 경우 인증 방법에 대해 다음 옵션 중 하나를 지정할 수 있습니다.
+ **암호 또는 키** - 사용자는 암호 또는 키로 인증할 수 있습니다. 이것이 기본값입니다.
+ **암호만** - 사용자가 연결할 암호를 제공해야 합니다.
+ **키만** 해당 - 사용자가 연결할 프라이빗 키를 제공해야 합니다.
+ **암호 및 키** - 사용자는 연결할 프라이빗 키와 암호를 모두 제공해야 합니다. 서버가 먼저 키를 확인한 다음 키가 유효하면 암호를 입력하라는 메시지가 표시됩니다. 제공된 프라이빗 키가 저장된 퍼블릭 키와 일치하지 않는 경우 인증이 실패합니다.

# 사용자 지정 자격 증명 공급자에 대한 IPv6 지원
<a name="custom-idp-ipv6"></a>

AWS Transfer Family 사용자 지정 자격 증명 공급자는 IPv6 연결을 완벽하게 지원합니다. 사용자 지정 자격 증명 공급자를 구현할 때 Lambda 함수는 추가 구성 없이 IPv4 및 IPv6 클라이언트 모두에서 인증 요청을 수신하고 처리할 수 있습니다. Lambda 함수는 요청`sourceIp`의 필드에서 클라이언트의 IP 주소를 수신하며, IPv4 주소(예: `203.0.113.42`) 또는 IPv6 주소(예: )일 수 있습니다`2001:db8:85a3:8d3:1319:8a2e:370:7348`. 사용자 지정 ID 제공업체 구현은 두 주소 형식을 모두 적절하게 처리해야 합니다.

**중요**  
사용자 지정 자격 증명 공급자가 IP 기반 검증 또는 로깅을 수행하는 경우 구현이 IPv6 주소 형식을 올바르게 처리하는지 확인합니다. IPv6 주소는 IPv4 주소보다 길며 다른 표기법 형식을 사용합니다.

**참고**  
사용자 지정 자격 증명 공급자에서 IPv6 주소를 처리할 때는 간단한 문자열 비교 대신 적절한 IPv6 주소 구문 분석 함수를 사용해야 합니다. IPv6 주소는 다양한 정식 형식(예: `fd00:b600::ec2` 또는 `fd00:b600:0:0:0:0:0:ec2`)으로 표현할 수 있습니다. 구현 언어에서 적절한 IPv6 주소 라이브러리 또는 함수를 사용하여 IPv6 주소를 올바르게 검증하고 비교합니다.

**Example 사용자 지정 자격 증명 공급자에서 IPv4 및 IPv6 주소 모두 처리**  

```
def lambda_handler(event, context):
    # Extract the source IP address from the request
    source_ip = event.get('sourceIp', '')
    
    # Log the client IP address (works for both IPv4 and IPv6)
    print(f"Authentication request from: {source_ip}")
    
    # Example of IP-based validation that works with both IPv4 and IPv6
    if is_ip_allowed(source_ip):
        # Continue with authentication
        # ...
    else:
        # Reject the authentication request
        return {
            "Role": "",
            "HomeDirectory": "",
            "Status": "DENIED"
        }
```

사용자 지정 자격 증명 공급자 구현에 대한 자세한 내용은 섹션을 참조하세요[AWS Lambda 를 사용하여 자격 증명 공급자 통합](custom-lambda-idp.md).

# Microsoft Active Directory용 AWS Directory Service 사용
<a name="directory-services-users"></a>

 AWS Transfer Family 를 사용하여를 사용하여 파일 전송 최종 사용자를 인증할 수 있습니다 AWS Directory Service for Microsoft Active Directory. 최종 사용자의 자격 증명을 변경하거나 사용자 지정 권한 부여자를 사용하지 않고도 Active Directory 인증을 사용하는 파일 전송 워크플로를 원활하게 마이그레이션할 수 있습니다.

를 사용하면 Amazon Simple Storage Service(Amazon S3 EFS)에 저장된 데이터에 대해 SFTP, FTPS 및 FTP를 통해 Directory Service 사용자 및 그룹에 액세스 권한을 안전하게 제공할 AWS Managed Microsoft AD수 있습니다. Amazon Elastic File System Active Directory를 사용하여 사용자의 자격 증명을 저장하면 이제 이러한 사용자에 대한 파일 전송을 더 쉽게 활성화할 수 있습니다.

Active Directory 커넥터를 사용하여 온프레미스 환경 또는 AWS 클라우드 AWS Managed Microsoft AD 의에서 Active Directory 그룹에 대한 액세스를 제공할 수 있습니다. AWS 클라우드 또는 온프레미스 네트워크에서 Microsoft Windows 환경에 이미 구성된 사용자에게가 자격 증명에 사용하는 AWS Transfer Family 서버에 AWS Managed Microsoft AD 대한 액세스 권한을 부여할 수 있습니다. AWS 스토리지 블로그에는 Transfer Family: [Simplify Active Directory authentication with a custom identity provider for에서 Active Directory를 사용하기 위한 솔루션을 자세히 설명하는 게시물이 포함되어 있습니다 AWS Transfer Family](https://aws.amazon.com/blogs/storage/simplify-active-directory-authentication-with-a-custom-identity-provider-for-aws-transfer-family/).

**참고**  
AWS Transfer Family 는 Simple AD를 지원하지 않습니다.
Transfer Family는 리전 간 Active Directory 구성을 지원하지 않습니다. Transfer Family 서버와 동일한 리전에 있는 Active Directory 통합만 지원합니다.
Transfer Family는 AWS Managed Microsoft AD 또는 AD 커넥터를 사용하여 기존 RADIUS 기반 MFA 인프라에 대한 다중 인증(MFA)을 활성화하는 것을 지원하지 않습니다.
AWS Transfer Family 는 Managed Active Directory의 복제된 리전을 지원하지 않습니다.

를 사용하려면 다음 단계를 수행해야 AWS Managed Microsoft AD합니다.

1.  Directory Service 콘솔을 사용하여 하나 이상의 AWS Managed Microsoft AD 디렉터리를 생성합니다.

1. Transfer Family 콘솔을 사용하여를 자격 증명 공급자 AWS Managed Microsoft AD 로 사용하는 서버를 생성합니다.

1. Active AWS Directory 커넥터를 사용하여 디렉터리를 설정합니다.

1. 하나 이상의 Directory Service 그룹에서 액세스를 추가합니다.

1. 필수 사항은 아니지만 사용자 액세스를 테스트하고 확인하는 것이 좋습니다.

**Topics**
+ [사용을 시작하기 전에 AWS Directory Service for Microsoft Active Directory](#managed-ad-prereq)
+ [액티브 디렉터리 영역 사용](#managed-ad-realms)
+ [자격 증명 공급자 AWS Managed Microsoft AD 로 선택](#managed-ad-identity-provider)
+ [온프레미스 Microsoft Active Directory에 연결](#on-prem-ad)
+ [그룹에 액세스 권한 부여](#directory-services-grant-access)
+ [테스트 사용자](#directory-services-test-user)
+ [그룹의 서버 액세스 삭제](#directory-services-misc)
+ [SSH(보안 셸)를 사용하여 서버에 연결](#directory-services-ssh-procedure)
+ [포리스트 및 트러스트를 사용하여 자체 관리형 Active Directory AWS Transfer Family 에 연결](#directory-services-ad-trust)

## 사용을 시작하기 전에 AWS Directory Service for Microsoft Active Directory
<a name="managed-ad-prereq"></a>

**참고**  
AWS Transfer Family 의 기본 제한은 서버당 Active Directory 그룹 100개입니다. 사용 사례에 100개 이상의 그룹이 필요한 경우 용 사용자 지정 자격 증명 공급자를 [사용한 Active Directory 인증 간소화에 설명된 대로 사용자 지정 자격 증명 공급자 AWS Transfer Family](https://aws.amazon.com/blogs/storage/simplify-active-directory-authentication-with-a-custom-identity-provider-for-aws-transfer-family/)솔루션을 사용하는 것이 좋습니다.

### AD 그룹의 고유 식별자를 입력합니다.
<a name="add-identifier-adgroups"></a>

를 사용하려면 먼저 Microsoft AD 디렉터리의 각 그룹에 고유한 식별자를 제공해야 AWS Managed Microsoft AD합니다. 각 그룹의 SID(보안 식별자)를 사용하여 이 작업을 수행할 수 있습니다. 연결한 그룹의 사용자는 AWS Transfer Family를 사용하여 활성화된 프로토콜을 통해 Amazon S3 또는 Amazon EFS 리소스에 액세스할 수 있습니다.

다음 Windows PowerShell 명령을 사용하여 그룹의 SID를 검색하고 *YourGroupName*을 그룹 이름으로 바꿉니다.

```
Get-ADGroup -Filter {samAccountName -like "YourGroupName*"} -Properties * | Select SamAccountName,ObjectSid
```

**참고**  
를 자격 증명 공급자 AWS Directory Service 로 사용하고 있고 및 값이 다른 경우 `userPrincipalName``SamAccountName`는의 값을 AWS Transfer Family 수락합니다`SamAccountName`. Transfer Family는 `userPrincipalName`에 지정된 값을 수락하지 않습니다.

### 역할에 Directory Service 권한 추가
<a name="add-active-directory-permissions"></a>

를 자격 증명 공급자 AWS Directory Service 로 사용하려면 Directory Service API 권한도 필요합니다. 다음 권한이 필요하거나 제안됩니다.
+ Transfer Family에서 디렉토리를 조회하려면 `ds:DescribeDirectories`가 필요합니다.
+ Transfer Family에 대한 승인을 추가하려면 `ds:AuthorizeApplication`가 필요합니다.
+ `ds:UnauthorizeApplication`에서는 서버 생성 프로세스 중에 문제가 발생할 경우를 대비하여 임시로 생성된 모든 리소스를 제거하는 것이 좋습니다.

Transfer Family 서버를 만드는 데 사용하는 역할에 이러한 권한을 추가하세요. 이러한 권한에 대한 자세한 내용은 [Directory Service API 권한: 작업, 리소스 및 조건 참조](https://docs.aws.amazon.com//directoryservice/latest/admin-guide/UsingWithDS_IAM_ResourcePermissions.html)를 참조하세요.

## 액티브 디렉터리 영역 사용
<a name="managed-ad-realms"></a>

 Active Directory 사용자가 AWS Transfer Family 서버에 액세스하도록 하는 방법을 고려할 때는 사용자의 영역과 해당 그룹의 영역을 염두에 두세요. 가장 바람직한 것은 사용자 영역과 그룹 영역이 일치해야 하는 것입니다. 즉, 사용자와 그룹이 모두 기본 영역에 있거나 둘 다 신뢰할 수 있는 영역에 속해 있다는 뜻입니다. 그렇지 않은 경우 Transfer Family에서 사용자를 인증할 수 없습니다.

사용자를 테스트하여 구성이 올바른지 확인할 수 있습니다. 자세한 내용은 [테스트 사용자](#directory-services-test-user)를 참조하세요. 사용자/그룹 영역에 문제가 있는 경우 사용자 그룹에 연결된 액세스 권한을 찾을 수 없습니다라는 오류 메시지가 표시됩니다.

## 자격 증명 공급자 AWS Managed Microsoft AD 로 선택
<a name="managed-ad-identity-provider"></a>

이 섹션에서는를 서버와 AWS Directory Service for Microsoft Active Directory 함께 사용하는 방법을 설명합니다.

**Transfer Family AWS Managed Microsoft AD 와 함께를 사용하려면**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/directoryservicev2/](https://console.aws.amazon.com/directoryservicev2/) Directory Service 콘솔을 엽니다.

    Directory Service 콘솔을 사용하여 하나 이상의 관리형 디렉터리를 구성합니다. 자세한 내용을 알아보려면 * Directory Service 관리 안내서*의 [AWS Managed Microsoft AD](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html) 단원을 참조하세요.  
![\[디렉토리 목록 및 세부 정보를 보여 주는 Directory Service 콘솔\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/directory-services-AD-list.png)

1. [https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/) AWS Transfer Family 콘솔을 열고 **서버 생성을** 선택합니다.

1. **프로토콜 선택** 페이지의 목록에서 하나 이상의 프로토콜을 선택합니다.
**참고**  
**FTPS**를 선택하는 경우 AWS Certificate Manager 인증서를 제공해야 합니다.

1. **자격 증명 제공자 선택**에서 **AWS Directory Service**를 선택합니다.  
![\[Directory Service를 선택한 상태에서 ID 제공자 선택 섹션을 보여 주는 콘솔 스크린샷입니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/create-server-choose-idp-directory-services.png)

1. **디렉터리** 목록에는 구성한 모든 관리 디렉터리가 포함됩니다. 목록에서 디렉터리를 선택하고 **다음**을 선택합니다.
**참고**  
 교차 계정 및 공유 디렉터리는에서 지원되지 않습니다 AWS Managed Microsoft AD.
Directory Service를 자격 증명 공급자로 사용하여 서버를 설정하려면 몇 가지 Directory Service 권한을 추가해야 합니다. 자세한 내용은 [사용을 시작하기 전에 AWS Directory Service for Microsoft Active Directory](#managed-ad-prereq)을 참조하세요.

1. 서버 생성을 완료하려면 다음 절차 중 하나를 사용합니다.
   + [SFTP 지원 서버 생성](create-server-sftp.md)
   + [FTPS 지원 서버 생성](create-server-ftps.md)
   + [FTP 지원 서버 생성](create-server-ftp.md)

   해당 절차에서 ID 제공자 선택 다음 단계를 계속 진행하세요.

**중요**  
 Transfer Family 서버에서 Microsoft AD 디렉터리를 사용한 Directory Service 경우에서 삭제할 수 없습니다. 먼저 서버를 삭제해야 디렉터리를 삭제할 수 있습니다.

## 온프레미스 Microsoft Active Directory에 연결
<a name="on-prem-ad"></a>

이 섹션에서는 AD 커넥터를 사용하여 AWS 디렉터리를 설정하는 방법을 설명합니다.

**AD Connector를 사용하여 AWS 디렉터리를 설정하려면**

1. [디렉터리 서비스](https://console.aws.amazon.com/directoryservicev2/) 콘솔을 열고 **디렉터리**를 선택합니다.

1. **디렉터리 설정**을 선택합니다.

1. 디렉터리 타입으로는 **AD Connector**를 선택합니다.

1. 디렉터리 크기를 선택하고 **다음**을 선택한 다음 VPC와 서브넷을 선택합니다.

1. **다음**을 선택하고 다음과 같이 필드를 채웁니다.
   + **디렉터리 DNS 이름**: Microsoft Active Directory에 사용 중인 도메인 이름을 입력합니다.
   + **DNS IP 주소**: Microsoft Active Directory IP 주소를 입력합니다.
   + **서버 계정 사용자 이름** 및 **암호**: 사용할 서비스 계정의 세부 정보를 입력합니다.

1. 화면을 완료하여 디렉터리 서비스를 생성합니다.

다음 단계는 SFTP 프로토콜과 **AWS Directory Service**의 자격 증명 공급자 유형을 사용하여 Transfer Family 서버를 생성하는 것입니다. **디렉터리** 드롭다운 목록에서 이전 절차에서 추가한 디렉터리를 선택합니다.

## 그룹에 액세스 권한 부여
<a name="directory-services-grant-access"></a>

 서버를 생성한 후에는를 사용하여 활성화된 프로토콜을 통해 파일을 업로드하고 다운로드할 수 있는 액세스 권한이 있는 디렉터리의 그룹을 선택해야 합니다 AWS Transfer Family. *액세스 권한*을 생성하여 이 작업을 수행할 수 있습니다.

**참고**  
AWS Transfer Family 의 기본 제한은 서버당 Active Directory 그룹 100개입니다. 사용 사례에 100개 이상의 그룹이 필요한 경우 용 사용자 지정 자격 증명 공급자를 [사용한 Active Directory 인증 간소화에 설명된 대로 사용자 지정 자격 증명 공급자 AWS Transfer Family](https://aws.amazon.com/blogs/storage/simplify-active-directory-authentication-with-a-custom-identity-provider-for-aws-transfer-family/)솔루션을 사용하는 것이 좋습니다.

**참고**  
사용자는 액세스 권한을 부여하는 그룹에 *직접* 속해야 합니다. 예를 들어 Bob이 사용자이고 groupA에 속하며 groupA 자체가 groupB에 포함되어 있다고 가정합니다.  
그룹 A에 액세스 권한을 부여하면 Bob에게 액세스 권한이 부여됩니다.
 그룹 A가 아닌 그룹 B에 액세스 권한을 부여하는 경우 Bob은 액세스 권한을 갖지 않습니다.

**그룹에 액세스 권한을 부여하려면**

1. [https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/) AWS Transfer Family 콘솔을 엽니다.

1. 서버 세부 정보 페이지로 이동합니다.

1.  **액세스 섹션**에서 **액세스 추가**를 선택합니다.

1.  이 서버에 액세스할 AWS Managed Microsoft AD 디렉터리의 SID를 입력합니다.
**참고**  
그룹의 SID를 찾는 방법에 대한 자세한 내용은 [사용을 시작하기 전에 AWS Directory Service for Microsoft Active Directory](#managed-ad-prereq)를 참조하세요.

1. **액세스**에서 그룹의 AWS Identity and Access Management (IAM) 역할을 선택합니다.

1.  **정책** 섹션에서 정책을 선택합니다. 기본 설정은 **없음**입니다.

1. **홈 디렉터리**에서 그룹의 홈 디렉터리에 해당하는 Amazon S3 버킷을 선택합니다.
**참고**  
세션 정책을 생성하여 사용자에게 표시되는 버킷 부분을 제한할 수 있습니다. 예를 들어, `/filetest` 디렉터리 아래에 있는 자신의 폴더로만 사용자를 제한하려면 상자에 다음 텍스트를 입력합니다.  

   ```
   /filetest/${transfer:UserName}
   ```
 세션 정책 생성에 대한 자세한 설명은 [Amazon S3 버킷을 위한 세션 정책 생성](users-policies-session.md) 섹션을 참조하세요.

1.  **추가**를 선택하여 연결을 생성합니다.

1. 서버를 선택합니다.

1. **액세스 추가**를 선택합니다.

   1.  그룹의 SID를 입력합니다.
**참고**  
SID를 찾는 방법에 대한 자세한 내용은 [사용을 시작하기 전에 AWS Directory Service for Microsoft Active Directory](#managed-ad-prereq)를 참조하세요.

1. **액세스 추가**를 선택합니다.

 **액세스** 섹션에는 서버에 대한 액세스가 나열됩니다.

![\[서버 액세스가 나열된 액세스 섹션이 표시된 콘솔입니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/accesses-list.png)


## 테스트 사용자
<a name="directory-services-test-user"></a>

사용자가 서버의 AWS Managed Microsoft AD 디렉터리에 액세스할 수 있는지 테스트할 수 있습니다.

**참고**  
사용자는 **엔드포인트 구성** 페이지의 **액세스** 섹션에 나열된 정확히 하나의 그룹(외부 ID)에 속해야 합니다. 사용자가 그룹에 속하지 않거나 둘 이상의 그룹에 속해 있는 경우 해당 사용자에게 액세스 권한이 부여되지 않습니다.

**특정 사용자에게 액세스 권한이 있는지 테스트하려면**

1. 서버 세부 정보 페이지에서 **작업**을 선택한 다음 **테스트**를 선택합니다.

1. **자격 증명 제공자 테스트**의 경우 액세스 권한이 있는 그룹 중 하나에 속하는 사용자의 로그인 자격 증명을 입력합니다.

1.  **테스트**를 선택합니다.

ID 제공자 테스트에 성공하면 선택한 사용자에게 서버 액세스 권한이 부여되었음을 알 수 있습니다.

![\[성공적인 ID 제공자 테스트 응답의 콘솔 스크린샷\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/identity-provider-test-success.png)


사용자가 액세스 권한이 있는 두 개 이상의 그룹에 속해 있는 경우 다음과 같은 응답을 받게 됩니다.

```
"Response":"",
"StatusCode":200,
"Message":"More than one associated access found for user's groups."
```

## 그룹의 서버 액세스 삭제
<a name="directory-services-misc"></a>

**그룹의 서버 액세스 삭제**

1. 서버 세부 정보 페이지에서 **작업**을 선택한 다음 **액세스 삭제**를 선택합니다.

1. 대화 상자에서 이 그룹에 대한 액세스 권한을 제거합니다.

 서버 세부 정보 페이지로 돌아가면 이 그룹에 대한 액세스 권한이 더 이상 나열되지 않는 것을 볼 수 있습니다.

## SSH(보안 셸)를 사용하여 서버에 연결
<a name="directory-services-ssh-procedure"></a>

서버와 사용자를 구성한 후 SSH를 사용하여 서버에 연결하고 액세스 권한이 있는 사용자의 정식 사용자 이름을 사용할 수 있습니다.

```
sftp user@active-directory-domain@vpc-endpoint
```

예를 들어 `transferuserexample@mycompany.com@vpce-0123456abcdef-789xyz.vpc-svc-987654zyxabc.us-east-1.vpce.amazonaws.com`입니다.

이 형식은 페더레이션 검색을 대상으로 하므로 크기가 클 수 있는 Active Directory의 검색을 제한합니다.

**참고**  
간단한 사용자 이름을 지정할 수 있습니다. 하지만 이 경우 Active Directory 코드가 페더레이션의 모든 디렉터리를 검색해야 합니다. 이로 인해 검색이 제한될 수 있으며 사용자에게 액세스 권한이 있어야 하는 경우에도 인증이 실패할 수 있습니다.

인증이 완료되면 사용자는 사용자를 구성할 때 지정한 홈 디렉터리에 위치해 있습니다.

## 포리스트 및 트러스트를 사용하여 자체 관리형 Active Directory AWS Transfer Family 에 연결
<a name="directory-services-ad-trust"></a>

Directory Service 에는 자체 관리형 Active Directory에 연결하는 데 사용할 수 있는 다음 옵션이 있습니다.
+ 단방향 포리스트 신뢰(온프레미스 Active Directory에서 송 AWS Managed Microsoft AD 수신)는 루트 도메인에서만 작동합니다.
+ 하위 도메인의 경우 다음 중 하나를 사용할 수 있습니다.
  +  AWS Managed Microsoft AD 와 온프레미스 Active Directory 간의 양방향 신뢰 사용
  + 각 하위 도메인에는 단방향 외부 트러스트를 사용합니다.

예를 들어 `transferuserexample@mycompany.com` 신뢰할 수 있는 도메인을 사용하여 서버에 연결하는 경우 사용자는 신뢰할 수 있는 도메인을 지정해야 합니다.

# Entra ID 도메인 서비스에 AWS 디렉터리 서비스 사용
<a name="azure-sftp"></a>

 SFTP 전송만 필요하고 도메인을 관리하지 않으려는 고객을 위한 Simple Active Directory가 있습니다. 또는 완전 관리형 서비스에서 Active Directory와 고가용성의 이점을 누리고자 하는 고객은 AWS 관리형 Microsoft AD를 사용할 수 있습니다. 마지막으로, SFTP 전송을 위해 기존 Active Directory 포리스트를 활용하려는 고객을 위해 Active Directory Connector가 있습니다.

다음 사항에 유의하세요.
+ SFTP 전송 요구 사항에 맞게 기존 액티브 디렉터리 포리스트를 활용하려면 [Active Directory Connector](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_ad_connector.html)를 사용할 수 있습니다.
+ 완전 관리형 서비스에서 Active Directory의 이점과 고가용성을 활용하려면 AWS Directory Service for Microsoft Active Directory를 사용할 수 있습니다. 자세한 내용은 [Microsoft Active Directory용 AWS Directory Service 사용](directory-services-users.md)을 참조하세요.

이 주제에서는 Active Directory 커넥터 및 [Entra ID(이전 Azure AD) 도메인 서비스를](https://azure.microsoft.com/en-us/services/active-directory-ds/) 사용하여 Entra ID로 SFTP Transfer 사용자를 인증하는 방법을 설명합니다.

**Topics**
+ [Entra ID 도메인 서비스용 AWS 디렉터리 서비스 사용을 시작하기 전에](#azure-prereq)
+ [1단계: Entra ID 도메인 서비스 추가](#azure-add-adds)
+ [2단계: 서비스 계정 생성](#azure-create-service-acct)
+ [3단계: AD 커넥터를 사용하여 AWS 디렉터리 설정](#azure-setup-directory)
+ [4단계: AWS Transfer Family 서버 설정](#azure-setup-transfer-server)
+ [5단계: 그룹에 액세스 권한 부여](#azure-grant-access)
+ [6단계: 사용자 테스트](#azure-test)

## Entra ID 도메인 서비스용 AWS 디렉터리 서비스 사용을 시작하기 전에
<a name="azure-prereq"></a>

**참고**  
AWS Transfer Family 의 기본 제한은 서버당 Active Directory 그룹 100개입니다. 사용 사례에 100개 이상의 그룹이 필요한 경우 용 사용자 지정 자격 증명 공급자를 [사용한 Active Directory 인증 간소화에 설명된 대로 사용자 지정 자격 증명 공급자 AWS Transfer Family](https://aws.amazon.com/blogs/storage/simplify-active-directory-authentication-with-a-custom-identity-provider-for-aws-transfer-family/)솔루션을 사용하는 것이 좋습니다.

의 AWS경우 다음이 필요합니다.
+ Transfer Family 서버를 사용하는 AWS 리전의 Virtual Private Cloud(VPC)
+ VPC에 최소 두 개의 프라이빗 서브넷이 있어야 함
+ VPC는 인터넷에 연결되어 있어야 함
+ Microsoft Entra와의 site-to-site VPN 연결을 위한 고객 게이트웨이 및 가상 프라이빗 게이트웨이

Microsoft Entra의 경우 다음이 필요합니다.
+ Entra ID 및 Active Directory 도메인 서비스
+ Entra 리소스 그룹
+ Entra 가상 네트워크
+ Amazon VPC와 Entra 리소스 그룹 간의 VPN 연결
**참고**  
네이티브 IPSEC 터널을 통하거나 VPN 어플라이언스를 사용하여 연결할 수 있습니다. 이 주제에서는 Entra Virtual 네트워크 게이트웨이와 로컬 네트워크 게이트웨이 간에 IPSEC 터널을 사용합니다. Entra Domain Service 엔드포인트와 AWS VPC를 수용하는 서브넷 간의 트래픽을 허용하도록 터널을 구성해야 합니다.
+ Microsoft Entra와의 site-to-site VPN 연결을 위한 고객 게이트웨이 및 가상 프라이빗 게이트웨이

다음 다이어그램은 시작하기 전에 필요한 구성을 보여줍니다.

![\[Entra/Azure AD 및 AWS Transfer Family 아키텍처 다이어그램. AWS 디렉터리 서비스 커넥터를 사용하여 인터넷을 통해 Entra 가상 네트워크에 연결하는 AWS VPC를 Entra 도메인 서비스에 연결합니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/azure-architecture.png)


## 1단계: Entra ID 도메인 서비스 추가
<a name="azure-add-adds"></a>

 Entra ID는 기본적으로 도메인 조인 인스턴스를 지원하지 않습니다. 도메인 조인과 같은 작업을 수행하고 그룹 정책과 같은 도구를 사용하려면 관리자가 Entra ID 도메인 서비스를 활성화해야 합니다. Entra DS를 아직 추가하지 않았거나 기존 구현이 SFTP Transfer 서버에서 사용할 도메인과 연결되어 있지 않은 경우 새 인스턴스를 추가해야 합니다.

Entra ID 도메인 서비스 활성화에 대한 자세한 내용은 [자습서: Microsoft Entra 도메인 서비스 관리형 도메인 생성 및 구성을 참조하세요](https://docs.microsoft.com/en-us/azure/active-directory-domain-services/active-directory-ds-getting-started).

**참고**  
Entra DS를 활성화할 때 SFTP Transfer 서버를 연결하려는 리소스 그룹 및 Entra 도메인에 대해 구성되었는지 확인합니다.

![\[실행 중인 리소스 그룹 bob.us 보여주는 Entra 도메인 서비스 화면입니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/azure-ad-add-instance.png)


## 2단계: 서비스 계정 생성
<a name="azure-create-service-acct"></a>

 Entra에는 Entra DS의 관리자 그룹에 속하는 서비스 계정이 하나 있어야 합니다. 이 계정은 AWS Active Directory 커넥터와 함께 사용됩니다. 이 계정이 Entra DS와 동기화되어 있는지 확인합니다.

![\[사용자의 프로필을 보여주는 엔트라 화면입니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/azure-service-acct.png)


**작은 정보**  
SFTP 프로토콜을 사용하는 Transfer Family 서버에서는 Entra ID에 대한 다중 인증이 지원되지 않습니다. Transfer Family 서버는 사용자가 SFTP에 인증한 후에는 MFA 토큰을 제공할 수 없습니다. 연결을 시도하기 전에 MFA를 비활성화해야 합니다.  

![\[MFA 상태가 두 사용자에 대해 비활성화됨으로 표시되는 멀티 팩터 인증 세부 정보입니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/azure-ad-mfa-disable.png)


## 3단계: AD 커넥터를 사용하여 AWS 디렉터리 설정
<a name="azure-setup-directory"></a>

 Entra DS를 구성하고 AWS VPC와 Entra 가상 네트워크 간에 IPSEC VPN 터널이 있는 서비스 계정을 생성한 후에는 모든 AWS EC2 인스턴스에서 Entra DS DNS IP 주소를 ping하여 연결을 테스트할 수 있습니다.

연결이 활성화되었는지 확인한 후 아래에서 계속할 수 있습니다.

**AD Connector를 사용하여 AWS 디렉터리를 설정하려면**

1. [디렉터리 서비스](https://console.aws.amazon.com/directoryservicev2/) 콘솔을 열고 **디렉터리**를 선택합니다.

1. **디렉터리 설정**을 선택합니다.

1. 디렉터리 타입으로는 **AD Connector**를 선택합니다.

1. 디렉터리 크기를 선택하고 **다음**을 선택한 다음 VPC와 서브넷을 선택합니다.

1. **다음**을 선택하고 다음과 같이 필드를 채웁니다.
   + **디렉터리 DNS 이름**: Entra DS에 사용 중인 도메인 이름을 입력합니다.
   + **DNS IP 주소**: Entra DS IP 주소를 입력합니다.
   + **서버 계정 사용자 이름** 및 **암호**: *2단계: 서비스 계정 생성*에서 만든 서비스 계정의 세부 정보를 입력합니다.

1. 화면을 완료하여 디렉터리 서비스를 생성합니다.

이제 디렉터리 상태가 **활성**이어야 하며 SFTP 전송 서버에서 사용할 준비가 되었습니다.

![\[디렉터리 서비스 화면에는 필요에 따라 활성 상태의 디렉터리 하나가 표시됩니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/azure-connector-ready.png)


## 4단계: AWS Transfer Family 서버 설정
<a name="azure-setup-transfer-server"></a>

SFTP 프로토콜과 **AWS Directory Service**의 자격 증명 공급자 유형을 사용하여 Transfer Family 서버를 생성합니다. **디렉터리** 드롭다운 목록에서 *3단계: AD Connector를 사용하여 AWS 디렉터리 설정*에서 추가한 디렉터리를 선택합니다.

**참고**  
Transfer Family 서버에서 사용한 Microsoft AD 디렉터리는 AWS Directory Service에서 삭제할 수 없습니다. 먼저 서버를 삭제해야 디렉터리를 삭제할 수 있습니다.

## 5단계: 그룹에 액세스 권한 부여
<a name="azure-grant-access"></a>

 서버를 생성한 후에는를 사용하여 활성화된 프로토콜을 통해 파일을 업로드하고 다운로드할 수 있는 디렉터리의 그룹을 선택해야 합니다 AWS Transfer Family. *액세스 권한*을 생성하여 이 작업을 수행할 수 있습니다.

**참고**  
사용자는 액세스 권한을 부여하는 그룹에 *직접* 속해야 합니다. 예를 들어 Bob이 사용자이고 groupA에 속하며 groupA 자체가 groupB에 포함되어 있다고 가정합니다.  
그룹 A에 액세스 권한을 부여하면 Bob에게 액세스 권한이 부여됩니다.
 그룹 A가 아닌 그룹 B에 액세스 권한을 부여하는 경우 Bob은 액세스 권한을 갖지 않습니다.

 액세스 권한을 부여하려면 그룹의 SID를 검색해야 합니다.

다음 Windows PowerShell 명령을 사용하여 그룹의 SID를 검색하고 *YourGroupName*을 그룹 이름으로 바꿉니다.

```
Get-ADGroup -Filter {samAccountName -like "YourGroupName*"} -Properties * | Select SamAccountName,ObjectSid
```

![\[검색되는 객체 SID를 보여주는 Windows PowerShell입니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/azure-grant-access.png)


**그룹에 액세스 권한을 부여하려면**

1. [https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/) 엽니다.

1. 서버 세부 정보 페이지로 이동한 다음 **액세스** 섹션에서 **액세스 추가**를 선택합니다.

1. 이전 절차의 출력에서 받은 SID를 입력합니다.

1. **액세스**에서 그룹의 AWS Identity and Access Management 역할을 선택합니다.

1. **정책** 섹션에서 정책을 선택합니다. 기본값은 **없음**입니다.

1. **홈 디렉터리**에서 그룹의 홈 디렉터리에 해당하는 Amazon S3 버킷을 선택합니다.

1. **추가**를 선택하여 연결을 생성합니다.

전송 서버의 세부 정보는 다음과 유사해야 합니다.

![\[자격 증명 공급자의 디렉터리 ID 예제를 보여주는 Transfer Family 서버 세부 정보 화면의 일부입니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/azure-assoc-1.png)


![\[Transfer Family 서버 세부 정보 화면의 일부로, 화면의 액세스 부분에 있는 활성 디렉터리의 외부 ID를 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/azure-assoc-2.png)


## 6단계: 사용자 테스트
<a name="azure-test"></a>

사용자가 서버의 AWS Managed Microsoft AD 디렉터리에 액세스할 수 있는지 테스트([테스트 사용자](directory-services-users.md#directory-services-test-user))할 수 있습니다. 사용자는 **엔드포인트 구성** 페이지의 **액세스** 섹션에 나열된 정확히 하나의 그룹(외부 ID)에 속해야 합니다. 사용자가 그룹에 속하지 않거나 둘 이상의 그룹에 속해 있는 경우 해당 사용자에게 액세스 권한이 부여되지 않습니다.