

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

# SFTP, FTPS 또는 FTP 서버 엔드포인트 구성
<a name="sftp-for-transfer-family"></a>

이 주제에서는 하나 이상의 SFTP, FTPS 및 FTP 프로토콜을 사용하는 AWS Transfer Family 서버 엔드포인트를 생성하고 사용하는 방법에 대한 세부 정보를 제공합니다.

**Topics**
+ [자격 증명 공급자 옵션](#identity-provider-details)
+ [AWS Transfer Family 엔드포인트 유형 매트릭스](#endpoint-matrix)
+ [SFTP, FTPS 또는 FTP 서버 엔드포인트 구성](tf-server-endpoint.md)
+ [FTP 및 FTPS Network Load Balancer 고려 사항](#ftp-ftps-nlb-considerations)
+ [클라이언트를 사용하여 서버 엔드포인트를 통한 파일 전송](transfer-file.md)
+ [서버 엔드포인트에 대한 사용자 관리](create-user.md)
+ [논리적 디렉터리를 사용하여 Transfer Family 디렉터리 구조를 단순화합니다.](logical-dir-mappings.md)
+ [Transfer Family를 사용하여 FSx for NetApp ONTAP 파일 시스템에 액세스](fsx-s3-access-points.md)

## 자격 증명 공급자 옵션
<a name="identity-provider-details"></a>

AWS Transfer Family 는 사용자를 인증하고 관리하기 위한 몇 가지 방법을 제공합니다. 다음 표에서는 Transfer Family와 함께 사용할 수 있는 ID 공급자를 비교합니다.


| 작업 | AWS Transfer Family 서비스 관리형 | AWS Managed Microsoft AD | Amazon API Gateway | AWS Lambda | 
| --- | --- | --- | --- | --- | 
| 지원되는 프로토콜 | SFTP | SFTP, FTPS, FTP | SFTP, FTPS, FTP | SFTP, FTPS, FTP | 
|  키 기반 인증  |  예  |  아니요  |  예  |  예  | 
|  암호 인증  |  아니요  |  예  |  예  |  예  | 
|  AWS Identity and Access Management (IAM) 및 POSIX  |  예  |  예  |  예  |  예  | 
|  논리적 홈 디렉터리  |  예  |  예  |  예  |  예  | 
| 파라미터화된 액세스(사용자 이름 기반) | 예 | 예 | 예 | 예 | 
|  임시 액세스 구조  |  예  |  아니요  |  예  |  예  | 
|  AWS WAF  |  아니요  |  아니요  |  예  |  아니요  | 

참고:
+ IAM은 Amazon S3 지원 스토리지에 대한 액세스를 통제하는 데 사용되고 POSIX는 Amazon EFS에 사용됩니다.
+ *임시*는 런타임에 사용자 프로필을 전송할 수 있는 기능을 의미합니다. 예컨대, 사용자 이름을 변수로 전달하여 사용자를 홈 디렉터리에 연결할 수 있습니다.
+ 에 대한 자세한 내용은 단원을 AWS WAF참조하십시오[웹 애플리케이션 방화벽 추가](web-application-firewall.md).
+ Microsoft Entra ID(이전 Azure AD)와 통합된 Lambda 함수를 Transfer Family 자격 증명 공급자로 사용하는 방법을 설명하는 블로그 게시물이 있습니다. 자세한 내용은 [ Azure Active Directory AWS Transfer Family 를 사용하여에 인증 및 섹션을 AWS Lambda](https://aws.amazon.com/blogs/storage/authenticating-to-aws-transfer-family-with-azure-active-directory-and-aws-lambda/)참조하세요.
+ 사용자 지정 자격 증명 공급자를 사용하는 Transfer Family 서버를 빠르게 배포하는 데 도움이 되는 여러 CloudFormation 템플릿을 제공합니다. 자세한 내용은 [Lambda 함수 템플릿](custom-lambda-idp.md#lambda-idp-templates)을 참조하세요.

다음 절차에서 SFTP 지원 서버, FTPS 지원 서버, FTP 지원 서버 또는 AS2 지원 서버를 생성할 수 있습니다.

**다음 단계**
+ [SFTP 지원 서버 생성](create-server-sftp.md)
+ [FTPS 지원 서버 생성](create-server-ftps.md)
+ [FTP 지원 서버 생성](create-server-ftp.md)
+ [AS2 구성](create-b2b-server.md)

## AWS Transfer Family 엔드포인트 유형 매트릭스
<a name="endpoint-matrix"></a>

Transfer Family 서버를 생성하는 경우 사용할 엔드포인트 타입을 선택합니다. 다음 표에서는 각 엔드포인트 타입의 특성에 대해 설명합니다.


**엔드포인트 타입 매트릭스**  

| 기능 | 퍼블릭 | VPC - 인터넷 | VPC - 내부형 | VPC\$1엔드포인트(폐지됨) | 
| --- | --- | --- | --- | --- | 
| 지원되는 프로토콜 | SFTP | SFTP, FTPS, AS2 | SFTP, FTP, FTPS, AS2 | SFTP | 
| 액세스 | 인터넷을 통해 이 엔드포인트 타입에는 VPC에 특별한 구성이 필요하지 않습니다. | 인터넷을 통해, 그리고 또는 Direct Connect VPN을 통한 온프레미스 데이터 센터와 같은 VPC 및 VPC 연결 환경 내에서. |  Direct Connect 또는 VPN을 통한 온프레미스 데이터 센터와 같은 VPC 및 VPC 연결 환경 내에서. |  Direct Connect 또는 VPN을 통한 온프레미스 데이터 센터와 같은 VPC 및 VPC 연결 환경 내에서. | 
| 고정 IP 주소 | 고정 IP 주소는 연결할 수 없습니다.는 변경될 수 있는 IP 주소를 AWS 제공합니다. |  탄력적 IP 주소를 엔드포인트에 연결할 수 있습니다. 이는 AWS에서 소유한 IP 주소일 수도 있고 자체 IP 주소일 수도 있습니다([자체 IP 주소 사용](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html)). 엔드포인트에 연결된 탄력적 IP 주소는 변경되지 않습니다. 서버에 연결된 사설 IP 주소도 변경되지 않습니다.  | 엔드포인트에 연결된 사설 IP 주소는 변경되지 않습니다. | 엔드포인트에 연결된 사설 IP 주소는 변경되지 않습니다. | 
| 소스 IP 허용 목록 |  이 엔드포인트 타입은 소스 IP 주소별 허용 목록을 지원하지 않습니다. 엔드포인트는 공개적으로 액세스할 수 있으며 포트 22를 통해 트래픽을 수신합니다.  VPC 호스팅 엔드포인트의 경우 SFTP Transfer Family 서버는 포트 22(기본값), 2222, 2223 또는 22000을 통해 작동할 수 있습니다.   |  소스 IP 주소별 액세스를 허용하려면 서버 엔드포인트에 연결된 보안 그룹과 엔드포인트가 있는 서브넷에 연결된 네트워크 ACL을 사용할 수 있습니다.  |  소스 IP 주소별 액세스를 허용하려면 서버 엔드포인트에 연결된 보안 그룹과 엔드포인트가 있는 서브넷에 연결된 네트워크 ACL(액세스 통제 목록)을 사용할 수 있습니다.  |  소스 IP 주소별 액세스를 허용하려면 서버 엔드포인트에 연결된 보안 그룹과 엔드포인트가 있는 서브넷에 연결된 네트워크 ACL을 사용할 수 있습니다.  | 
| 클라이언트 방화벽 허용 목록 |  서버의 DNS 이름을 허용해야 합니다. IP 주소는 변경될 수 있으므로 클라이언트 방화벽 허용 목록에 IP 주소를 사용하지 마세요.  |  서버의 DNS 이름 또는 서버에 연결된 탄력적 IP 주소를 허용할 수 있습니다.  |  엔드포인트의 프라이빗 IP 주소 또는 DNS 이름을 허용할 수 있습니다.  |  엔드포인트의 프라이빗 IP 주소 또는 DNS 이름을 허용할 수 있습니다.  | 
| IP 주소 유형 | IPv4(기본값) 또는 듀얼 스택(IPv4 및 IPv6) | IPv4 전용(듀얼 스택은 지원되지 않음) | IPv4(기본값) 또는 듀얼 스택(IPv4 및 IPv6) | IPv4 전용(듀얼 스택은 지원되지 않음) | 

**참고**  
`VPC_ENDPOINT` 엔드포인트 타입은 이제 더 이상 사용되지 않으며 새 서버를 만드는 데 사용할 수 없습니다. 를 사용하는 대신 이전 표에 설명된 대로 **내부** 또는 **인터넷 연결**로 사용할 수 있는 VPC 엔드포인트 유형(`EndpointType=VPC`)을 `EndpointType=VPC_ENDPOINT`사용합니다.  
사용 중단에 대한 자세한 내용은 섹션을 참조하세요[VPC\$1ENDPOINT 사용 중단Transfer Family 콘솔, API AWS CLI, SDKs 또는를 사용하여 서버의 엔드포인트 유형을 변경할 수 있습니다 CloudFormation. 서버의 엔드포인트 타입을 변경하려면 [AWS Transfer Family 서버 엔드포인트 유형을 VPC\$1ENDPOINT에서 VPC로 업데이트](update-endpoint-type-vpc.md)를 참조하세요.](create-server-in-vpc.md#deprecate-vpc-endpoint).
VPC 엔드포인트 권한 관리에 대한 자세한 내용은 섹션을 참조하세요[Transfer Family 서버에 대한 VPC 엔드포인트 액세스 제한](create-server-in-vpc.md#limit-vpc-endpoint-access).

 AWS Transfer Family 서버의 보안 상태를 강화하려면 다음 옵션을 고려해 보세요.
+ 내부 액세스 권한이 있는 VPC 엔드포인트를 사용하면 서버는 Direct Connect 또는 VPN을 통한 온프레미스 데이터 센터와 같은 VPC 또는 VPC 연결 환경 내의 클라이언트만 액세스할 수 있습니다.
+ 클라이언트가 인터넷을 통해 엔드포인트에 액세스하도록 허용하고 서버를 보호하려면 인터넷 연결 액세스가 가능한 VPC 엔드포인트를 사용하세요. 그런 다음 사용자 클라이언트를 호스팅하는 특정 IP 주소로부터의 트래픽만 허용하도록 VPC의 보안 그룹을 수정하세요.
+ 암호 기반 인증이 필요하고 서버에서 맞춤 ID 공급자를 사용하는 경우 암호 정책을 통해 사용자가 취약한 암호를 만들지 못하도록 하고 로그인 시도 실패 횟수를 제한하는 것이 좋습니다.
+ AWS Transfer Family 는 관리형 서비스이므로 셸 액세스를 제공하지 않습니다. Transfer Family 서버에서는 기본 SFTP 서버에 직접 액세스하여 OS 기본 명령을 실행할 수 없습니다.
+ 내부 액세스가 가능한 VPC 엔드포인트 앞에서 Network Load Balancer를 사용하세요. 로드 밸런서의 리스너 포트를 포트 22에서 다른 포트로 변경합니다. 이렇게 하면 포트 스캐너와 봇이 서버를 탐색할 위험을 줄일 수 있지만 제거하지는 못합니다. 포트 22가 스캔에 가장 많이 사용되기 때문입니다. 자세한 내용은 [이제 Network Load Balancer가 보안 그룹을 지원한다는 블로그 게시물을 참조하세요](https://aws.amazon.com/blogs/containers/network-load-balancers-now-support-security-groups/).
**참고**  
Network Load Balancer를 사용하는 경우 AWS Transfer Family CloudWatch 로그에는 실제 클라이언트 IP 주소가 아닌 NLB의 IP 주소가 표시됩니다.

# SFTP, FTPS 또는 FTP 서버 엔드포인트 구성
<a name="tf-server-endpoint"></a>

 AWS Transfer Family 서비스를 사용하여 파일 전송 서버를 생성할 수 있습니다. 다음 파일 전송 프로토콜을 사용할 수 있습니다.
+ Secure Shell(SSH) 파일 전송 프로토콜(SFTP) - SSH를 통한 파일 전송. 자세한 내용은 [SFTP 지원 서버 생성](create-server-sftp.md)을 참조하세요.
**참고**  
SFTP Transfer Family 서버를 생성하는 AWS CDK 예제를 제공합니다. 이 예는 TypeScript를 사용하는 데, [여기](https://github.com/aws-samples/aws-cdk-examples/tree/master/typescript/aws-transfer-sftp-server)의 GitHub에서 입수할 수 있습니다.
+ FTPS(파일 전송 프로토콜 보안) - TLS 암호화를 사용한 파일 전송. 자세한 내용은 [FTPS 지원 서버 생성](create-server-ftps.md)를 참조하세요.
+ FTP(파일 전송 프로토콜) - 암호화되지 않은 파일 전송. 자세한 내용은 [FTP 지원 서버 생성](create-server-ftp.md)를 참조하세요.
+ 적용성 보고서 2(AS2) - 구조화된 B2B 데이터 전송을 위한 파일 전송. 자세한 내용은 [AS2 구성](create-b2b-server.md)을 참조하세요. AS2의 경우 데모용으로 CloudFormation 스택을 빠르게 생성할 수 있습니다. 이 절차는 [템플릿을 사용하여 데모 Transfer Family AS2 스택을 생성하세요.](create-as2-transfer-server.md#as2-cfn-demo-template)에 설명되어 있습니다.

여러 프로토콜로 서버를 만들 수 있습니다.

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

서버를 생성할 때 특정를 선택하여 해당 서버에 할당된 사용자의 파일 작업 요청을 AWS 리전 수행합니다. 서버에 하나 이상의 프로토콜을 할당하는 동시에 다음 ID 공급자 타입 중 하나를 할당합니다:
+ **SSH 키를 사용한 서비스 관리**. 자세한 내용은 [서비스 관리형과 작업](service-managed-users.md)을 참조하세요.
+ **AWS Directory Service for Microsoft Active Directory (AWS Managed Microsoft AD)** 이 방법을 사용하면 Microsoft Active Directory 그룹을 통합하여 Transfer Family 서버에 대한 액세스를 제공할 수 있습니다. 자세한 내용은 [Microsoft Active Directory용 AWS Directory Service 사용](directory-services-users.md)을 참조하세요.
+ **사용자 지정 자격 증명 공급자입니다**. Transfer Family는 [사용자 지정 자격 증명 공급자와 작업](custom-idp-intro.md) 주제에 설명된 대로 사용자 지정 자격 증명 공급자를 사용하기 위한 몇 가지 옵션을 제공합니다.

또한 기본 서버 엔드포인트를 사용하여 엔드포인트 타입(공개적으로 액세스 가능 또는 VPC 호스팅) 과 호스트 이름을 서버에 할당하거나, Amazon Route 53 서비스를 사용하거나 선택한 도메인 이름 시스템(DNS) 서비스를 사용하여 맞춤 호스트 이름을 할당합니다. 서버 호스트 이름은 서버 호스트가 생성된 AWS 리전 에서 고유해야 합니다.

또한 Amazon CloudWatch 로깅 역할을 할당하여 CloudWatch 로그에 이벤트를 푸시하고, 서버에서 사용할 수 있도록 활성화된 암호화 알고리즘이 포함된 보안 정책을 선택하고, 키-값 쌍인 태그의 형태로 서버에 메타데이터를 추가할 수 있습니다.

**중요**  
인스턴스화한 서버와 데이터 전송에 대한 비용이 발생합니다. Transfer Family 사용 비용 견적을 AWS Pricing Calculator 얻는 데 사용할 요금 및에 대한 자세한 내용은 [AWS Transfer Family 요금을](https://aws.amazon.com/aws-transfer-family/pricing/) 참조하세요.

# SFTP 지원 서버 생성
<a name="create-server-sftp"></a>

Secure Shell(SSH) File Transfer 프로토콜(SFTP)은 인터넷을 통한 안전한 데이터 전송에 사용되는 네트워크 프로토콜입니다. 이 프로토콜은 SSH의 전체 보안 및 인증 기능을 지원합니다. 금융 서비스, 의료, 소매 및 광고와 같은 다양한 산업의 비즈니스 파트너들 사이의 민감한 정보를 비롯한 데이터를 교환하는 데 널리 사용됩니다.

**다음 사항에 유의하세요.**
+ Transfer Family용 SFTP 서버는 포트 22를 통해 작동합니다. VPC 호스팅 엔드포인트의 경우 SFTP Transfer Family 서버는 포트 2222, 2223 또는 22000을 통해 작동할 수도 있습니다. 자세한 내용은 [Virtual Private Cloud(VPC)에 서버 생성](create-server-in-vpc.md)을 참조하세요.
+ 퍼블릭 엔드포인트는 보안 그룹을 통한 트래픽을 제한할 수 없습니다. Transfer Family 서버에서 보안 그룹을 사용하려면에 설명된 대로 가상 프라이빗 클라우드(VPC) 내에서 서버의 엔드포인트를 호스팅해야 합니다[Virtual Private Cloud(VPC)에 서버 생성](create-server-in-vpc.md).

**참고 항목**
+ SFTP Transfer Family 서버를 생성하는 AWS CDK 예제를 제공합니다. 이 예는 TypeScript를 사용하는 데, [여기](https://github.com/aws-samples/aws-cdk-examples/tree/master/typescript/aws-transfer-sftp-server)의 GitHub에서 입수할 수 있습니다.
+ VPC 내부에 Transfer Family 서버를 배포하는 방법에 대한 연습은 [IP 허용 목록을 사용하여 AWS Transfer Family 서버 보안을 참조하세요](https://aws.amazon.com/blogs//storage/use-ip-allow-list-to-secure-your-aws-transfer-for-sftp-servers/).

**SFTP 지원 서버를 생성하려면**

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

1. **프로토콜 선택**에서 **SFTP**를 선택하고 **다음**을 선택합니다.

1. **자격 증명 공급자 선택**에서 사용자 액세스를 관리하는 데 사용할 자격 증명 공급자를 선택합니다. 다음과 같은 옵션이 있습니다:
   + **서비스 관리**형 - 사용자 ID와 키를에 저장합니다 AWS Transfer Family.
   + **AWS Directory Service for Microsoft Active Directory** - 엔드포인트에 액세스할 수 있는 Directory Service 디렉터리를 제공합니다. 그러면 Active Directory에 저장된 자격 증명을 사용하여 사용자를 인증할 수 있습니다. 자격 AWS Managed Microsoft AD 증명 공급자 작업에 대한 자세한 내용은 섹션을 참조하세요[Microsoft Active Directory용 AWS Directory Service 사용](directory-services-users.md).
**참고**  
 교차 계정 및 공유 디렉터리는에서 지원되지 않습니다 AWS Managed Microsoft AD.
Directory Service를 자격 증명 공급자로 사용하여 서버를 설정하려면 몇 가지 Directory Service 권한을 추가해야 합니다. 자세한 내용은 [사용을 시작하기 전에 AWS Directory Service for Microsoft Active Directory](directory-services-users.md#managed-ad-prereq)을 참조하세요.
   + **맞춤 ID 공급자** – 다음 옵션 중 하나를 선택합니다.
     + ** AWS Lambda 를 사용하여 자격 증명 공급자 연결 **- Lambda 함수가 지원하는 기존 자격 증명 공급자를 사용할 수 있습니다. 귀하는 Lambda 함수의 명칭을 제공합니다. 자세한 내용은 [AWS Lambda 를 사용하여 자격 증명 공급자 통합](custom-lambda-idp.md)를 참조하세요.
     + **Amazon API Gateway를 사용하는 자격 증명 공급자 연결** - Lambda 함수가 지원하는 API Gateway 방법을 생성하여 자격 증명 공급자로 사용할 수 있습니다. 사용자는 Amazon API Gateway URL과 호출 역할을 제공합니다. 자세한 내용은 [Amazon API Gateway를 ID 제공자 통합에 사용](authentication-api-gateway.md)를 참조하세요.  
![\[맞춤 ID 공급자가 선택된 ID 공급자 선택콘솔 섹션. 또한 사용자가 자신의 암호 또는 키를 사용하여 인증할 수 있는 기본값이 선택되어 있습니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/custom-lambda-console.png)

1. **다음**을 선택합니다.

1. **엔드포인트 선택**에서 다음을 수행합니다.

   1. **엔드포인트 타입**으로는 **공적으로 액세스 가능** 엔드포인트 타입을 선택합니다. **VPC 호스팅** 엔드포인트에 대한 내용은 [Virtual Private Cloud(VPC)에 서버 생성](create-server-in-vpc.md) 섹션을 참조하세요.

   1.  **IP 주소 유형**에서 이전 버전과의 호환성을 위해 **IPv4**(기본값)를 선택하거나 엔드포인트에 대한 IPv4 및 IPv6 연결을 모두 활성화하려면 **듀얼 스택**을 선택합니다.
**참고**  
듀얼 스택 모드를 사용하면 Transfer Family 엔드포인트가 IPv4 및 IPv6 지원 클라이언트와 모두 통신할 수 있습니다. 따라서 한 번에 모두 전환할 필요 없이 IPv4 기반 시스템에서 IPv6 기반 시스템으로 점진적으로 전환할 수 있습니다.

   1. (옵션) **맞춤 호스트 이름**의 경우 **없음**을 선택합니다.

      에서 제공하는 서버 호스트 이름을 가져옵니다 AWS Transfer Family. 서버 호스트 이름은 `serverId.server.transfer.regionId.amazonaws.com` 형식을 취합니다.

      맞춤 호스트 이름의 경우 서버 엔드포인트의 맞춤 별칭을 지정합니다. 사용자 지정 호스트 이름 사용에 대한 자세한 내용은 [사용자 지정 호스트 이름으로 작업](requirements-dns.md)를 참조하세요.

   1. (옵션) **FIPS 지원**의 경우 **FIPS 지원 엔드포인트** 확인란을 선택하여 엔드포인트가 미연방 정보 처리 표준(FIPS)를 준수하는지 확인합니다.
**참고**  
FIPS 지원 엔드포인트는 북미 AWS 리전에서만 사용할 수 있습니다. 사용할 수 있는 리전은 *AWS 일반 참조*의 [AWS Transfer Family 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/transfer-service.html)을 참조하세요. FIPS에 대한 자세한 설명은 [미연방 정보 처리 표준(FIPS) 140-2](https://aws.amazon.com/compliance/fips/)를 참조하세요.

   1. **다음**을 선택합니다.

1. **도메인 선택** 페이지에서 선택한 프로토콜을 통해 데이터를 저장하고 액세스하는 데 사용할 AWS 스토리지 서비스를 선택합니다.
   + 선택한 프로토콜을 통해 파일을 객체로 저장하고 액세스하려면 **Amazon S3**를 선택하세요.
   + 선택한 프로토콜을 통해 **Amazon EFS** 파일 시스템에 파일을 저장하고 액세스하려면 Amazon EFS를 선택합니다.

   **다음**을 선택합니다.

1. **추가 상세 정보 구성**에서 다음을 수행합니다.

   1. 로깅의 경우 기존 로그 그룹을 지정하거나 새 로그 그룹을 생성합니다(기본 옵션). 기존 로그 그룹을 선택하는 경우와 연결된 로그 그룹을 선택해야 합니다 AWS 계정.  
![\[서버 생성 마법사의 추가 세부 정보 구성을 위한 로깅 창 기존 로그 그룹 선택이 선택되었습니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/logging-server-choose-existing-group.png)

      **로그 그룹 생성**을 선택하면 CloudWatch 콘솔 [(](https://console.aws.amazon.com/cloudwatch/)https://console.aws.amazon.com/cloudwatch/)에서 로그 그룹 **생성** 페이지가 열립니다. 자세한 내용은 [CloudWatch Logs의 로그 그룹 생성](https://docs.aws.amazon.com//AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#Create-Log-Group)을 참조하세요.

   1.  (옵션) **관리형 워크플로**의 경우 워크플로를 실행할 때 Transfer Family가 맡아야 하는 워크플로 ID(및 해당 역할)를 선택합니다. 업로드 완료 시 실행할 워크플로 하나와 부분 업로드 시 실행할 워크플로 하나를 선택할 수 있습니다. 관리형 워크플로를 사용하여 파일을 처리하는 방법에 대한 자세한 내용은 [AWS Transfer Family 관리형 워크플로](transfer-workflows.md)를 참조하세요.  
![\[관리형 워크플로 콘솔 섹션.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/workflows-addtoserver.png)

   1. **암호화 알고리즘 옵션**의 경우 서버에서 사용하도록 설정된 암호화 알고리즘이 포함된 보안 정책을 선택합니다. 최신 보안 정책은 기본값입니다. 자세한 내용은 섹션을 참조하세요[AWS Transfer Family 서버에 대한 보안 정책](security-policies.md).

   1. (옵션) **서버 호스트 키**의 경우 클라이언트가 SFTP를 통해 서버에 연결할 때 서버를 식별하는 데 사용할 RSA, ED25519 또는 ECDSA 프라이빗 키를 입력하세요. (옵션) 설명을 추가하여 여러 서버 호스트 키를 구분합니다.

      서버를 생성한 후 호스트 키를 추가할 수 있습니다. 키를 교체하거나 RSA 키와 ECDSA 키 같은 다양한 타입의 키를 사용하려는 경우 호스트 키가 여러 개 있으면 유용합니다.
**참고**  
**서버 호스트 키** 섹션은 기존 SFTP 지원 서버에서 사용자를 마이그레이션하는 데만 사용됩니다.

   1. (옵션) **태그**의 **키** 및 **값**에서 하나 이상의 태그를 키-값 쌍을 입력한 다음 **태그 추가**를 선택합니다.

   1. **다음**을 선택합니다.

   1. Amazon S3 디렉터리의 성능을 최적화할 수 있습니다. 예를 들어 홈 디렉터리로 이동하여 하위 디렉터리가 10,000개 있다고 가정해 보겠습니다. 즉, Amazon S3 버킷에는 10,000개의 폴더가 있습니다. 이 시나리오에서 `ls` (list) 명령을 실행하면 목록 작업이 6\$18분 정도 걸립니다. 그러나 디렉터리를 최적화하는 경우이 작업은 몇 초 밖에 걸리지 않습니다.

      콘솔을 사용하여 서버를 생성하면 최적화된 디렉터리가 기본적으로 활성화됩니다. API를 사용하여 서버를 생성하는 경우이 동작은 기본적으로 활성화되지 않습니다.  
![\[최적화된 디렉터리 콘솔 섹션.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/optimized-directories.png)

   1. (선택 사항) 조직 정책 또는 이용 약관과 같은 사용자 지정 메시지를 최종 사용자에게 표시하도록 AWS Transfer Family 서버를 구성합니다. **디스플레이 배너**의 경우 **사전 인증 디스플레이 배너** 텍스트 상자에 사용자가 인증하기 전에 표시할 텍스트 메시지를 입력합니다.

   1. (옵션) 다음 추가 옵션을 구성할 수 있습니다.
      + **SetStat 옵션**: 이 옵션을 사용하여 Amazon S3 버킷에 업로드하는 파일에 대해 클라이언트가 `SETSTAT`를 사용하려고 할 때 생성되는 오류를 무시합니다. 자세한 설명은 [ProtocolDetails](https://docs.aws.amazon.com/transfer/latest/APIReference/API_ProtocolDetails.html) 주제의 `SetStatOption` 설명서를 참조하세요.
      + **TLS 세션 재개**: 이 옵션은 FTPS를 이 서버의 프로토콜 중 하나로 활성화한 경우에만 사용할 수 있습니다.
      + **패시브 IP**: 이 옵션은 FTPS 또는 FTP를 이 서버의 프로토콜 중 하나로 활성화한 경우에만 사용할 수 있습니다.  
![\[서버 세부 정보 페이지의 추가 옵션 화면입니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/create-server-configure-additional-items-sftp.png)

1. **검토 및 생성**에서 옵션을 검토합니다.
   + 모든 항목을 편집하려면 단계 옆에 있는 **편집**을 선택합니다.
**참고**  
편집하기로 선택한 단계 이후의 각 단계를 검토해야 합니다.
   + 변경 사항이 없는 경우 **서버 생성**을 선택하여 서버를 생성하세요. **서버** 페이지로 이동하고, 새 서버가 나열되는 다음 화면이 표시됩니다.

새 서버 상태가 **온라인**으로 변경되기까지 몇 분 정도 걸릴 수 있습니다. 이때 서버에서 파일 작업을 수행할 수 있지만 먼저 사용자를 만들어야 합니다. 사용자 생성에 대한 자세한 내용은 섹션을 참조하세요[서버 엔드포인트에 대한 사용자 관리](create-user.md).

# FTPS 지원 서버 생성
<a name="create-server-ftps"></a>

SSL을 통한 파일 전송 프로토콜(FTPS)은 FTP의 확장입니다. 전송 계층 보안(TLS) 및 Sockets Layer(SSL) 암호화 프로토콜을 사용하여 트래픽을 암호화합니다. FTPS를 사용하면 통제 및 데이터 채널 연결을 동시에 또는 개별적으로 암호화할 수 있습니다.

**참고**  
Network Load Balancer에 대한 중요한 고려 사항은 섹션을 참조하세요[NLBs와 NATs를 AWS Transfer Family 서버 앞에 배치하지 마세요.](infrastructure-security.md#nlb-considerations).

**FTPS 지원 서버를 만들려면**

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

1. **프로토콜 선택**에서 **FTPS**를 선택합니다.

   **서버 인증서**에서 클라이언트가 FTPS를 통해 연결할 때 서버를 식별하는 데 사용할 AWS Certificate Manager (ACM)에 저장된 인증서를 선택한 **후 다음을** 선택합니다.

   새 퍼블릭 인증서를 요청하려면 *AWS Certificate Manager 사용 설명서*의 [퍼블릭 인증서 요청](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html)을 참조하세요.

   기존 인증서를 ACM으로 가져오려면 *AWS Certificate Manager 사용 설명서*의 [ACM으로 인증서 가져오기](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html)를 참조하세요.

   프라이빗 IP 주소를 통해 FTPS를 사용하도록 프라이빗 인증서를 요청하려면 *AWS Certificate Manager 사용 설명서*의 [프라이빗 인증서 요청](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-private.html)을 참조하세요.

   다음 암호화 알고리즘 및 키 크기를 사용하는 인증서가 지원됩니다:
   + 2048비트 RSA(RSA\$12048)
   + 4096비트 RSA(RSA\$14096)
   + 타원 프라임 곡선 256비트(EC\$1prime256v1)
   + 타원 프라임 곡선 384 비트(EC\$1secp384r1)
   + 타원 프라임 곡선 521비트(EC\$1secp521r1)
**참고**  
인증서는 FQDN 또는 IP 주소가 지정된 유효한 SSL/TLS X.509 버전 3 인증서여야 하며 발급자에 대한 정보가 포함되어야 합니다.

1. **자격 증명 공급자 선택**에서 사용자 액세스를 관리하는 데 사용할 자격 증명 공급자를 선택합니다. 다음과 같은 옵션이 있습니다:
   + **AWS Directory Service for Microsoft Active Directory** - 엔드포인트에 액세스할 Directory Service 디렉터리를 제공합니다. 그러면 Active Directory에 저장된 자격 증명을 사용하여 사용자를 인증할 수 있습니다. 자격 AWS Managed Microsoft AD 증명 공급자 작업에 대한 자세한 내용은 섹션을 참조하세요[Microsoft Active Directory용 AWS Directory Service 사용](directory-services-users.md).
**참고**  
 교차 계정 및 공유 디렉터리는에서 지원되지 않습니다 AWS Managed Microsoft AD.
Directory Service를 자격 증명 공급자로 사용하여 서버를 설정하려면 몇 가지 Directory Service 권한을 추가해야 합니다. 자세한 내용은 [사용을 시작하기 전에 AWS Directory Service for Microsoft Active Directory](directory-services-users.md#managed-ad-prereq)을 참조하세요.
   + **맞춤 ID 공급자** – 다음 옵션 중 하나를 선택합니다.
     + ** AWS Lambda 를 사용하여 자격 증명 공급자 연결 **- Lambda 함수가 지원하는 기존 자격 증명 공급자를 사용할 수 있습니다. 귀하는 Lambda 함수의 명칭을 제공합니다. 자세한 내용은 [AWS Lambda 를 사용하여 자격 증명 공급자 통합](custom-lambda-idp.md)를 참조하세요.
     + **Amazon API Gateway를 사용하는 자격 증명 공급자 연결** - Lambda 함수가 지원하는 API Gateway 방법을 생성하여 자격 증명 공급자로 사용할 수 있습니다. 사용자는 Amazon API Gateway URL과 호출 역할을 제공합니다. 자세한 내용은 [Amazon API Gateway를 ID 제공자 통합에 사용](authentication-api-gateway.md)를 참조하세요.  
![\[맞춤 ID 공급자가 선택된 ID 공급자 선택콘솔 섹션.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/custom-lambda-console-no-sftp.png)

1. **다음**을 선택합니다.

1. **엔드포인트 선택**에서 다음을 수행합니다.
**참고**  
 Transfer Family용 FTPS 서버는 포트 21(제어 채널) 및 포트 범위 8192-8200(데이터 채널)을 통해 작동합니다.

   1. **엔드포인트 타입**에서 서버의 엔드포인트를 호스팅할 **VPC 호스팅** 엔드포인트 타입을 선택합니다. VPC 호스팅 엔드포인트를 설정하는 자세한 설명은 [Virtual Private Cloud(VPC)에 서버 생성](create-server-in-vpc.md) 섹션을 참조하세요.
**참고**  
공적 액세스 가능 엔드포인트는 지원되지 않습니다.

   1. (옵션) **FIPS 지원**의 경우 **FIPS 지원 엔드포인트** 확인란을 선택하여 엔드포인트가 미연방 정보 처리 표준(FIPS)를 준수하는지 확인합니다.
**참고**  
FIPS 지원 엔드포인트는 북미 AWS 리전에서만 사용할 수 있습니다. 사용할 수 있는 리전은 *AWS 일반 참조*의 [AWS Transfer Family 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/transfer-service.html)을 참조하세요. FIPS에 대한 자세한 설명은 [미연방 정보 처리 표준(FIPS) 140-2](https://aws.amazon.com/compliance/fips/)를 참조하세요.

   1. **다음**을 선택합니다.  
![\[VPC 호스팅이 선택된 엔드포인트 선택 콘솔 섹션.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/create-server-choose-endpoint-vpc-internal.png)

1. **도메인 선택** 페이지에서 선택한 프로토콜을 통해 데이터를 저장하고 액세스하는 데 사용할 AWS 스토리지 서비스를 선택합니다.
   + 선택한 프로토콜을 통해 파일을 객체로 저장하고 액세스하려면 **Amazon S3**를 선택하세요.
   + 선택한 프로토콜을 통해 **Amazon EFS** 파일 시스템에 파일을 저장하고 액세스하려면 Amazon EFS를 선택합니다.

   **다음**을 선택합니다.

1. **추가 상세 정보 구성**에서 다음을 수행합니다.

   1. 로깅의 경우 기존 로그 그룹을 지정하거나 새 로그 그룹을 생성합니다(기본 옵션).  
![\[서버 생성 마법사의 추가 세부 정보 구성을 위한 로깅 창 기존 로그 그룹 선택이 선택되었습니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/logging-server-choose-existing-group.png)

      **로그 그룹 생성**을 선택하면 CloudWatch 콘솔 [(](https://console.aws.amazon.com/cloudwatch/)https://console.aws.amazon.com/cloudwatch/)에서 로그 그룹 **생성** 페이지가 열립니다. 자세한 내용은 [CloudWatch Logs의 로그 그룹 생성](https://docs.aws.amazon.com//AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#Create-Log-Group)을 참조하세요.

   1.  (옵션) **관리형 워크플로**의 경우 워크플로를 실행할 때 Transfer Family가 맡아야 하는 워크플로 ID(및 해당 역할)를 선택합니다. 업로드 완료 시 실행할 워크플로 하나와 부분 업로드 시 실행할 워크플로 하나를 선택할 수 있습니다. 관리형 워크플로를 사용하여 파일을 처리하는 방법에 대한 자세한 내용은 [AWS Transfer Family 관리형 워크플로](transfer-workflows.md)를 참조하세요.  
![\[관리형 워크플로 콘솔 섹션.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/workflows-addtoserver.png)

   1. **암호화 알고리즘 옵션**의 경우 서버에서 사용하도록 설정된 암호화 알고리즘이 포함된 보안 정책을 선택합니다. 최신 보안 정책은 기본값입니다. 자세한 내용은 섹션을 참조하세요[AWS Transfer Family 서버에 대한 보안 정책](security-policies.md).

   1. **서버 호스트 키**의 경우 비워 두세요.

   1. (옵션) **태그**의 **키** 및 **값**에서 하나 이상의 태그를 키-값 쌍을 입력한 다음 **태그 추가**를 선택합니다.

   1. Amazon S3 디렉터리의 성능을 최적화할 수 있습니다. 예를 들어 홈 디렉터리로 이동하여 하위 디렉터리가 10,000개 있다고 가정해 보겠습니다. 즉, Amazon S3 버킷에는 10,000개의 폴더가 있습니다. 이 시나리오에서 `ls` (list) 명령을 실행하면 목록 작업이 6\$18분 정도 걸립니다. 그러나 디렉터리를 최적화하는 경우이 작업은 몇 초 밖에 걸리지 않습니다.

      콘솔을 사용하여 서버를 생성하면 최적화된 디렉터리가 기본적으로 활성화됩니다. API를 사용하여 서버를 생성하는 경우이 동작은 기본적으로 활성화되지 않습니다.  
![\[최적화된 디렉터리 콘솔 섹션.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/optimized-directories.png)

   1. **다음**을 선택합니다.

   1. (선택 사항) 조직 정책 또는 이용 약관과 같은 사용자 지정 메시지를 최종 사용자에게 표시하도록 AWS Transfer Family 서버를 구성할 수 있습니다. 인증을 성공적으로 완료한 사용자에게 맞춤된 오늘의 메시지(MOTD)를 표시할 수도 있습니다.

      **디스플레이 배너**의 경우 **사전 인증 디스플레이 배너** 텍스트 상자에 사용자가 인증하기 전에 표시할 텍스트 메시지를 입력하고, **인증 후 디스플레이 배너** 텍스트 상자에는 인증에 성공한 후 사용자에게 표시할 텍스트를 입력합니다.

   1. (옵션) 다음 추가 옵션을 구성할 수 있습니다.
      + **SetStat 옵션**: 이 옵션을 사용하여 Amazon S3 버킷에 업로드하는 파일에 대해 클라이언트가 `SETSTAT`를 사용하려고 할 때 생성되는 오류를 무시합니다. 자세한 설명은 [ProtocolDetails](https://docs.aws.amazon.com/transfer/latest/APIReference/API_ProtocolDetails.html) 주제의 `SetStatOption` 설명서를 참조하세요.
      + **TLS 세션 재개**: FTPS 세션에 대한 통제 및 데이터 연결 간에 협상된 암호 키를 재개하거나 공유하는 메커니즘을 제공합니다. 자세한 설명은 [ProtocolDetails](https://docs.aws.amazon.com/transfer/latest/APIReference/API_ProtocolDetails.html) 주제의 `TlsSessionResumptionMode` 설명서를 참조하세요.
      + **수동 IP**: FTP 및 FTPS 프로토콜에 대한 수동 모드를 나타냅니다. 방화벽, 라우터 또는 로드 밸런서의 퍼블릭 IP 주소와 같은 단일 IPv4 주소를 입력합니다. 자세한 설명은 [ProtocolDetails](https://docs.aws.amazon.com/transfer/latest/APIReference/API_ProtocolDetails.html) 주제의 `PassiveIp` 설명서를 참조하세요.  
![\[SetStat, TLS 세션 재개 및 수동 IP 파라미터를 보여주는 추가 구성 화면입니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/create-server-configure-additional-items-all.png)

1. **검토 및 생성**에서 옵션을 검토합니다.
   + 모든 항목을 편집하려면 단계 옆에 있는 **편집**을 선택합니다.
**참고**  
편집하기로 선택한 단계 이후의 각 단계를 검토해야 합니다.
   + 변경 사항이 없는 경우 **서버 생성**을 선택하여 서버를 생성하세요. **서버** 페이지로 이동하고, 새 서버가 나열되는 다음 화면이 표시됩니다.

새 서버 상태가 **온라인**으로 변경되기까지 몇 분 정도 걸릴 수 있습니다. 이때부터 서버는 사용자의 파일 작업을 수행할 수 있습니다.

**다음 단계**: 다음 단계에서는 [사용자 지정 자격 증명 공급자와 작업](custom-idp-intro.md)를 계속 진행하여 사용자를 설정하세요.

# FTP 지원 서버 생성
<a name="create-server-ftp"></a>

파일 전송 프로토콜(FTP)은 데이터 전송에 사용되는 네트워크 프로토콜입니다. FTP는 통제 및 데이터 전송에 별도의 채널을 사용합니다. 통제 채널은 종료되거나 비활성 제한 시간이 초과될 때까지 열려 있습니다. 데이터 채널은 전송 기간 동안 활성 상태입니다. FTP는 일반 텍스트를 사용하며 트래픽 암호화를 지원하지 않습니다.

**참고**  
FTP를 활성화할 때는 VPC 호스팅 엔드포인트에 대한 내부 액세스 옵션을 선택해야 합니다. 서버가 퍼블릭 네트워크를 통과하는 데이터가 필요한 경우 SFTP 또는 FTPS와 같은 보안 프로토콜을 사용해야 합니다.

**참고**  
Network Load Balancer에 대한 중요한 고려 사항은 섹션을 참조하세요[NLBs와 NATs를 AWS Transfer Family 서버 앞에 배치하지 마세요.](infrastructure-security.md#nlb-considerations).

**FTP 지원 서버를 만들려면**

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

1. **프로토콜 선택에서** **FTP**를 선택하고 **다음**을 선택합니다.

1. **자격 증명 공급자 선택**에서 사용자 액세스를 관리하는 데 사용할 자격 증명 공급자를 선택합니다. 다음과 같은 옵션이 있습니다:
   + **AWS Directory Service for Microsoft Active Directory** - 엔드포인트에 액세스할 Directory Service 디렉터리를 제공합니다. 그러면 Active Directory에 저장된 자격 증명을 사용하여 사용자를 인증할 수 있습니다. 자격 AWS Managed Microsoft AD 증명 공급자 작업에 대한 자세한 내용은 섹션을 참조하세요[Microsoft Active Directory용 AWS Directory Service 사용](directory-services-users.md).
**참고**  
 교차 계정 및 공유 디렉터리는에서 지원되지 않습니다 AWS Managed Microsoft AD.
Directory Service를 자격 증명 공급자로 사용하여 서버를 설정하려면 몇 가지 Directory Service 권한을 추가해야 합니다. 자세한 내용은 [사용을 시작하기 전에 AWS Directory Service for Microsoft Active Directory](directory-services-users.md#managed-ad-prereq)을 참조하세요.
   + **맞춤 ID 공급자** – 다음 옵션 중 하나를 선택합니다.
     + ** AWS Lambda 를 사용하여 자격 증명 공급자 연결 **- Lambda 함수가 지원하는 기존 자격 증명 공급자를 사용할 수 있습니다. 귀하는 Lambda 함수의 명칭을 제공합니다. 자세한 내용은 [AWS Lambda 를 사용하여 자격 증명 공급자 통합](custom-lambda-idp.md)를 참조하세요.
     + **Amazon API Gateway를 사용하는 자격 증명 공급자 연결** - Lambda 함수가 지원하는 API Gateway 방법을 생성하여 자격 증명 공급자로 사용할 수 있습니다. 사용자는 Amazon API Gateway URL과 호출 역할을 제공합니다. 자세한 내용은 [Amazon API Gateway를 ID 제공자 통합에 사용](authentication-api-gateway.md)를 참조하세요.  
![\[맞춤 ID 공급자가 선택된 ID 공급자 선택콘솔 섹션.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/custom-lambda-console-no-sftp.png)

1. **다음**을 선택합니다.

1. **엔드포인트 선택**에서 다음을 수행합니다.
**참고**  
Transfer Family용 FTP 및 FTPS 서버는 포트 21(제어 채널) 및 포트 범위 8192-8200(데이터 채널)을 통해 작동합니다.

   1. **엔드포인트 타입**에서 서버의 엔드포인트를 호스팅할 **VPC 호스팅**을 선택합니다. VPC 호스팅 엔드포인트를 설정하는 자세한 설명은 [Virtual Private Cloud(VPC)에 서버 생성](create-server-in-vpc.md) 섹션을 참조하세요.
**참고**  
공적 액세스 가능 엔드포인트는 지원되지 않습니다.

   1. **FIPS 지원**의 경우 **FIPS 지원 엔드포인트** 확인란의 선택을 취소한 상태로 유지합니다.
**참고**  
FIPS 지원 엔드포인트는 FTP 서버에서 지원되지 않습니다.

   1. **다음**을 선택합니다.  
![\[VPC 호스팅이 선택된 엔드포인트 선택 콘솔 섹션.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/create-server-choose-endpoint-vpc-internal.png)

1. **도메인 선택** 페이지에서 선택한 프로토콜을 통해 데이터를 저장하고 액세스하는 데 사용할 AWS 스토리지 서비스를 선택합니다.
   + 선택한 프로토콜을 통해 파일을 객체로 저장하고 액세스하려면 **Amazon S3**를 선택하세요.
   + 선택한 프로토콜을 통해 **Amazon EFS** 파일 시스템에 파일을 저장하고 액세스하려면 Amazon EFS를 선택합니다.

   **다음**을 선택합니다.

1. **추가 상세 정보 구성**에서 다음을 수행합니다.

   1. 로깅의 경우 기존 로그 그룹을 지정하거나 새 로그 그룹을 생성합니다(기본 옵션).  
![\[서버 생성 마법사의 추가 세부 정보 구성을 위한 로깅 창 기존 로그 그룹 선택이 선택되었습니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/logging-server-choose-existing-group.png)

      **로그 그룹 생성**을 선택하면 CloudWatch 콘솔 [(](https://console.aws.amazon.com/cloudwatch/)https://console.aws.amazon.com/cloudwatch/)에서 로그 그룹 **생성** 페이지가 열립니다. 자세한 내용은 [CloudWatch Logs의 로그 그룹 생성](https://docs.aws.amazon.com//AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#Create-Log-Group)을 참조하세요.

   1.  (옵션) **관리형 워크플로**의 경우 워크플로를 실행할 때 Transfer Family가 맡아야 하는 워크플로 ID(및 해당 역할)를 선택합니다. 업로드 완료 시 실행할 워크플로 하나와 부분 업로드 시 실행할 워크플로 하나를 선택할 수 있습니다. 관리형 워크플로를 사용하여 파일을 처리하는 방법에 대한 자세한 내용은 [AWS Transfer Family 관리형 워크플로](transfer-workflows.md)를 참조하세요.  
![\[관리형 워크플로 콘솔 섹션.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/workflows-addtoserver.png)

   1. **암호화 알고리즘 옵션**의 경우 서버에서 사용하도록 설정된 암호화 알고리즘이 포함된 보안 정책을 선택합니다.
**참고**  
Transfer Family는 FTP 서버에 최신 보안 정책을 할당합니다. 그러나 FTP 프로토콜은 암호화를 사용하지 않으므로 FTP 서버는 보안 정책 알고리즘을 사용하지 않습니다. 서버에서 FTPS 또는 SFTP 프로토콜도 사용하지 않는 한 보안 정책은 사용되지 않습니다.

   1. **서버 호스트 키**의 경우 비워 두세요.

   1. (옵션) **태그**의 **키** 및 **값**에서 하나 이상의 태그를 키-값 쌍을 입력한 다음 **태그 추가**를 선택합니다.

   1. Amazon S3 디렉터리의 성능을 최적화할 수 있습니다. 예를 들어 홈 디렉터리로 이동하고 하위 디렉터리가 10,000개 있다고 가정해 보겠습니다. 즉, Amazon S3 버킷에는 10,000개의 폴더가 있습니다. 이 시나리오에서 `ls` (list) 명령을 실행하면 목록 작업이 6\$18분 정도 걸립니다. 그러나 디렉터리를 최적화하는 경우이 작업은 몇 초 밖에 걸리지 않습니다.

      콘솔을 사용하여 서버를 생성하면 최적화된 디렉터리가 기본적으로 활성화됩니다. API를 사용하여 서버를 생성하는 경우이 동작은 기본적으로 활성화되지 않습니다.  
![\[최적화된 디렉터리 콘솔 섹션.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/optimized-directories.png)

   1. **다음**을 선택합니다.

   1. (선택 사항) 조직 정책 또는 이용 약관과 같은 사용자 지정 메시지를 최종 사용자에게 표시하도록 AWS Transfer Family 서버를 구성할 수 있습니다. 인증을 성공적으로 완료한 사용자에게 맞춤된 오늘의 메시지(MOTD)를 표시할 수도 있습니다.

      **디스플레이 배너**의 경우 **사전 인증 디스플레이 배너** 텍스트 상자에 사용자가 인증하기 전에 표시할 텍스트 메시지를 입력하고, **인증 후 디스플레이 배너** 텍스트 상자에는 인증에 성공한 후 사용자에게 표시할 텍스트를 입력합니다.

   1. (옵션) 다음 추가 옵션을 구성할 수 있습니다.
      + **SetStat 옵션**: 이 옵션을 사용하여 Amazon S3 버킷에 업로드하는 파일에 대해 클라이언트가 `SETSTAT`를 사용하려고 할 때 생성되는 오류를 무시합니다. 자세한 설명은 [ProtocolDetails](https://docs.aws.amazon.com/transfer/latest/APIReference/API_ProtocolDetails.html) 주제의 `SetStatOption` 설명서를 참조하세요.
      + **TLS 세션 재개**: FTPS 세션에 대한 통제 및 데이터 연결 간에 협상된 암호 키를 재개하거나 공유하는 메커니즘을 제공합니다. 자세한 설명은 [ProtocolDetails](https://docs.aws.amazon.com/transfer/latest/APIReference/API_ProtocolDetails.html) 주제의 `TlsSessionResumptionMode` 설명서를 참조하세요.
      + **수동 IP**: FTP 및 FTPS 프로토콜에 대한 수동 모드를 나타냅니다. 방화벽, 라우터 또는 로드 밸런서의 퍼블릭 IP 주소와 같은 단일 IPv4 주소를 입력합니다. 자세한 설명은 [ProtocolDetails](https://docs.aws.amazon.com/transfer/latest/APIReference/API_ProtocolDetails.html) 주제의 `PassiveIp` 설명서를 참조하세요.  
![\[SetStat, TLS 세션 재개 및 수동 IP 파라미터를 보여주는 추가 구성 화면입니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/create-server-configure-additional-items-all.png)

1. **검토 및 생성**에서 옵션을 검토합니다.
   + 모든 항목을 편집하려면 단계 옆에 있는 **편집**을 선택합니다.
**참고**  
편집하기로 선택한 단계 이후의 각 단계를 검토해야 합니다.
   + 변경 사항이 없는 경우 **서버 생성**을 선택하여 서버를 생성하세요. **서버** 페이지로 이동하고, 새 서버가 나열되는 다음 화면이 표시됩니다.

새 서버 상태가 **온라인**으로 변경되기까지 몇 분 정도 걸릴 수 있습니다. 이때부터 서버는 사용자의 파일 작업을 수행할 수 있습니다.

**다음 단계** - 그 다음 단계에서는 [사용자 지정 자격 증명 공급자와 작업](custom-idp-intro.md)로 계속 진행하여 사용자를 설정하세요.

# Virtual Private Cloud(VPC)에 서버 생성
<a name="create-server-in-vpc"></a>

가상 사설 클라우드(VPC) 내에 서버의 엔드포인트를 호스팅하여 퍼블릭 인터넷을 거치지 않고 Amazon S3 버킷 또는 Amazon EFS 파일 시스템과 데이터를 주고 받는 데 사용할 수 있습니다.

**참고**  
 2021년 5월 19일 이후에는 2021년 5월 19일 이전에 AWS 계정이 아직 생성하지 않은 경우 계정`EndpointType=VPC_ENDPOINT`에서를 사용하여 서버를 생성할 수 없습니다. 2021년 2월 21일 또는 그 이전에 `EndpointType=VPC_ENDPOINT` AWS 계정에가 있는 서버를 이미 생성한 경우 영향을 받지 않습니다. 이 날짜 이후에는 `EndpointType`=**VPC**를 사용하세요. 자세한 내용은 [VPC\$1ENDPOINT 사용 중단](#deprecate-vpc-endpoint) 단원을 참조하십시오.

Amazon Virtual Private Cloud(VPC)를 사용하여 AWS 리소스를 호스팅하는 경우 VPC와 서버 간에 프라이빗 연결을 설정할 수 있습니다. 그러면 퍼블릭 IP 주소 지정을 사용하거나 인터넷 게이트웨이 필요 없이 이 서버를 사용하여 클라이언트를 통해 Amazon S3 버킷과 데이터를 주고 받을 수 있습니다.

Amazon VPC를 사용하면 사용자 지정 가상 네트워크에서 AWS 리소스를 시작할 수 있습니다. VPC를 사용하여 IP 주소 범위, 서브넷, 라우팅 테이블, 네트워크 게이트웨이 등의 네트워크 설정을 제어할 수 있습니다. VPC에 대한 자세한 내용은 *Amazon VPC 사용 설명서*의 [Amazon VPC란 무엇인가요?](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)를 참조하세요.

다음 섹션에는 VPC를 생성하고 서버에 연결하는 방법에 대한 지침이 나와 있습니다. 개요로 다음과 같이 이 작업을 수행합니다.

1. VPC 엔드포인트를 사용하여 서버를 설정합니다.

1. 그런 다음 VPC 엔드포인트를 통해 VPC 내부에 있는 클라이언트를 사용하여 서버에 연결합니다. 이렇게 하면 AWS Transfer Family를 사용하여 Amazon S3 버킷에 저장된 데이터를 클라이언트를 통해 전송할 수 있습니다. 네트워크와 퍼블릭 인터넷 연결이 끊긴 경우에도 이 전송을 수행할 수 있습니다.

1.  또한 서버의 엔드포인트를 인터넷에 연결하도록 선택한 경우 탄력적 IP 주소를 엔드포인트와 연결할 수 있습니다. 이렇게 하면 VPC 외부의 클라이언트가 서버에 연결할 수 있습니다. VPC 보안 그룹을 사용하여 허용된 주소에서만 요청을 보내는 인증된 사용자에 대한 액세스를 제어할 수 있습니다.

**참고**  
AWS Transfer Family 는 듀얼 스택 엔드포인트를 지원하므로 서버가 IPv4와 IPv6를 통해 통신할 수 있습니다. 듀얼 스택 지원을 활성화하려면 VPC **엔드포인트를 생성할 때 DNS 듀얼 스택 엔드포인트 활성화** 옵션을 선택합니다. 이 기능을 사용하려면 먼저 IPv6를 지원하도록 VPC와 서브넷을 모두 구성해야 합니다. 듀얼 스택 지원은 두 프로토콜 중 하나를 사용하여 연결해야 하는 클라이언트가 있는 경우에 특히 유용합니다.  
듀얼 스택(IPv4 및 IPv6) 서버 엔드포인트에 대한 자세한 내용은 섹션을 참조하세요[Transfer Family 서버에 대한 IPv6 지원](ipv6-support.md).

**Topics**
+ [VPC 내에서만 액세스할 수 있는 서버 엔드포인트 생성](#create-server-endpoint-in-vpc)
+ [서버용 인터넷 경계 엔드포인트 생성](#create-internet-facing-endpoint)
+ [서버의 엔드포인트 타입 변경](#change-server-endpoint-type)
+ [VPC\$1ENDPOINT 사용 중단](#deprecate-vpc-endpoint)
+ [Transfer Family 서버에 대한 VPC 엔드포인트 액세스 제한](#limit-vpc-endpoint-access)
+ [추가 네트워킹 기능](#additional-networking-features)
+ [AWS Transfer Family 서버 엔드포인트 유형을 VPC\$1ENDPOINT에서 VPC로 업데이트](update-endpoint-type-vpc.md)

## VPC 내에서만 액세스할 수 있는 서버 엔드포인트 생성
<a name="create-server-endpoint-in-vpc"></a>

다음 절차에서는 VPC 내 리소스에만 액세스할 수 있는 서버 엔드포인트를 생성합니다.

**VPC 내부에 서버 엔드포인트를 생성하려면**

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

1. 탐색 창에서 **서버**를 선택한 다음 **서버 생성**을 선택합니다.

1. **프로토콜 선택**에서 하나 이상의 프로토콜을 선택한 후 **다음**을 선택합니다. 프로토콜에 대한 자세한 내용은 [2단계: SFTP 지원 서버 생성](getting-started.md#getting-started-server)를 참조하세요.

1. 자격 **증명 공급자 선택**에서 사용자 자격 증명과 키를 저장할 **서비스 관리**형을 선택한 **후 다음을** AWS Transfer Family선택합니다.

   이 절차에서는 서비스 관리형 옵션을 사용합니다. **사용자 지정**을 선택하는 경우, Amazon API Gateway 엔드포인트와 AWS Identity and Access Management (IAM) 역할을 입력하여 엔드포인트에 액세스해야 합니다. 이렇게 하면 디렉터리 서비스를 통합해 사용자를 인증하고 승인할 수 있습니다. 사용자 지정 자격 증명 공급자와의 작업에 대한 자세한 내용은 [사용자 지정 자격 증명 공급자와 작업](custom-idp-intro.md)를 참조하세요.

1. **엔드포인트 선택**에서 다음을 수행합니다.

   1. **엔드포인트 타입**에서 서버의 엔드포인트를 호스팅할 **VPC 호스팅** 엔드포인트 타입을 선택합니다.

   1. **액세스**에서 **내부**를 선택하여 엔드포인트의 사설 IP 주소를 사용하는 클라이언트만 엔드포인트에 액세스할 수 있도록 합니다.

      **인터넷 연결** 옵션에 대한 자세한 내용은 [서버용 인터넷 경계 엔드포인트 생성](#create-internet-facing-endpoint)를 참조하세요. 내부 액세스 전용으로 VPC에 생성된 서버는 사용자 지정 호스트 이름을 지원하지 않습니다.

   1. **VPC**의 경우 기존 VPC ID를 선택하거나 **VPC 생성**을 선택하여 새 VPC를 생성합니다.

   1. **가용 영역** 섹션에서 가용 영역 및 관련 서브넷을 최대 3개까지 선택합니다.

   1. **보안 그룹** 섹션에서 기존 보안 그룹 ID 또는 ID를 선택하거나 **보안 그룹 생성**을 선택하여 새 보안 그룹을 생성합니다. 보안 그룹에 관한 자세한 내용은 *Amazon Virtual Private Cloud 사용 설명서*의 [VPC의 보안 그룹](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)을 참조하세요. 보안 그룹을 생성하려면 *Amazon Virtual Private Cloud 사용 설명서*의 [보안 그룹 생성](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#CreatingSecurityGroups)을 참조하세요.
**참고**  
VPC는 자동으로 기본 보안 그룹과 함께 제공됩니다. 서버를 시작할 때 다른 보안 그룹 또는 그룹을 지정하지 않을 경우 기본 보안 그룹이 서버에 연결됩니다.
      + 보안 그룹에 대한 인바운드 규칙의 경우 포트 22, 2222, 22000 또는 모든 조합을 사용하도록 SSH 트래픽을 구성할 수 있습니다. 포트 22는 기본적으로 구성됩니다. 포트 2222 또는 포트 22000을 사용하려면 보안 그룹에 인바운드 규칙을 추가합니다. 유형에 사용자 **지정 TCP**를 선택한 다음 **포트 범위에** **2222** 또는 **22000**를 입력하고 소스에 SSH 포트 22 규칙에 대해 보유한 것과 동일한 CIDR 범위를 입력합니다.
      + 보안 그룹에 대한 인바운드 규칙의 경우 제어 채널 및 **8192-8200** 데이터 채널**21**에 포트 **범위를** 사용하도록 FTP 및 FTPS 트래픽을 구성합니다.
**참고**  
TCP "piggy-back" ACKs 필요한 클라이언트에 포트 2223을 사용하거나 TCP 3방향 핸드셰이크의 최종 ack에도 데이터를 포함할 수 있습니다.  
일부 클라이언트 소프트웨어는 포트 2223과 호환되지 않을 수 있습니다. 예를 들어 클라이언트가 SFTP 식별 문자열을 전송하기 전에 서버가 필요한 클라이언트입니다.  
![\[포트 22의 SSH 및 포트 2222의 사용자 지정 TCP에 대한 규칙을 보여주는 샘플 보안 그룹의 인바운드 규칙입니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/alternate-port-rule.png)

   1. (옵션) **FIPS 지원**의 경우 **FIPS 지원 엔드포인트** 확인란을 선택하여 엔드포인트가 Federal Information Processing Standard(FIPS)를 준수하는지 확인합니다.
**참고**  
FIPS 지원 엔드포인트는 북미 AWS 리전에서만 사용할 수 있습니다. 사용할 수 있는 리전은 *AWS 일반 참조*의 [AWS Transfer Family 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/transfer-service.html)을 참조하세요. FIPS에 대한 자세한 설명은 [미연방 정보 처리 표준(FIPS) 140-2](https://aws.amazon.com/compliance/fips/)를 참조하세요.

   1. **다음**을 선택합니다.

1. **추가 상세 정보 구성**에서 다음을 수행합니다.

   1. **CloudWatch** 로깅의 경우 다음 중 하나를 선택하여 사용자 활동에 대한 Amazon CloudWatch 로깅을 활성화합니다.
      + 새 역할을 생성할 수 있는 적절한 권한이 있는 한 Transfer Family에서 자동으로 IAM 역할을 생성할 수 있도록 **새 역할을 생성**합니다. 생성된 IAM 역할을 `AWSTransferLoggingAccess`(이)라고 합니다.
      + 계정에서 기존 IAM 역할을 선택하려면 **기존 역할을 선택**합니다. **로깅 역할**에서 역할을 선택합니다. 이 IAM 역할에는 **서비스**가 `transfer.amazonaws.com`(으)로 설정된 신뢰 정책이 포함되어야 합니다.

        CloudWatch 로깅에 대한 자세한 내용은 [CloudWatch 로깅 역할 구성](configure-cw-logging-role.md)를 참조하세요.
**참고**  
로깅 역할을 지정하지 않으면 CloudWatch에서 최종 사용자 활동을 볼 수 없습니다.
CloudWatch 로깅 역할을 설정하지 않으려면 **기존 역할 선택**을 선택하고 로깅 역할은 선택하지 마세요.

   1. **암호화 알고리즘 옵션**의 경우 서버에서 사용하도록 설정된 암호화 알고리즘이 포함된 보안 정책을 선택합니다.
**참고**  
다른 정책을 선택하지 않는 한 `TransferSecurityPolicy-2024-01` 보안 정책이 기본적으로 서버에 연결됩니다.

      보안 정책에 대한 자세한 설명은 섹션을 참조하세요[AWS Transfer Family 서버에 대한 보안 정책](security-policies.md).

   1. (선택 사항:이 섹션은 기존 SFTP 지원 서버에서 사용자를 마이그레이션하는 경우에만 해당됩니다.) **서버 호스트 키**에 클라이언트가 SFTP를 통해 연결할 때 서버를 식별하는 데 사용할 RSA, ED25519 또는 ECDSA 프라이빗 키를 입력합니다.

   1. (옵션) **태그**의 **키** 및 **값**에서 하나 이상의 태그를 키-값 쌍을 입력한 다음 **태그 추가**를 선택합니다.

   1. **다음**을 선택합니다.

1. **검토 및 생성**에서 옵션을 검토합니다. 경우에 따라 다음 작업을 수행합니다.
   + 이들 중 하나를 편집하려면 단계 옆에 있는 **편집**을 선택합니다.
**참고**  
편집하기로 선택한 단계 이후의 각 단계를 검토해야 합니다.
   + 변경 사항이 없으면 **서버 생성**을 선택하여 서버를 생성합니다. **서버** 페이지로 이동하고, 새 서버가 나열되는 다음 화면이 표시됩니다.

새 서버 상태가 **온라인**으로 변경되기까지 몇 분 정도 걸릴 수 있습니다. 이때 서버에서 파일 작업을 수행할 수 있지만 먼저 사용자를 만들어야 합니다. 사용자 생성에 대한 자세한 내용은 섹션을 참조하세요[서버 엔드포인트에 대한 사용자 관리](create-user.md).

## 서버용 인터넷 경계 엔드포인트 생성
<a name="create-internet-facing-endpoint"></a>

다음 절차에서는 서버 엔드포인트를 만듭니다. 이 엔드포인트는 VPC의 기본 보안 그룹에서 원본 IP 주소를 허용하는 클라이언트만 인터넷을 통해 액세스할 수 있습니다. 또한 탄력적 IP 주소를 사용하여 엔드포인트가 인터넷 경계가 되도록 하면 클라이언트는 탄력적 IP 주소를 사용하여 방화벽에서 엔드포인트에 대한 액세스를 허용할 수 있습니다.

**참고**  
인터넷 경계 VPC 호스팅 엔드포인트에서는 SFTP와 FTPS만 사용할 수 있습니다.

**인터넷 경계 엔드포인트를 생성하려면**

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

1. 탐색 창에서 **서버**를 선택한 다음 **서버 생성**을 선택합니다.

1. **프로토콜 선택**에서 하나 이상의 프로토콜을 선택한 후 **다음**을 선택합니다. 프로토콜에 대한 자세한 내용은 [2단계: SFTP 지원 서버 생성](getting-started.md#getting-started-server)를 참조하세요.

1. 자격 **증명 공급자 선택**에서 사용자 자격 증명과 키를 저장할 **서비스 관리**형을 선택한 **후 다음을** AWS Transfer Family선택합니다.

   이 절차에서는 서비스 관리형 옵션을 사용합니다. **사용자 지정**을 선택하는 경우, Amazon API Gateway 엔드포인트와 AWS Identity and Access Management (IAM) 역할을 입력하여 엔드포인트에 액세스해야 합니다. 이렇게 하면 디렉터리 서비스를 통합해 사용자를 인증하고 승인할 수 있습니다. 사용자 지정 자격 증명 공급자와의 작업에 대한 자세한 내용은 [사용자 지정 자격 증명 공급자와 작업](custom-idp-intro.md)를 참조하세요.

1. **엔드포인트 선택**에서 다음을 수행합니다.

   1. **엔드포인트 타입**에서 서버의 엔드포인트를 호스팅할 **VPC 호스팅** 엔드포인트 타입을 선택합니다.

   1. **액세스**의 경우 **인터넷 연결**을 선택하여 클라이언트가 인터넷을 통해 엔드포인트에 액세스할 수 있게 합니다.
**참고**  
**인터넷 연결**을 선택하면 각 서브넷 또는 서브넷에서 기존 탄력적 IP 주소를 선택할 수 있습니다. 또는 VPC 콘솔([https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/))으로 이동하여 하나 이상의 새 탄력적 IP 주소를 할당할 수 있습니다. 이러한 주소는 AWS 또는 사용자가 소유할 수 있습니다. 이미 사용 중인 탄력적 IP 주소는 엔드포인트와 연결할 수 없습니다.

   1. (옵션) **사용자 지정 호스트 이름**의 경우 다음 중 하나를 선택합니다.
**참고**  
의 고객은 탄력적 IP 주소를 통해 직접 연결하거나 상용 Route 53 내에서 EIP를 가리키는 호스트 이름 레코드를 생성 AWS GovCloud (US) 해야 합니다. GovCloud 엔드포인트용 Route 53 사용에 대한 자세한 내용은 *AWS GovCloud (US) 사용 설명서*의 [AWS GovCloud (US) 리소스로 Amazon Route 53 설정을 참조하세요](https://docs.aws.amazon.com/govcloud-us/latest/UserGuide/setting-up-route53.html).
      + **Amazon Route 53 DNS 별칭** – 사용하려는 호스트 이름이 Route 53에 등록된 경우. 이후 호스트 이름을 입력하면 됩니다.
      + **기타 DNS** – 사용할 호스트 이름이 다른 DNS 공급자를 통해 등록된 경우. 이후 호스트 이름을 입력하면 됩니다.
      + **없음** – 서버의 엔드포인트를 사용하고 사용자 지정 호스트 이름은 사용하지 않을 경우. 서버 호스트 이름은 `server-id.server.transfer.region.amazonaws.com` 형식을 취합니다.
**참고**  
의 고객의 경우 **없음을** AWS GovCloud (US)선택하면이 형식으로 호스트 이름이 생성되지 않습니다.

      사용자 지정 호스트 이름 사용에 대한 자세한 내용은 [사용자 지정 호스트 이름으로 작업](requirements-dns.md)를 참조하세요.

   1. **VPC**의 경우 기존 VPC ID를 선택하거나 **VPC 생성**을 선택하여 새 VPC를 생성합니다.

   1. **가용 영역** 섹션에서 가용 영역 및 관련 서브넷을 최대 3개까지 선택합니다. **IPv4 주소**의 경우 각 서브넷의 **탄력적 IP 주소**를 선택합니다. 클라이언트가 방화벽에서 엔드포인트에 대한 액세스를 허용하는 데 사용할 수 있는 IP 주소입니다.

      **팁: **가용 영역에 퍼블릭 서브넷을 사용하거나 프라이빗 서브넷을 사용하려면 먼저 인터넷 게이트웨이를 설정해야 합니다.

   1. **보안 그룹** 섹션에서 기존 보안 그룹 ID 또는 ID를 선택하거나 **보안 그룹 생성**을 선택하여 새 보안 그룹을 생성합니다. 보안 그룹에 관한 자세한 내용은 *Amazon Virtual Private Cloud 사용 설명서*의 [VPC의 보안 그룹](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)을 참조하세요. 보안 그룹을 생성하려면 *Amazon Virtual Private Cloud 사용 설명서*의 [보안 그룹 생성](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#CreatingSecurityGroups)을 참조하세요.
**참고**  
VPC는 자동으로 기본 보안 그룹과 함께 제공됩니다. 서버를 시작할 때 다른 보안 그룹 또는 그룹을 지정하지 않을 경우 기본 보안 그룹이 서버에 연결됩니다.
      + 보안 그룹에 대한 인바운드 규칙의 경우 포트 22, 2222, 22000 또는 모든 조합을 사용하도록 SSH 트래픽을 구성할 수 있습니다. 포트 22는 기본적으로 구성됩니다. 포트 2222 또는 포트 22000을 사용하려면 보안 그룹에 인바운드 규칙을 추가합니다. 유형에 사용자 **지정 TCP**를 선택한 다음 **포트 범위에** **2222** 또는 **22000**를 입력하고 소스에 SSH 포트 22 규칙에 대해 보유한 것과 동일한 CIDR 범위를 입력합니다.
      + 보안 그룹에 대한 인바운드 규칙의 경우 제어 채널 및 **8192-8200** 데이터 채널**21**에 포트 **범위를** 사용하도록 FTPS 트래픽을 구성합니다.
**참고**  
TCP "piggy-back" ACKs 필요한 클라이언트에 포트 2223을 사용하거나 TCP 3방향 핸드셰이크의 최종 ack에도 데이터를 포함할 수 있습니다.  
일부 클라이언트 소프트웨어는 포트 2223과 호환되지 않을 수 있습니다. 예를 들어 클라이언트가 SFTP 식별 문자열을 전송하기 전에 서버가 필요한 클라이언트입니다.  
![\[포트 22의 SSH 및 포트 2222의 사용자 지정 TCP에 대한 규칙을 보여주는 샘플 보안 그룹의 인바운드 규칙입니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/alternate-port-rule.png)

   1. (옵션) **FIPS 지원**의 경우 **FIPS 지원 엔드포인트** 확인란을 선택하여 엔드포인트가 Federal Information Processing Standard(FIPS)를 준수하는지 확인합니다.
**참고**  
FIPS 지원 엔드포인트는 북미 AWS 리전에서만 사용할 수 있습니다. 사용할 수 있는 리전은 *AWS 일반 참조*의 [AWS Transfer Family 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/transfer-service.html)을 참조하세요. FIPS에 대한 자세한 설명은 [미연방 정보 처리 표준(FIPS) 140-2](https://aws.amazon.com/compliance/fips/)를 참조하세요.

   1. **다음**을 선택합니다.

1. **추가 상세 정보 구성**에서 다음을 수행합니다.

   1. **CloudWatch** 로깅의 경우 다음 중 하나를 선택하여 사용자 활동에 대한 Amazon CloudWatch 로깅을 활성화합니다.
      + 새 역할을 생성할 수 있는 적절한 권한이 있는 한 Transfer Family에서 자동으로 IAM 역할을 생성할 수 있도록 **새 역할을 생성**합니다. 생성된 IAM 역할을 `AWSTransferLoggingAccess`(이)라고 합니다.
      + 계정에서 기존 IAM 역할을 선택하려면 **기존 역할을 선택**합니다. **로깅 역할**에서 역할을 선택합니다. 이 IAM 역할에는 **서비스**가 `transfer.amazonaws.com`(으)로 설정된 신뢰 정책이 포함되어야 합니다.

        CloudWatch 로깅에 대한 자세한 내용은 [CloudWatch 로깅 역할 구성](configure-cw-logging-role.md)를 참조하세요.
**참고**  
로깅 역할을 지정하지 않으면 CloudWatch에서 최종 사용자 활동을 볼 수 없습니다.
CloudWatch 로깅 역할을 설정하지 않으려면 **기존 역할 선택**을 선택하고 로깅 역할은 선택하지 마세요.

   1. **암호화 알고리즘 옵션**의 경우 서버에서 사용하도록 설정된 암호화 알고리즘이 포함된 보안 정책을 선택합니다.
**참고**  
다른 정책을 선택하지 않는 한 `TransferSecurityPolicy-2024-01` 보안 정책이 기본적으로 서버에 연결됩니다.

      보안 정책에 대한 자세한 설명은 섹션을 참조하세요[AWS Transfer Family 서버에 대한 보안 정책](security-policies.md).

   1. (선택 사항:이 섹션은 기존 SFTP 지원 서버에서 사용자를 마이그레이션하는 경우에만 해당됩니다.) **서버 호스트 키**에 클라이언트가 SFTP를 통해 연결할 때 서버를 식별하는 데 사용할 RSA, ED25519 또는 ECDSA 프라이빗 키를 입력합니다.

   1. (옵션) **태그**의 **키** 및 **값**에서 하나 이상의 태그를 키-값 쌍을 입력한 다음 **태그 추가**를 선택합니다.

   1. **다음**을 선택합니다.

   1.  (옵션) **관리형 워크플로**의 경우 워크플로를 실행할 때 Transfer Family가 맡아야 하는 워크플로 ID(및 해당 역할)를 선택합니다. 업로드 완료 시 실행할 워크플로 하나와 부분 업로드 시 실행할 워크플로 하나를 선택할 수 있습니다. 관리형 워크플로를 사용하여 파일을 처리하는 방법에 대한 자세한 내용은 [AWS Transfer Family 관리형 워크플로](transfer-workflows.md)를 참조하세요.  
![\[관리형 워크플로 콘솔 섹션.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/workflows-addtoserver.png)

1. **검토 및 생성**에서 옵션을 검토합니다. 경우에 따라 다음 작업을 수행합니다.
   + 이들 중 하나를 편집하려면 단계 옆에 있는 **편집**을 선택합니다.
**참고**  
편집하기로 선택한 단계 이후의 각 단계를 검토해야 합니다.
   + 변경 사항이 없으면 **서버 생성**을 선택하여 서버를 생성합니다. **서버** 페이지로 이동하고, 새 서버가 나열되는 다음 화면이 표시됩니다.

서버 ID를 선택하여 방금 생성한 서버의 세부 설정을 볼 수 있습니다. **퍼블릭 IPv4 주소** 열이 채워지면 입력한 탄력적 IP 주소가 서버의 엔드포인트와 성공적으로 연결됩니다.

**참고**  
VPC의 서버가 온라인 상태일 때는 [UpdateServer](https://docs.aws.amazon.com/transfer/latest/APIReference/API_UpdateServer.html) API를 통해서만 서브넷을 수정할 수 있습니다. 서버 엔드포인트의 탄력적 IP 주소를 추가하거나 변경하려면 [서버를 중지](edit-server-config.md#edit-online-offline)해야 합니다.

## 서버의 엔드포인트 타입 변경
<a name="change-server-endpoint-type"></a>

인터넷을 통해 액세스할 수 있는 기존 서버가 있는 경우(즉, 퍼블릭 엔드포인트 타입이 있는 경우) 해당 엔드포인트를 VPC 엔드포인트로 변경할 수 있습니다.

**참고**  
`VPC_ENDPOINT`로 표시된 VPC에 기존 서버가 있는 경우 새 VPC 엔드포인트 타입으로 수정하는 것이 좋습니다. 이 새 엔드포인트 타입을 사용하면 더 이상 NLB(Network Load Balancer)를 사용하여 탄력적 IP 주소를 서버의 엔드포인트와 연결할 필요가 없습니다. 또한 VPC 보안 그룹을 사용하여 서버 엔드포인트에 대한 액세스를 제한할 수 있습니다. 그러나 필요에 따라 `VPC_ENDPOINT` 엔드포인트 타입을 계속 사용할 수 있습니다.

다음 절차에서는 서버가 현재 퍼블릭 엔드포인트 타입 또는 이전 `VPC_ENDPOINT` 타입을 사용하는 것으로 가정합니다.

**서버의 엔드포인트 타입을 변경하려면**

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

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

1. 엔드포인트 타입을 변경하려는 서버의 확인란을 선택합니다.
**중요**  
엔드포인트를 변경하려면 먼저 서버를 중지해야 합니다.

1. **작업**에서 **중지**를 선택합니다.

1. 표시되는 확인 대화 상자에서 **중지**를 선택하여 서버 중지를 확인합니다.
**참고**  
다음 단계로 진행하기 전에 **엔드포인트 세부 정보**에서 서버 **상태**가 **오프라인**으로 변경될 때까지 기다리세요. 몇 분 정도 걸릴 수 있습니다. 상태 변경을 보려면 **서버** 페이지에서 **새로 고침**을 선택해야 할 수도 있습니다.  
서버가 **오프라인**이 될 때까지는 어떤 편집도 할 수 없습니다.

1. **엔드포인트 세부 정보**에서 **편집**을 선택합니다.

1. **엔드포인트 구성 편집**에서 다음을 수행합니다.

   1. **엔드포인트 타입 편집**에서 **VPC 호스팅**을 선택합니다.

   1. **액세스**에서 다음 중 하나를 선택합니다.
      + 엔드포인트의 사설 IP 주소를 사용하는 클라이언트만 엔드포인트에 액세스할 수 있도록 하려면 **내부**로 설정합니다.
      + 클라이언트가 퍼블릭 인터넷을 통해 엔드포인트에 액세스할 수 있도록 하려면 **인터넷 연결**을 선택합니다.
**참고**  
**인터넷 연결**을 선택하면 각 서브넷 또는 서브넷에서 기존 탄력적 IP 주소를 선택할 수 있습니다. 또는 VPC 콘솔([https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/))로 이동하여 하나 이상의 새 탄력적 IP 주소를 할당할 수 있습니다. 이러한 주소는 AWS 또는 사용자가 소유할 수 있습니다. 이미 사용 중인 탄력적 IP 주소는 엔드포인트와 연결할 수 없습니다.

   1. (인터넷 연결 액세스 전용 옵션) **사용자 지정 호스트 이름**의 경우 다음 중 하나를 선택합니다.
      + **Amazon Route 53 DNS 별칭** – 사용하려는 호스트 이름이 Route 53에 등록된 경우. 이후 호스트 이름을 입력하면 됩니다.
      + **기타 DNS** – 사용할 호스트 이름이 다른 DNS 공급자를 통해 등록된 경우. 이후 호스트 이름을 입력하면 됩니다.
      + **없음** – 서버의 엔드포인트를 사용하고 사용자 지정 호스트 이름은 사용하지 않을 경우. 서버 호스트 이름은 `serverId.server.transfer.regionId.amazonaws.com` 형식을 취합니다.

        사용자 지정 호스트 이름 사용에 대한 자세한 내용은 [사용자 지정 호스트 이름으로 작업](requirements-dns.md)를 참조하세요.

   1. **VPC**의 경우 기존 VPC ID를 선택하거나 **VPC 생성**을 선택하여 새 VPC를 생성합니다.

   1. **가용 영역** 섹션에서 가용 영역 및 관련 서브넷을 최대 3개까지 선택합니다. **인터넷 연결**을 선택한 경우 각 서브넷의 탄력적 IP 주소도 선택합니다.
**참고**  
최대 3개의 가용 영역을 원하지만 가용 영역이 충분하지 않은 경우 VPC 콘솔([https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/))에서 가용 영역을 생성합니다.  
서브넷 또는 탄력적 IP 주소를 수정할 경우 서버를 업데이트하는 데 몇 분 정도 걸립니다. 서버 업데이트가 완료될 때까지는 변경 내용을 저장할 수 없습니다.

   1. **저장**을 선택합니다.

1. **작업**에서 **시작**을 선택하고 서버 상태가 **온라인**으로 변경될 때까지 기다립니다. 이 작업은 몇 분 정도 걸릴 수 있습니다.
**참고**  
퍼블릭 엔드포인트 타입을 VPC 엔드포인트 타입으로 변경한 경우 서버의 **엔드포인트 타입**이 **VPC**로 변경되었음을 알 수 있습니다.

기본 보안 그룹이 엔드포인트에 연결되어 있습니다. 보안 그룹을 변경하거나 추가하려면 [보안 그룹 생성](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#CreatingSecurityGroups)을 참조하세요.

## VPC\$1ENDPOINT 사용 중단
<a name="deprecate-vpc-endpoint"></a>

AWS Transfer Family 는 새 AWS 계정에 `EndpointType=VPC_ENDPOINT` 대해를 사용하여 서버를 생성하는 기능을 중단했습니다. 2021년 5월 19일부터 엔드포인트 유형이 인 AWS Transfer Family 서버를 소유하지 않은 AWS 계정`VPC_ENDPOINT`은를 사용하여 새 서버를 생성할 수 없습니다`EndpointType=VPC_ENDPOINT`. `VPC_ENDPOINT` 엔드포인트 타입을 사용하는 서버를 이미 소유하고 있는 경우 가능한 한 빨리 `EndpointType=VPC` 사용을 시작하는 것이 좋습니다. 자세한 내용은[AWS Transfer Family 서버 엔드포인트 유형을 VPC\$1ENDPOINT에서 VPC로 업데이트를 참조하세요](https://aws.amazon.com/blogs/storage/update-your-aws-transfer-family-server-endpoint-type-from-vpc_endpoint-to-vpc/).

2020년 초에 새 `VPC` 엔드포인트 타입을 출시했습니다. 자세한 내용은 [SFTP에 대한AWS Transfer Family 가 VPC 보안 그룹 및 탄력적 IP 주소를 지원하는 경우](https://aws.amazon.com/about-aws/whats-new/2020/01/aws-transfer-for-sftp-supports-vpc-security-groups-and-elastic-ip-addresses/)를 참조하세요. 이 새 엔드포인트는 기능이 더 풍부하고 비용 효율적이며 PrivateLink 요금이 부과되지 않습니다. 자세한 내용은 [AWS PrivateLinK 요금](https://aws.amazon.com/privatelink/pricing/)을 참조하세요.

이 엔드포인트 타입은 이전 엔드포인트 타입(`VPC_ENDPOINT`)과 기능적으로 동일합니다. 탄력적 IP 주소를 엔드포인트에 직접 연결하여 인터넷에 연결되도록 하고 소스 IP 필터링에 보안 그룹을 사용할 수 있습니다. 자세한 내용은 [IP 허용 목록을 사용하여 AWS Transfer Family for SFTP 서버 보호 블로그 게시물을 참조하세요](https://aws.amazon.com/blogs/storage/use-ip-whitelisting-to-secure-your-aws-transfer-for-sftp-servers/).

공유 VPC 환경에서 이 엔드포인트를 호스팅할 수도 있습니다. 자세한 내용은 [AWS Transfer Family 에서 현재 공유 서비스 VPC 환경 지원](https://aws.amazon.com/about-aws/whats-new/2020/11/aws-transfer-family-now-supports-shared-services-vpc-environments/)을 참조하세요.

SFTP 외에도 VPC `EndpointType`를 사용하여 FTPS 및 FTP를 활성화할 수 있습니다. 당사는 이러한 기능과 FTPS/FTP 지원을 `EndpointType=VPC_ENDPOINT`에 추가할 계획이 없습니다. 또한이 엔드포인트 유형을 AWS Transfer Family 콘솔에서 옵션으로 제거했습니다.

<a name="deprecate-vpc-endpoint.title"></a>Transfer Family 콘솔, API AWS CLI, SDKs 또는를 사용하여 서버의 엔드포인트 유형을 변경할 수 있습니다 CloudFormation. 서버의 엔드포인트 타입을 변경하려면 [AWS Transfer Family 서버 엔드포인트 유형을 VPC\$1ENDPOINT에서 VPC로 업데이트](update-endpoint-type-vpc.md)를 참조하세요.

질문이 있는 경우 AWS Support 또는 AWS 계정 팀에 문의하세요.

**참고**  
EndpointType=VPC\$1ENDPOINT에 이러한 기능과 FTPS 또는 FTP 지원을 추가할 계획이 없습니다. AWS Transfer Family 콘솔에서는 더 이상 옵션으로 제공하지 않습니다.

추가 질문이 있는 경우 AWS Support 또는 계정 팀을 통해 문의할 수 있습니다.

## Transfer Family 서버에 대한 VPC 엔드포인트 액세스 제한
<a name="limit-vpc-endpoint-access"></a>

VPC 엔드포인트 유형으로 AWS Transfer Family 서버를 생성할 때 IAM 사용자와 보안 주체는 VPC 엔드포인트를 생성하고 삭제할 수 있는 권한이 필요합니다. 그러나 조직의 보안 정책은 이러한 권한을 제한할 수 있습니다. IAM 정책을 사용하여 다른 서비스에 대한 제한을 유지하면서 특히 Transfer Family에 대한 VPC 엔드포인트 생성 및 삭제를 허용할 수 있습니다.

**중요**  
다음 IAM 정책은 사용자가 다른 서비스에 대해 이러한 작업을 거부하는 동안 Transfer Family 서버에 대해서만 VPC 엔드포인트를 생성하고 삭제할 수 있도록 허용합니다.

```
{
    "Effect": "Deny",
    "Action": [
        "ec2:CreateVpcEndpoint",
        "ec2:DeleteVpcEndpoints"
    ],
    "Resource": ["*"],
    "Condition": {
        "ForAnyValue:StringNotLike": {
            "ec2:VpceServiceName": [
                "com.amazonaws.INPUT-YOUR-REGION.transfer.server.*"
            ]
        },
        "StringNotLike": {
            "aws:PrincipalArn": [
                "arn:aws:iam::*:role/INPUT-YOUR-ROLE"
            ]
        }
    }
}
```

*INPUT-YOUR-REGION*을 AWS 리전(예: **us-east-1**)으로 바꾸고 *INPUT-YOUR-ROLE*을 이러한 권한을 부여하려는 IAM 역할로 바꿉니다.

## 추가 네트워킹 기능
<a name="additional-networking-features"></a>

AWS Transfer Family 는 VPC 구성을 사용할 때 보안과 유연성을 강화하는 몇 가지 고급 네트워킹 기능을 제공합니다.
+ **공유 VPC 환경 지원** - 공유 VPC 환경에서 Transfer Family 서버 엔드포인트를 호스팅할 수 있습니다. 자세한 내용은 [공유 VPC에서 VPCs AWS Transfer Family](https://aws.amazon.com/blogs/storage/using-vpc-hosted-endpoints-in-shared-vpcs-with-aws-transfer-family/).
+ **인증 및 보안** - AWS 웹 애플리케이션 방화벽을 사용하여 Amazon API Gateway 엔드포인트를 보호할 수 있습니다. 자세한 내용은 [AWS 웹 애플리케이션 방화벽 및 Amazon API Gateway AWS Transfer Family 로 보안을](https://aws.amazon.com/blogs/storage/securing-aws-transfer-family-with-aws-web-application-firewall-and-amazon-api-gateway/) 참조하세요.

# AWS Transfer Family 서버 엔드포인트 유형을 VPC\$1ENDPOINT에서 VPC로 업데이트
<a name="update-endpoint-type-vpc"></a>

 AWS Management Console CloudFormation또는 Transfer Family API를 사용하여 서버의를 `EndpointType`에서 로 업데이트할 수 `VPC_ENDPOINT` 있습니다`VPC`. 이러한 각 방법을 사용하여 서버 엔드포인트 타입을 업데이트하는 자세한 절차와 예가 다음 섹션에 나와 있습니다. 여러 AWS 리전과 여러 AWS 계정에 서버가 있는 경우 다음 섹션에 제공된 예제 스크립트를 수정하여 업데이트해야 하는 `VPC_ENDPOINT` 유형을 사용하여 서버를 식별할 수 있습니다.

**Topics**
+ [`VPC_ENDPOINT` 엔드포인트 타입을 사용한 서버 식별](#id-servers)
+ [를 사용하여 서버 엔드포인트 유형 업데이트 AWS Management Console](#update-endpoint-console)
+ [를 사용하여 서버 엔드포인트 유형 업데이트 CloudFormation](#update-endpoint-cloudformation)
+ [API를 사용하여 서버 엔드포인트 타입 업데이트](#update-endpoint-cli)

## `VPC_ENDPOINT` 엔드포인트 타입을 사용한 서버 식별
<a name="id-servers"></a>

 AWS Management Console을 사용하여 `VPC_ENDPOINT`를 사용하는 서버를 식별할 수 있습니다.

**콘솔을 사용하여 `VPC_ENDPOINT` 엔드포인트 타입을 사용하는 서버를 식별하려면**

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

1. 탐색 창에서 **서버**를 선택하면 해당 리전의 사용자 계정에 있는 서버 목록이 표시됩니다.

1. **엔드포인트 타입**별로 서버 목록을 정렬하면 `VPC_ENDPOINT`를 사용하는 모든 서버를 볼 수 있습니다.

**여러 AWS 리전 및 계정`VPC_ENDPOINT`에서를 사용하여 서버를 식별하려면**

여러 AWS 리전과 여러 AWS 계정에 서버가 있는 경우 다음 예제 스크립트를 수정하여 `VPC_ENDPOINT` 엔드포인트 유형을 사용하여 서버를 식별할 수 있습니다. 예제 스크립트는 Amazon EC2 [DescribeRegions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeRegions.html) 및 Transfer Family [https://docs.aws.amazon.com/transfer/latest/APIReference/API_ListServers.html](https://docs.aws.amazon.com/transfer/latest/APIReference/API_ListServers.html) API 작업을 사용합니다. AWS 계정이 많은 경우 자격 증명 공급자에 대한 세션 프로필을 사용하여 인증하면 읽기 전용 감사자 액세스 권한이 있는 IAM 역할을 사용하여 계정을 순회할 수 있습니다.

1. 다음은 간단한 예입니다.

   ```
   import boto3
   
   profile = input("Enter the name of the AWS account you'll be working in: ")
   session = boto3.Session(profile_name=profile)
   
   ec2 = session.client("ec2")
   
   regions = ec2.describe_regions()
   
   for region in regions['Regions']:
       region_name = region['RegionName']
       if region_name=='ap-northeast-3': #https://github.com/boto/boto3/issues/1943
           continue
       transfer = session.client("transfer", region_name=region_name)
       servers = transfer.list_servers()
       for server in servers['Servers']:
          if server['EndpointType']=='VPC_ENDPOINT':
              print(server['ServerId'], region_name)
   ```

1. 업데이트할 서버 목록을 확보한 후에는 다음 섹션에 설명된 방법 중 하나를 사용하여 `EndpointType`을 `VPC`(으)로 업데이트할 수 있습니다.

## 를 사용하여 서버 엔드포인트 유형 업데이트 AWS Management Console
<a name="update-endpoint-console"></a>

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

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

1. 엔드포인트 타입을 변경하려는 서버의 확인란을 선택합니다.
**중요**  
엔드포인트를 변경하려면 먼저 서버를 중지해야 합니다.

1. **작업**에서 **중지**를 선택합니다.

1. 표시되는 확인 대화 상자에서 **중지**를 선택하여 서버 중지를 확인합니다.
**참고**  
다음 단계로 진행하기 전에 서버 **상태**가 **오프라인**으로 변경될 때까지 기다리세요. 몇 분 정도 걸릴 수 있습니다. 상태 변경을 보려면 **서버** 페이지에서 **새로 고침**을 선택해야 할 수도 있습니다.

1. 상태가 **오프라인**으로 변경되면 서버 세부 정보 페이지를 표시할 서버를 선택합니다.

1. **엔드포인트 세부 정보** 섹션에서 **편집**을 선택합니다.

1. **엔드포인트** 타입으로 **VPC 호스팅**을 선택합니다.

1. **저장**을 선택합니다.

1. **작업**에서 **시작**을 선택하고 서버 상태가 **온라인**으로 변경될 때까지 기다립니다. 이 작업은 몇 분 정도 걸릴 수 있습니다.

## 를 사용하여 서버 엔드포인트 유형 업데이트 CloudFormation
<a name="update-endpoint-cloudformation"></a>

이 섹션에서는를 사용하여 서버의 CloudFormation 를 로 업데이트`EndpointType`하는 방법을 설명합니다`VPC`. 를 사용하여 배포한 Transfer Family 서버에 대해이 절차를 사용합니다 CloudFormation. 이 예에서 Transfer Family 서버를 배포하는 데 사용된 원본 CloudFormation 템플릿은 다음과 같습니다.

```
AWS TemplateFormatVersion: '2010-09-09'
Description: 'Create AWS Transfer Server with VPC_ENDPOINT endpoint type'
Parameters:
  SecurityGroupId:
    Type: AWS::EC2::SecurityGroup::Id
  SubnetIds:
    Type: List<AWS::EC2::Subnet::Id>
  VpcId:
    Type: AWS::EC2::VPC::Id
Resources:
  TransferServer:
    Type: AWS::Transfer::Server
    Properties:
      Domain: S3
      EndpointDetails:
        VpcEndpointId: !Ref VPCEndpoint
      EndpointType: VPC_ENDPOINT
      IdentityProviderType: SERVICE_MANAGED
      Protocols:
        - SFTP
  VPCEndpoint:
    Type: AWS::EC2::VPCEndpoint
    Properties:
      ServiceName: com.amazonaws.us-east-1.transfer.server
      SecurityGroupIds:
        - !Ref SecurityGroupId
      SubnetIds:
        - !Select [0, !Ref SubnetIds]
        - !Select [1, !Ref SubnetIds]
        - !Select [2, !Ref SubnetIds]
      VpcEndpointType: Interface
      VpcId: !Ref VpcId
```

템플릿이 다음과 같이 변경되어 업데이트되었습니다.
+ `EndpointType`이(가) `VPC`(으)로 변경되었습니다.
+ `AWS::EC2::VPCEndpoint` 리소스가 제거됩니다.
+ `SecurityGroupId`, `SubnetIds`, 및 `VpcId`(이)가 `AWS::Transfer::Server` 리소스의 `EndpointDetails` 섹션으로 이동되었습니다.
+ `EndpointDetails`의 `VpcEndpointId` 속성이 삭제되었습니다.

업데이트된 템플릿입니다.

```
AWS TemplateFormatVersion: '2010-09-09'
Description: 'Create AWS Transfer Server with VPC endpoint type'
Parameters:
  SecurityGroupId:
    Type: AWS::EC2::SecurityGroup::Id
  SubnetIds:
    Type: List<AWS::EC2::Subnet::Id>
  VpcId:
    Type: AWS::EC2::VPC::Id
Resources:
  TransferServer:
    Type: AWS::Transfer::Server
    Properties:
      Domain: S3
      EndpointDetails:
        SecurityGroupIds:
          - !Ref SecurityGroupId
        SubnetIds:
          - !Select [0, !Ref SubnetIds]
          - !Select [1, !Ref SubnetIds]
          - !Select [2, !Ref SubnetIds]
        VpcId: !Ref VpcId
      EndpointType: VPC
      IdentityProviderType: SERVICE_MANAGED
      Protocols:
        - SFTP
```

**를 사용하여 배포된 Transfer Family 서버의 엔드포인트 유형을 업데이트하려면 CloudFormation**

1. 다음 단계를 사용하여 업데이트하려는 서버를 중지합니다.

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

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

   1. 엔드포인트 타입을 변경하려는 서버의 확인란을 선택합니다.
**중요**  
엔드포인트를 변경하려면 먼저 서버를 중지해야 합니다.

   1. **작업**에서 **중지**를 선택합니다.

   1. 표시되는 확인 대화 상자에서 **중지**를 선택하여 서버 중지를 확인합니다.
**참고**  
다음 단계로 진행하기 전에 서버 **상태**가 **오프라인**으로 변경될 때까지 기다리세요. 몇 분 정도 걸릴 수 있습니다. 상태 변경을 보려면 **서버** 페이지에서 **새로 고침**을 선택해야 할 수도 있습니다.

1. CloudFormation 스택 업데이트

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

   1. Transfer Family 서버를 생성하는 데 사용할 스택을 선택합니다.

   1. **업데이트**를 선택합니다.

   1. **현재 템플릿 교체**를 선택합니다.

   1. 새 템플릿을 업로드합니다. CloudFormation 변경 세트를 사용하면 템플릿 변경 사항을 구현하기 전에 템플릿 변경이 실행 중인 리소스에 미치는 영향에 대해 이해하는 데 도움이 됩니다. 이 예에서는 전송 서버 리소스가 수정되고 VPCendPoint 리소스가 제거됩니다. VPC 엔드포인트 타입 서버는 사용자를 대신하여 VPC 엔드포인트를 생성하여 원본 `VPCEndpoint` 리소스를 대체합니다.

      새 템플릿을 업로드한 후 변경 세트는 다음과 유사합니다.  
![\[현재 CloudFormation 템플릿을 대체하기 위한 변경 세트 미리 보기 페이지를 표시합니다.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/vpc-endpoint-update-cfn.png)

   1. 스택을 업데이트합니다.

1. 스택 업데이트가 완료되면 Transfer Family 관리 콘솔 [https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/) 로 이동합니다.

1. 서버를 시작합니다. 업데이트한 서버를 선택한 CloudFormation다음 **작업** 메뉴에서 **시작**을 선택합니다.

## API를 사용하여 서버 엔드포인트 타입 업데이트
<a name="update-endpoint-cli"></a>

[describe-server](https://docs.aws.amazon.com/cli/latest/reference/transfer/update-server.html) AWS CLI 명령 또는 [UpdateServer](https://docs.aws.amazon.com/transfer/latest/APIReference/API_UpdateServer.html) API 명령을 사용할 수 있습니다. 다음 예 스크립트는 Transfer Family 서버를 중지하고, 엔드포인트 타입을 업데이트하고, VPC\$1ENDPOINT를 제거하고, 서버를 시작합니다.

```
import boto3
import time

profile = input("Enter the name of the AWS account you'll be working in: ")
region_name = input("Enter the AWS Region you're working in: ")
server_id = input("Enter the AWS Transfer Server Id: ")

session = boto3.Session(profile_name=profile)

ec2 = session.client("ec2", region_name=region_name)
transfer = session.client("transfer", region_name=region_name)

group_ids=[]

transfer_description = transfer.describe_server(ServerId=server_id)
if transfer_description['Server']['EndpointType']=='VPC_ENDPOINT':
    transfer_vpc_endpoint = transfer_description['Server']['EndpointDetails']['VpcEndpointId']
    transfer_vpc_endpoint_descriptions = ec2.describe_vpc_endpoints(VpcEndpointIds=[transfer_vpc_endpoint])
    for transfer_vpc_endpoint_description in transfer_vpc_endpoint_descriptions['VpcEndpoints']:
        subnet_ids=transfer_vpc_endpoint_description['SubnetIds']
        group_id_list=transfer_vpc_endpoint_description['Groups']
        vpc_id=transfer_vpc_endpoint_description['VpcId']
        for group_id in group_id_list:
             group_ids.append(group_id['GroupId'])
    if transfer_description['Server']['State']=='ONLINE':
        transfer_stop = transfer.stop_server(ServerId=server_id)
        print(transfer_stop)
        time.sleep(300) #safe
        transfer_update = transfer.update_server(ServerId=server_id,EndpointType='VPC',EndpointDetails={'SecurityGroupIds':group_ids,'SubnetIds':subnet_ids,'VpcId':vpc_id})
        print(transfer_update)
        time.sleep(10) 
        transfer_start = transfer.start_server(ServerId=server_id)
        print(transfer_start)
        delete_vpc_endpoint = ec2.delete_vpc_endpoints(VpcEndpointIds=[transfer_vpc_endpoint])
```

# 사용자 지정 호스트 이름으로 작업
<a name="requirements-dns"></a>

*서버 호스트 이름*은 사용자가 서버에 연결할 때 클라이언트에 입력하는 호스트 이름입니다. 작업할 때 서버 호스트 이름에 등록한 사용자 지정 도메인을 사용할 수 있습니다 AWS Transfer Family. 예를 들어 `mysftpserver.mysubdomain.domain.com` 같은 사용자 지정 호스트 이름을 사용할 수 있습니다.

등록한 사용자 지정 도메인에서 서버 엔드포인트로 트래픽을 리디렉션하려면, Amazon Route 53 또는 아무 DNS(Domain Name System) 공급자를 이용하면 됩니다. Route 53은 AWS Transfer Family (이)가 기본적으로 지원하는 DNS 서비스입니다.

**Topics**
+ [Amazon Route 53을 DNS 공급자로 사용](#requirements-use-r53)
+ [다른 DNS 공급자 사용](#requirements-use-alt-dns)
+ [콘솔에서 생성하지 않은 서버의 사용자 지정 호스트 이름](#tag-custom-hostname-cdk)

콘솔에서, 사용자 지정 호스트 이름을 설정하려면 다음 방법 중 하나를 선택합니다.
+ **Amazon Route 53 DNS 별칭** – 사용하려는 호스트 이름이 Route 53에 등록된 경우. 이후 호스트 이름을 입력하면 됩니다.
+ **기타 DNS** – 사용할 호스트 이름이 다른 DNS 공급자를 통해 등록된 경우. 이후 호스트 이름을 입력하면 됩니다.
+ **없음** – 서버의 엔드포인트를 사용하고 사용자 지정 호스트 이름은 사용하지 않을 경우.

이 옵션은 새 서버를 만들거나 기존 서버의 구성을 수정할 때 설정합니다. 새 서버 생성에 대한 자세한 정보는 [2단계: SFTP 지원 서버 생성](getting-started.md#getting-started-server) 섹션을 참조하세요. 기존 서버 구성 편집에 대한 자세한 내용은 [서버 세부 정보 편집](edit-server-config.md) 섹션을 참조하세요.

서버 호스트 이름에 자체 도메인을 사용하는 방법과가 Route 53을 AWS Transfer Family 사용하는 방법에 대한 자세한 내용은 다음 섹션을 참조하세요.

## Amazon Route 53을 DNS 공급자로 사용
<a name="requirements-use-r53"></a>

서버를 만들 때 DNS 공급자로 Amazon Route 53을 사용할 수 있습니다. Route 53을 도메인과 함께 사용하려면 먼저 도메인을 등록합니다. 자세한 내용은 *Amazon Route 53 개발자 안내서*의 [도메인 등록 방식](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/welcome-domain-registration.html)을 참조하세요.

Route 53을 사용하여 서버에 DNS 라우팅을 제공하는 경우는 입력한 사용자 지정 호스트 이름을 AWS Transfer Family 사용하여 호스팅 영역을 추출합니다. 가 호스팅 영역을 AWS Transfer Family 추출하면 다음과 같은 세 가지 상황이 발생할 수 있습니다.

1. Route 53을 처음 사용하고 호스팅 영역이 없는 경우 새 호스팅 영역과 `CNAME` 레코드를 AWS Transfer Family 추가합니다. 이 `CNAME` 레코드의 값은 서버의 엔드포인트 호스트 이름입니다. *CNAME*은 대체 도메인 이름입니다.

1. Route 53에 호스팅 영역이 있지만 `CNAME` 레코드가 없는 경우, AWS Transfer Family 에서 호스팅 영역에 `CNAME` 레코드를 추가합니다.

1. 서비스가 호스팅 영역에 존재하는 `CNAME` 레코드를 감지하면, `CNAME` 레코드가 이미 존재함을 알려주는 오류 메시지가 표시됩니다. 이 경우, `CNAME` 레코드 값을 서버의 호스트 이름으로 변경합니다.

Route 53의 호스팅 영역에 대한 자세한 내용은 *Amazon Route 53 개발자 안내서*의 [호스팅 영역](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingHostedZone.html)을 참조하하세요.

## 다른 DNS 공급자 사용
<a name="requirements-use-alt-dns"></a>

서버를 생성할 때 Amazon Route 53 대신 DNS 공급자를 사용할 수도 있습니다. 대체 DNS 공급자를 사용하는 경우 도메인에서 나오는 트래픽이 서버 엔드포인트로 가는지 확인합니다.

이렇게 하려면 도메인을 서버의 엔드포인트 호스트 이름으로 설정합니다.
+ IPv4 엔드포인트의 경우 호스트 이름은 콘솔에서 다음과 같습니다.

   `serverid.server.transfer.region.amazonaws.com` 
+ 듀얼 스택 엔드포인트의 경우 콘솔에서 호스트 이름은 다음과 같습니다.

   `serverid.transfer-server.region.on.aws` 

**참고**  
서버에 VPC 엔드포인트가 있는 경우 호스트 이름의 형식은 위에서 설명한 형식과 다릅니다. VPC 엔드포인트를 찾으려면 서버의 세부 정보 페이지에서 VPC를 선택한 다음 VPC 대시보드에서 **VPC 엔드포인트 ID**를 선택합니다. 엔드포인트는 나열된 DNS 이름 중 첫 번째 DNS 이름입니다.

## 콘솔에서 생성하지 않은 서버의 사용자 지정 호스트 이름
<a name="tag-custom-hostname-cdk"></a>

를 사용하거나 CLI를 AWS Cloud Development Kit (AWS CDK) CloudFormation통해 서버를 생성할 때 해당 서버에 사용자 지정 호스트 이름을 지정하려면 태그를 추가해야 합니다. 콘솔을 사용하여 Transfer Family 서버를 생성하는 경우 태깅이 자동으로 수행됩니다.

**참고**  
또한 도메인에서 서버 엔드포인트로 트래픽을 리디렉션하려면 DNS 레코드를 생성해야 합니다. 자세한 내용은 *Amazon Route 53 개발자 안내서*의 [레코드 작업을](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/rrsets-working-with.html) 참조하세요.

사용자 지정 호스트 이름에 사용할 키:
+ 콘솔에 사용자 지정 호스트 이름을 표시하려면 `transfer:customHostname`를 추가합니다.
+ Route 53을 DNS 공급자로 사용하고 있는 경우 `transfer:route53HostedZoneId`를 추가합니다. 이 태그는 사용자 지정 호스트 이름을 Route 53 호스팅 영역 ID에 연결합니다.

사용자 지정 호스트 이름을 추가하려면 다음 CLI 명령을 실행합니다.

```
aws transfer tag-resource --arn arn:aws:transfer:region:AWS 계정:server/server-ID --tags Key=transfer:customHostname,Value="custom-host-name"
```

예제:

```
aws transfer tag-resource --arn arn:aws:transfer:us-east-1:111122223333:server/s-1234567890abcdef0 --tags Key=transfer:customHostname,Value="abc.example.com"
```

Route 53을 사용하는 경우 다음 명령을 실행하여 사용자 지정 호스트 이름을 Route 53 호스팅 영역 ID에 연결합니다.

```
aws transfer tag-resource --arn server-ARN:server/server-ID --tags Key=transfer:route53HostedZoneId,Value=HOSTED-ZONE-ID
```

예제:

```
aws transfer tag-resource --arn arn:aws:transfer:us-east-1:111122223333:server/s-1234567890abcdef0 --tags Key=transfer:route53HostedZoneId,Value=ABCDE1111222233334444
```

이전 명령의 샘플 값을 가정하고 다음 명령을 실행하여 태그를 봅니다.

```
aws transfer list-tags-for-resource --arn arn:aws:transfer:us-east-1:111122223333:server/s-1234567890abcdef0
```

```
"Tags": [
   {
      "Key": "transfer:route53HostedZoneId",
      "Value": "/hostedzone/ABCDE1111222233334444"
   },
   {
      "Key": "transfer:customHostname",
      "Value": "abc.example.com"
   }
 ]
```

**참고**  
 Amazon Route 53에서 퍼블릭, 호스팅 영역 및 해당 ID를 사용할 수 있습니다.  
에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/route53/](https://console.aws.amazon.com/route53/) Route 53 콘솔을 엽니다.

## FTP 및 FTPS Network Load Balancer 고려 사항
<a name="ftp-ftps-nlb-considerations"></a>

 AWS Transfer Family 서버 앞에서 Network Load Balancer를 사용하지 않는 것이 좋지만 FTP 또는 FTPS 구현에 클라이언트의 통신 경로에 NLB 또는 NAT가 필요한 경우 다음 권장 사항을 따르세요.
+ NLB의 경우 포트 8192-8200 대신 상태 확인에 포트 21을 사용합니다.
+  AWS Transfer Family 서버의 경우를 설정하여 TLS 세션 재개를 활성화합니다`TlsSessionResumptionMode = ENFORCED`.
**참고**  
이는 향상된 보안을 제공하므로 권장되는 모드입니다.  
클라이언트가 후속 연결에 TLS 세션 재개를 사용해야 합니다.
일관된 암호화 파라미터를 보장하여 더 강력한 보안 보장을 제공합니다.
잠재적 다운그레이드 공격을 방지하는 데 도움이 됩니다.
성능을 최적화하면서 보안 표준 준수를 유지합니다.
+ 가능하면 NLB를 사용하지 않고 마이그레이션하여 성능 및 연결 제한을 최대한 활용 AWS Transfer Family 하세요.

NLB 대안에 대한 추가 지침은 AWS Support를 통해 AWS Transfer Family 제품 관리 팀에 문의하세요. 보안 태세 개선에 대한 자세한 내용은 블로그 게시물 [AWS Transfer Family 서버 보안을 개선하기 위한 6가지 팁을 참조하세요](https://aws.amazon.com/blogs/security/six-tips-to-improve-the-security-of-your-aws-transfer-family-server/).

 NLBs 나와 있습니다[NLBs와 NATs를 AWS Transfer Family 서버 앞에 배치하지 마세요.](infrastructure-security.md#nlb-considerations).

# 클라이언트를 사용하여 서버 엔드포인트를 통한 파일 전송
<a name="transfer-file"></a>

클라이언트에서 전송 작업을 지정하여 AWS Transfer Family 서비스를 통해 파일을 전송합니다.는 다음 클라이언트를 AWS Transfer Family 지원합니다.
+ SFTP 프로토콜 버전 3을 지원합니다.
+ OpenSSH (macOS 및 Linux)
**참고**  
이 클라이언트는 Secure Shell (SSH) File Transfer Protocol(SSH)를 지원하는 서버에서만 작동합니다.
+ WinSCP (Microsoft Windows 전용)
+ Cyberduck (Windows, macOS, 및 Linux)
+ FileZilla (Windows, macOS, 및 Linux)

모든 클라이언트에는 다음과 같은 제한 사항이 적용됩니다:
+ SCP 프로토콜은 안전하지 않은 것으로 간주되므로 지원되지 않습니다. 에 설명된 대로 OpenSSH `scp` 명령을 사용할 수 있습니다[`scp` 명령 사용](#openssh-scp).
+ 연결당 최대 동시 멀티플렉스 SFTP 세션 수는 10개입니다.
+ 유휴 연결의 경우 제한 시간 값은 모든 프로토콜(SFTP/FTP/FTPS)에 대해 1800초(30분)입니다. 이 기간 이후에 활동이 없으면 클라이언트 연결이 끊어질 수 있습니다. 응답하지 않는 연결의 경우:
  + 클라이언트가 완전히 응답하지 않는 경우 SFTP의 제한 시간은 300초(5분)입니다.
  + FTPS 및 FTP에는 기본 라이브러리에서 처리하는 약 10분의 응답하지 않는 제한 시간이 있습니다.
+ Amazon S3와 Amazon EFS는 (NFSv4 프로토콜로 인해) 파일 명칭이 UTF-8 인코딩이어야 합니다. 다른 인코딩을 사용하면 예상치 못한 결과가 발생할 수 있습니다. Amazon S3의 경우, [객체 키 명칭 지정 가이드라인](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html#object-key-guidelines)을 참조하세요.
+ SSL을 통한 파일 전송 프로토콜 (FTPS) 의 경우, 명시적 모드만 지원됩니다. 묵시적 모드는 지원되지 않습니다.
+ FTP (파일 전송 프로토콜) 및 FTPS의 경우, 패시브 모드만 지원됩니다.
+ FTP 및 FTPS의 경우, 스트림 모드만 지원됩니다.
+ FTP 및 FTPS의 경우, 이미지/바이너리 모드만 지원됩니다.
+ FTP 및 FTPS의 경우 데이터 연결을 위한 TLS - PROT C(보호되지 않음) TLS가 기본값이지만 AWS Transfer Family FTPS 프로토콜에서는 PROT C가 지원되지 않습니다. 따라서 FTPS의 경우, 데이터 작업이 승인되려면 PROT P를 발급해야 합니다.
+ Amazon S3를 서버 스토리지로 사용하고 있고 클라이언트에 단일 전송에 복수 연결을 사용하는 옵션이 포함되어 있는 경우, 해당 옵션을 비활성화해야 합니다. 그렇지 않으면 대용량 파일 업로드가 예상치 못한 방식으로 실패할 수 있습니다. Amazon EFS를 스토리지 백엔드로 사용하는 경우, EFS는 단일 전송에 대해 복수 연결을 *지원합니다*.

FTP 및 FTPS에 사용할 수 있는 명령 목록은 다음과 같습니다:


| 가용 명령 | 
| --- | 
| ABOR | FEAT | MLST | PASS | RETR | STOR | 
| AUTH | LANG | MKD | PASV | RMD | STOU | 
| CDUP | LIST | MODE | PBSZ | RNFR | STRU | 
| CWD | MDTM | NLST | PROT | RNTO | SYST | 
| DELE | MFMT | NOOP | PWD | SIZE | 타입 | 
| EPSV | MLSD | OPTS | QUIT | STAT | USER | 

**참고**  
APPE는 지원되지 않습니다.

SFTP의 경우, Amazon Elastic File System(Amazon EFS)을 사용하는 서버의 논리적 홈 디렉터리를 사용하는 사용자에게는 현재 다음 작업이 지원되지 않습니다.


| 지원되지 않는 SFTP 명령 | 
| --- | 
| SSH\$1FXP\$1READLINK | SSH\$1FXP\$1SYMLINK | 요청된 파일이 심볼릭 링크인 경우, SSH\$1FXP\$1STAT | 요청된 경로에 심볼릭 링크 구성 요소가 포함된 경우, SSH\$1FXP\$1REALPATH | 

**퍼블릭-프라이빗 키 쌍을 생성합니다.**  
 파일을 전송하려면 먼저 퍼블릭-프라이빗 키 쌍을 사용할 수 있어야 합니다. 이전에 키 쌍을 생성하지 않은 경우, [서비스 관리 사용자를 위한 SSH 키 생성](sshkeygen.md)를 참조하세요.

**Topics**
+ [가용 SFTP/FTPS/FTP 명령](#transfer-sftp-commands)
+ [Amazon VPC 엔드포인트 찾기](#find-vpc-endpoint)
+ [`setstat` 오류 방지](#avoid-set-stat)
+ [OpenSSH 사용](#openssh)
+ [WinSCP 사용](#winscp)
+ [Cyberduck 사용하기](#cyberduck)
+ [FileZilla 사용](#filezilla)
+ [Perl 클라이언트 사용](#using-clients-with-perl-modules)
+ [LFTP 사용](#using-client-lftp)
+ [업로드 후 처리](#post-processing-upload)
+ [SFTP 메시지](#sftp-transfer-activity-types)

## 가용 SFTP/FTPS/FTP 명령
<a name="transfer-sftp-commands"></a>

다음 표에서는 SFTP AWS Transfer Family, FTPS 및 FTP 프로토콜에 사용할 수 있는 명령을 설명합니다.

**참고**  
이 표에는 버킷과 객체만 지원하는 Amazon S3의 *파일* 및 *디렉터리*가 나와 있습니다. 계층 구조는 없습니다. 그러나 객체 키 명칭에 접두사를 사용하여 계층 구조를 암시하고 폴더와 유사한 방식으로 데이터를 구성할 수 있습니다. 이 동작은 *Amazon Simple Storage Service 사용자 가이드*에서 [객체 메타데이터 작업](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html)에 설명되어 있습니다.


**SFTP/FTPS/FTP 명령**  

| 명령 | Amazon S3 | Amazon EFS | 
| --- | --- | --- | 
| cd | 지원됨 | 지원됨 | 
| chgrp | 지원되지 않음  | 지원(root 또는 owner만 해당)  | 
| chmod | 지원되지 않음 | 지원(root만 해당)  | 
| chmtime | 지원되지 않음 | 지원됨 | 
| chown | 지원되지 않음 | 지원(root만 해당)  | 
| get | 지원됨 | 지원(심볼 링크 해결 포함) | 
| ln -s | 지원되지 않음  | 지원 | 
| ls/dir | 지원됨 | 지원됨 | 
| mkdir | 지원됨 | 지원됨 | 
| put | 지원됨 | 지원됨 | 
| pwd | 지원됨 | 지원됨 | 
| rename |  파일에만 지원됩니다. 기존 파일을 덮어쓰는 이름 변경은 지원되지 않습니다.   | 지원됨  기존 파일 또는 디렉터리를 덮어쓰는 명칭 변경은 지원되지 않습니다.  | 
| rm | 지원됨 | 지원됨 | 
| rmdir | 지원(빈 디렉터리만 해당) | 지원됨 | 
| version | 지원됨 | 지원됨 | 

## Amazon VPC 엔드포인트 찾기
<a name="find-vpc-endpoint"></a>

Transfer Family 서버의 엔드포인트 타입이 VPC인 경우, 파일 전송에 사용할 엔드포인트를 식별하는 것은 간단하지 않습니다. 이 경우, 다음 절차에 따라 Amazon VPC 엔드포인트를 찾습니다.

**Amazon VPC 엔드포인트를 찾으려면**

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

1. **엔드포인트 세부 정보** 창에서 **VPC**를 선택합니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/server-details-endpoint-vpc.png)

1. Amazon VPC 대시보드에서 **VPC 엔드포인트 ID**를 선택합니다.

1. **DNS 명칭** 목록에서 서버 엔드포인트가 첫 번째로 나열됩니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/server-details-endpoint-vpc-2.png)

## `setstat` 오류 방지
<a name="avoid-set-stat"></a>

일부 SFTP 파일 전송 클라이언트는 파일을 업로드할 때 SETSTAT 등의 명령을 사용하여 타임스탬프 및 권한 등 원격 파일의 속성을 변경하려고 시도할 수 있습니다. 그러나 이러한 명령은 Amazon S3와 같은 객체 스토리지 시스템과 호환되지 않습니다. 이러한 비호환성으로 인해 이러한 클라이언트에서 파일을 업로드하면 파일이 성공적으로 업로드된 경우에도 오류가 발생할 수 있습니다.
+ `CreateServer` 또는 `UpdateServer` API를 호출할 때 클라이언트가 S3 버킷에 업로드하는 파일에 SETSTAT를 사용하려고 할 때 생성되는 오류를 무시하는 `ProtocolDetails` 옵션 `SetStatOption`를 사용합니다.
+ Transfer Family 서버가 SETSTAT 명령을 무시하고 SFTP 클라이언트를 변경할 필요 없이 파일을 업로드하려면 값을 `ENABLE_NO_OP`로 설정합니다.
+ `SetStatOption` `ENABLE_NO_OP` 설정은 오류를 무시하지만, CloudWatch 로그에 로그 항목을 *생성하므로* 클라이언트가 SETSTAT 호출을 하는 시점을 확인할 수 있습니다.

 이 옵션에 대한 API 세부 정보는 [ProtocolDetails](https://docs.aws.amazon.com/transfer/latest/APIReference/API_ProtocolDetails.html)를 참조하세요.

## OpenSSH 사용
<a name="openssh"></a>

이 섹션에는 OpenSSH를 사용하여 명령줄에서 파일을 전송하는 지침이 포함되어 있습니다.

**참고**  
이 클라이언트는 SFTP 지원 서버에서만 작동합니다.

**Topics**
+ [OpenSSH 사용](#openssh-use)
+ [`scp` 명령 사용](#openssh-scp)

### OpenSSH 사용
<a name="openssh-use"></a>

**OpenSSH 명령줄 유틸리티를 AWS Transfer Family 사용하여를 통해 파일을 전송하려면**

1. Linux, macOS 또는 Windows에서 명령 터미널을 엽니다.

1. 프롬프트에서 다음 명령을 입력합니다.

   `sftp -i transfer-key sftp_user@service_endpoint`

   앞의 명령에서 `sftp_user`는 사용자 이름이고 `transfer-key`는 SSH 프라이빗 키입니다. 여기서 `service_endpoint`는 선택한 서버의 AWS Transfer Family 콘솔에 표시된 서버의 엔드포인트입니다.
**참고**  
이 명령은 기본 `ssh_config` 파일에 있는 설정을 사용합니다. 이전에이 파일을 편집하지 않은 경우 SFTP는 포트 22를 사용합니다. 다음과 같이 명령에 **-P** 플래그를 추가하여 다른 포트(예: 2222)를 지정할 수 있습니다.  

   ```
   sftp -P 2222 -i transfer-key sftp_user@service_endpoint
   ```
또는 포트 2222 또는 포트 22000을 항상 사용하려는 경우 `ssh_config` 파일의 기본 포트를 업데이트할 수 있습니다.

   `sftp` 프롬프트가 나타날 것입니다.

1.  (옵션) 사용자의 홈 디렉터리를 보려면 `sftp` 프롬프트에 다음 명령을 입력합니다. 

   `pwd` 

1. 파일 시스템에서 Transfer Family 서버로 파일을 업로드하려면 `put` 명령을 사용합니다. 예를 들어 업로드하려면 `hello.txt` (파일이 파일 시스템의 현재 디렉터리에 있다고 간주) `sftp` 프롬프트에서 다음 명령을 실행합니다.

   `put hello.txt` 

   파일 전송이 진행 중이거나 완료되었음을 나타내는, 다음과 비슷한 메시지가 표시됩니다.

   `Uploading hello.txt to /amzn-s3-demo-bucket/home/sftp_user/hello.txt`

   `hello.txt 100% 127 0.1KB/s 00:00`

**참고**  
서버가 생성된 후, 환경에서 DNS 서비스에 대한 서버 엔드포인트 호스트 명칭을 해석하려면 몇 분 정도 걸릴 수 있습니다.

### `scp` 명령 사용
<a name="openssh-scp"></a>

Transfer Family는 SCP 프로토콜을 지원하지 않습니다. 그러나이 기능이 필요한 경우 OpenSSH `scp` 명령을 사용할 수 있습니다.

SFTP를 통한 SCP 사용에 대한 권장 사항은 OpenSSH 버전 9.0 이상을 사용하는 것입니다. OpenSSH 버전 9 이상에서 `scp` 명령은 기본적으로 레거시 SCP 프로토콜 대신 파일 전송에 SFTP 프로토콜을 사용합니다.

**중요**  
Transfer Family 서버가 S3 최적화 디렉터리 액세스를 사용하도록 구성되어 있는지 확인합니다.

## WinSCP 사용
<a name="winscp"></a>

아래의 지침을 이용해 WinSCP를 이용하는 명령줄로 파일을 전송하세요.

**참고**  
WinSCP 5.19를 사용하는 경우, AWS 보안 인증을 사용하여 Amazon S3에 직접 연결하고 파일을 업로드/다운로드할 수 있습니다. 자세한 내용은 [Amazon S3 서비스에 연결](https://winscp.net/eng/docs/guide_amazon_s3)을 참조하세요.

**WinSCP AWS Transfer Family 를 사용하여를 통해 파일을 전송하려면**

1. WinSCP 클라이언트를 엽니다.

1. **로그인** 대화 상자의 **파일 프로토콜**에서 프로토콜을 선택합니다. **SFTP** 또는 **FTP**.

   FTP를 선택한 경우, **암호화**에서 다음 중 하나를 선택합니다.
   + FTP에는 **암호화가 적용되지 않습니다**
   + FTPS를 위한 **TLS/SSL 명시적 암호화**

1. **호스트 명칭**에 서버 엔드포인트를 입력합니다. 서버 엔드포인트는 **서버 세부 정보** 페이지에 있습니다. 자세한 내용은 [SFTP, FTPS 및 FTP 서버 세부 정보 보기](configuring-servers-view-info.md)를 참조하세요.

   서버가 VPC 엔드포인트를 사용하는 경우, [Amazon VPC 엔드포인트 찾기](#find-vpc-endpoint)를 참조하세요. 

1. **포트 번호**에 다음을 입력합니다:
   + SFTP에 대한 **22**
   + FTP/FTPS에 대한 **21**

1. **사용자 이름**에는 특정 ID 공급자용으로 생성한 사용자 이름을 입력합니다.

   **팁: **사용자 이름은 자격 증명 공급자에 대해 생성하거나 구성한 사용자 중 하나여야 합니다.는 다음 자격 증명 공급자를 AWS Transfer Family 제공합니다.
   + [서비스 관리형과 작업](service-managed-users.md)
   + [Microsoft Active Directory용 AWS Directory Service 사용](directory-services-users.md)
   + [사용자 지정 자격 증명 공급자와 작업](custom-idp-intro.md)

1. **고급**을 선택하여 **고급 사이트 설정** 대화 상자를 엽니다. **SSH** 섹션에서 **인증**을 선택합니다.

1. **프라이빗 키 파일**의 경우, 파일 시스템에서 SSH 프라이빗 키 파일을 찾아 선택합니다.

   WinSCP가 SSH 프라이빗 키를 PPK 형식으로 변환하는 기능을 제공한다면, **OK(확인)**을 선택합니다.

1. **OK(확인)**을 선택해 **Login(로그인)** 대화 상자로 돌아간 다음 **Save(저장)**을 선택합니다.

1. 다음과 같은 **Save session as site(세션을 사이트로 저장)** 대화 상자에서 **OK(확인)**을 선택해 연결 설정을 완료합니다.

1. **로그인** 대화 상자에서 **도구**를 선택한 다음 **기본 설정**을 선택합니다.

1. **환경 설정** 대화 상자의 **전송**에서 **Endurance**를 선택합니다.

   **임시 파일 명칭으로 전송 재개/전송 활성화** 옵션에 대해 **비활성화**를 선택합니다.
**중요**  
이 옵션을 활성화한 상태로 두면 업로드 비용이 증가하여 업로드 성능이 크게 저하됩니다. 또한 대용량 파일 업로드가 실패할 수도 있습니다.

1. **전송**의 경우, **배경**을 선택하고 **단일 전송에 복수 연결 사용** 확인란의 선택을 취소합니다.

   **팁: **이 옵션을 선택한 상태로 두면 대용량 파일 업로드가 예측할 수 없는 방식으로 실패할 수 있습니다. 예를 들어 Amazon S3 요금이 발생하는 분리된 멀티파트 업로드를 생성할 수 있습니다. 조용한 데이터 손상도 발생할 수 있습니다.

1. 파일 전송을 실행합니다.

   대상 창에서 소스 창까지 파일을 끌어다 놓아 복사할 수도 있습니다. 도구 모음 아이콘을 이용해 WinSCP의 파일을 업로드, 다운로드, 삭제, 편집하거나 속성을 수정할 수 있습니다.

**참고**  
Amazon EFS를 스토리지로 사용하는 경우에는 이 참고 사항이 적용되지 않습니다.  
타임스탬프를 포함하여 원격 파일의 속성을 변경하려는 명령은 Amazon S3와 같은 객체 스토리지 시스템과 병립되지 않습니다. 따라서 Amazon S3를 스토리지로 사용하는 경우, 파일 전송을 수행하기 전에 WinSCP 타임스탬프 설정을 비활성화해야 합니다(또는 [`setstat` 오류 방지](#avoid-set-stat)에 설명된 대로 `SetStatOption` 사용). 이렇게 하려면, **WinSCP Transfer 설정** 대화 상자에서 **권한 설정** 업로드 옵션과 **타임스탬프 유지** 일반 옵션을 비활성화해야 합니다.

## Cyberduck 사용하기
<a name="cyberduck"></a>

아래의 지침을 이용해 Cyberduck을 이용하는 명령줄로 파일을 전송하세요.

**Cyberduck을 AWS Transfer Family 사용하여를 통해 파일을 전송하려면**

1. [Cyberduck](https://cyberduck.io/download/) 클라이언트를 엽니다.

1. **연결 열기**를 선택합니다.

1. **연결 열기** 대화 상자에서 프로토콜을 선택합니다. **SFTP (SSH 파일 전송 프로토콜)**, **FTP-SSL (명시적 AUTH TLS)**, 또는 **FTP (파일 전송 프로토콜)**.

1. **서버**에 서버 엔드포인트를 입력합니다. 서버 엔드포인트는 **서버 세부 정보** 페이지에 있습니다. 자세한 내용은 [SFTP, FTPS 및 FTP 서버 세부 정보 보기](configuring-servers-view-info.md)를 참조하세요.

   서버가 VPC 엔드포인트를 사용하는 경우, [Amazon VPC 엔드포인트 찾기](#find-vpc-endpoint)를 참조하세요. 

1. **포트 번호**에 다음을 입력합니다:
   + SFTP에 대한 **22**
   + FTP/FTPS에 대한 **21**

1. **사용자 이름**에 [서버 엔드포인트에 대한 사용자 관리](create-user.md)에서 생성한 사용자 이름을 입력합니다.

1. SFTP를 선택한 경우, SSH 프라이빗 키에 대해 **SSH 프라이빗 키**를 선택하거나 입력합니다.

1. **연결**을 선택합니다.

1. 파일 전송을 실행합니다.

   파일 위치에 따라, 다음 중 하나를 수행하세요.
   + 로컬 디렉터리(소스)에서 전송할 파일을 선택하고, Amazon S3 디렉터리(대상)로 끌어다 놓습니다.
   + Amazon S3 디렉터리(소스)에서 전송할 파일을 선택하고, 로컬 디렉터리(대상)로 끌어다 놓습니다.

## FileZilla 사용
<a name="filezilla"></a>

다음 지침을 이용해 FileZilla를 사용하여 파일을 전송하세요.

**파일 전송을 위한 FileZilla 설정 방법**

1. FileZilla 클라이언트를 엽니다.

1. **파일**을 선택한 다음 **사이트 관리자**를 선택합니다.

1. **사이트 관리자** 대화 상자에서 **새 사이트**를 선택합니다.

1. **일반** 탭에서 **프로토콜**을 위해 프로토콜을 선택합니다.**SFTP** 또는 **FTP**.

   FTP를 선택한 경우, **암호화**에서 다음 중 하나를 선택합니다.
   + **일반 FTP(비보안)만 사용** – FTP의 경우
   + **가능한 경우, TLS를 통한 명시적 FTP를 사용** – FTPS의 경우

1. **호스트 명칭**에는 사용 중인 프로토콜을 입력한 다음 서버 엔드포인트를 입력합니다. 서버 엔드포인트는 **서버 세부 정보** 페이지에 있습니다. 자세한 내용은 [SFTP, FTPS 및 FTP 서버 세부 정보 보기](configuring-servers-view-info.md) 단원을 참조하십시오.
   + SFTP를 사용하는 경우, 다음을 입력합니다: `sftp://hostname`
   +  FTPS를 사용하는 경우, 다음을 입력합니다: `ftps://hostname` 

   *호스트 명칭*을 실제 서버 엔드포인트로 바꿔야 합니다.

   서버가 VPC 엔드포인트를 사용하는 경우, [Amazon VPC 엔드포인트 찾기](#find-vpc-endpoint)를 참조하세요. 

1. **포트 번호**에 다음을 입력합니다:
   + SFTP에 대한 **22**
   + FTP/FTPS에 대한 **21**

1. SFTP를 선택한 경우, **로그온 타입**으로 **키 파일**을 선택합니다.

   **키 파일**의 경우, SSH 프라이빗 키를 선택하거나 입력합니다.

1. **사용자 이름**에 [서버 엔드포인트에 대한 사용자 관리](create-user.md)에서 생성한 사용자 이름을 입력합니다.

1. **연결**을 선택합니다.

1. 파일 전송을 실행합니다.
**참고**  
진행 중인 파일 전송을 중단하면 Amazon S3 버킷에 부분 객체를 AWS Transfer Family 쓸 수 있습니다. 업로드를 중단했다면, Amazon S3 버킷의 파일 크기가 소스 개체의 파일 크기와 동일한지 확인한 후 다음 단계로 계속합니다.

## Perl 클라이언트 사용
<a name="using-clients-with-perl-modules"></a>

NET: :SFTP: :Foreign 펄 클라이언트를 사용하는 경우, `queue_size`를 `1`으(로) 설정해야 합니다. 예제:

`my $sftp = Net::SFTP::Foreign->new('user@s-12345.server.transfer.us-east-2.amazonaws.com', queue_size => 1);`

**참고**  
 이 해결 방법은 [1.92.02](https://metacpan.org/changes/release/SALVA/Net-SFTP-Foreign-1.93#L12) 이전의 `Net::SFTP::Foreign`을 위해 필요합니다.

## LFTP 사용
<a name="using-client-lftp"></a>

LFTP는 사용자가 대부분의 Linux 시스템에서 명령줄 인터페이스를 통해 파일 전송을 수행할 수 있는 무료 FTP 클라이언트입니다.

 대용량 파일 다운로드의 경우 LFTP에 순서가 맞지 않는 패킷과 관련된 알려진 문제가 있어 파일 전송이 실패합니다.

## 업로드 후 처리
<a name="post-processing-upload"></a>

Amazon S3 객체 메타데이터 및 이벤트 알림을 비롯한 업로드 후 처리 정보를 볼 수 있습니다.

**Topics**
+ [Amazon S3 객체 메타데이터](#post-processing-S3-object-metadata)
+ [Amazon S3 이벤트 알림](#post-processing-S3-event-notifications)

### Amazon S3 객체 메타데이터
<a name="post-processing-S3-object-metadata"></a>

객체 메타데이터의 일부로, '`x-amz-meta-user-agent`의 값은 `AWSTransfer`(이)고 `x-amz-meta-user-agent-id`의 값은 `username@server-id`'(이)라는 키가 표시됩니다. `username`은(는) 파일을 업로드한 Transfer Family 사용자이며, `server-id`은(는) 업로드에 사용되는 서버입니다. Lambda 함수 내의 S3 객체에서 [HeadObject](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectHEAD.html) 작업을 사용하여 이 정보에 액세스할 수 있습니다.

![\[의 Amazon S3 객체 메타데이터에 대한 정보를 표시하는 메타데이터 화면입니다 AWS Transfer Family.\]](http://docs.aws.amazon.com/ko_kr/transfer/latest/userguide/images/s3-object-metadata.png)


### Amazon S3 이벤트 알림
<a name="post-processing-S3-event-notifications"></a>

Transfer Family를 사용하여 S3 버킷에 객체를 업로드하면 `RoleSessionName`이(가) [S3 이벤트 알림 구조](https://docs.aws.amazon.com/AmazonS3/latest/dev/notification-content-structure.html)의 요청자 필드에 `[AWS:Role Unique Identifier]/username.sessionid@server-id`와(과) 같이 포함됩니다. 예를 들어, 다음은 S3 버킷으로 복사된 파일에 대한 S3 액세스 로그의 샘플 요청자 필드 콘텐츠입니다.

`arn:aws:sts::AWS-Account-ID:assumed-role/IamRoleName/username.sessionid@server-id`

위의 요청자 필드에는 `IamRoleName`(이)라고 불리는 IAM 역할이 표시됩니다. S3 이벤트 알림 구성에 대한 자세한 설명은 *Amazon Simple Storage Service 개발자 가이드*의 [Configuring Amazon S3 이벤트 알림](https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html)을 참조하세요. AWS Identity and Access Management (IAM) 역할 고유 식별자에 대한 자세한 내용은 *AWS Identity and Access Management 사용 설명서*의 [고유 식별자](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids)를 참조하세요.

## SFTP 메시지
<a name="sftp-transfer-activity-types"></a>

이 섹션에서는 Transfer Family 서버를 사용할 때 SFTP 파일 전송 중 또는 전송 후에 수신할 수 있는 클라이언트 측 메시지를 설명합니다. SFTP 이벤트에 대한 자세한 내용은 SFTP 클라이언트 로그를 확인하세요. 이 정보를 사용하여 오류를 해결하거나 문제를 식별하는 데 도움이 되도록 네트워크 팀에 해당 정보를 전달할 수 있습니다.


**SFTP 클라이언트 측 메시지**  

| 활동 | 설명 | 
| --- | --- | 
| AUTH\$1FAILURE | 사용자가 인증에 실패했습니다. 이는 사용자 지정 자격 증명 공급자 또는 서비스 관리형 사용자의 모든 종류의 실패일 수 있습니다. 이벤트의 세부 정보는 실패의 근본 원인을 명확히 하는 데 도움이 됩니다. | 
| CLOSE | 열려 있는 파일 또는 디렉터리가 성공적으로 닫혔음을 나타냅니다. | 
| 연결됨/연결 해제됨 | 정상적인 연결 성공 및 연결 해제를 나타냅니다. | 
| CREATE\$1SYMLINK  | 심볼 링크가 생성되었습니다(성공 또는 실패). | 
| DELETE | 파일이 삭제되었습니다(성공 또는 실패). | 
| 오류 | 일반적이고 예상치 못한 오류입니다. 관련 설명에는 사용자 또는 네트워크 관리자가 특정 문제를 식별하는 데 도움이 될 수 있는 정보가 포함되어 있습니다. | 
| EXIT\$1REASON | 예기치 않은 오류로 인해 SFTP 세션이 종료될 때 발생합니다. 이벤트와 연결된 메시지는 원인을 설명합니다. | 
| MKDIR | 디렉터리가 생성되었습니다(성공 또는 실패). | 
| OPEN | 파일이 읽기 또는 쓰기를 위해 열렸습니다(성공 또는 실패). | 
| PARTIAL\$1CLOSE | 파일이 아직 열려 있지만 CLOSE 메시지가 수신되지 않은 상태에서 클라이언트가 서버에서 연결 해제되었습니다. Transfer Family는 파일의 수신된 부분(실제로 전체 파일일 수 있음)을 저장하고 PARTIAL\$1CLOSE 이벤트를 내보내 고객에게 문제를 알립니다. 워크플로 통합은 파일을 적절하게 처리하는 onPartialClose 이벤트도 수신합니다. | 
| RENAME | 파일 이름이 변경되었습니다(성공 또는 실패). | 
| RMDIR | 디렉터리가 삭제되었습니다(성공 또는 실패). | 
| SETSTAT |  파일의 속성이 변경됩니다(성공 또는 실패).  스토리지에 Amazon S3를 사용하는 경우 Transfer Family는 SETSTAT를 지원하지 않습니다. 이 [`setstat` 오류 방지](#avoid-set-stat) 섹션에서는 설정을 해제하여 `SetStat` 오류를 방지하는 방법에 대한 세부 정보를 제공합니다. 이렇게 하면가 수신되지 않습니다. `fail unsupported error`대신 `success but do nothing` 메시지가 수신됩니다.   | 
| TLS\$1RESUME\$1FAILURE  | 서버는 TLS 세션 재개를 적용하도록 구성되며 클라이언트는 이를 지원하지 않습니다. | 

# 서버 엔드포인트에 대한 사용자 관리
<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)에 속해야 합니다. 사용자가 그룹에 속하지 않거나 둘 이상의 그룹에 속해 있는 경우 해당 사용자에게 액세스 권한이 부여되지 않습니다.

# 논리적 디렉터리를 사용하여 Transfer Family 디렉터리 구조를 단순화합니다.
<a name="logical-dir-mappings"></a>

논리적 디렉터리는 AWS Transfer Family 서버 디렉터리 구조를 간소화합니다. 논리적 디렉터리를 사용하면 사용자가 Amazon S3 버킷 또는 Amazon EFS 파일 시스템에 연결할 때 탐색할 수 있는 사용자 친화적인 이름으로 가상 디렉터리 구조를 생성할 수 있습니다. 이렇게 하면 사용자가 실제 디렉터리 경로, 버킷 이름 및 파일 시스템 이름을 볼 수 없습니다.

**참고**  
최종 사용자가 수행할 수 있는 작업만 수행할 수 있도록 세션 정책을 사용해야 합니다.  
논리적 디렉터리를 사용하여 최종 사용자를 위한 사용자 친화적인 가상 디렉터리를 생성하고 버킷 이름을 추상화해야 합니다. 논리적 디렉터리 매핑을 사용하면 사용자가 지정된 논리적 경로 및 하위 디렉터리에만 액세스하고 논리적 루트를 통과하는 상대 경로는 금지할 수 있습니다.  
Transfer Family는 상대 요소를 포함할 수 있는 모든 경로를 검증하고 이러한 경로를 Amazon S3에 전달하기 전에 이러한 경로가 해결되지 않도록 적극적으로 차단합니다. 이렇게 하면 사용자가 논리적 매핑을 벗어나지 않습니다.  
Transfer Family는 최종 사용자가 논리적 디렉터리 외부의 디렉터리에 액세스하지 못하도록 하지만 고유한 역할 또는 세션 정책을 사용하여 스토리지 수준에서 최소 권한을 적용하는 것이 좋습니다.

## chroot 및 디렉터리 구조 이해
<a name="chroot-dir-structure"></a>

**chroot** 작업을 사용하면 사용자의 루트 디렉터리를 스토리지 계층 구조의 모든 위치로 설정할 수 있습니다. 이렇게 하면 사용자가 구성된 홈 또는 루트 디렉터리로 제한되어 상위 수준 디렉터리에 액세스할 수 없습니다.

Amazon S3 사용자가 로 제한되는 경우를 생각해 보세요`amzn-s3-demo-bucket/home/${transfer:UserName}`. **그루트**가 없으면 일부 클라이언트에서 사용자가 /amzn-s3-demo-bucket/home까지 이동할 수 있으므로 적절한 디렉터리로 돌아가려면 로그아웃 및 로그인이 필요할 수 있습니다. **chroot** 작업을 수행하면이 문제가 방지됩니다.

여러 버킷 및 접두사에서 사용자 지정 디렉터리 구조를 생성할 수 있습니다. 이는 워크플로에 버킷 접두사만으로는 제공할 수 없는 특정 디렉터리 레이아웃이 필요한 경우에 유용합니다. 디렉터리 경로가 파일 시스템의 다른 위치를 참조하는 Linux 파일 시스템에 심볼릭 링크를 생성하는 것과 비슷하게 Amazon S3 내의 여러 비연속 위치에 연결할 수도 있습니다.

## 논리적 디렉터리 사용 규칙
<a name="logical-dir-rules"></a>

이 섹션에서는 논리적 디렉터리 사용에 대한 몇 가지 규칙 및 기타 고려 사항을 설명합니다.

### 매핑 제한
<a name="key-mapping-rules"></a>
+ 이 일 때 하나의 매핑만 허용됩니다`Entry``"/"`(중첩 경로는 허용되지 않음).
+ 논리적 디렉터리는 사용자 지정 IDP 및 AD 사용자의 경우 최대 2.1MB, 서비스 관리형 사용자의 경우 2,000개 항목의 매핑을 지원합니다. 다음과 같이 매핑 크기를 계산할 수 있습니다.

  1. 형식으로 일반적인 매핑을 작성합니다. `{"Entry":"/entry-path","Target":"/target-path"}`여기서 `entry-path` 및 `target-path`는 사용할 실제 값입니다.

  1. 해당 문자열의 문자 수를 계산한 다음 하나(1)를 추가합니다.

  1. 해당 수에 서버에 대해 보유한 대략적인 매핑 수를 곱합니다.

  3단계에서 예상한 수가 2.1MB 미만인 경우 매핑이 허용 한도 내에 있는 것입니다.

### 대상 경로 요구 사항
<a name="target-path"></a>
+ 버킷 또는 파일 시스템 경로가 사용자 이름에 따라 파라미터화된 경우 `${transfer:UserName}` 변수를 사용합니다.
+ 연결된 IAM 역할에 해당 스토리지 위치에 액세스하는 데 필요한 권한이 있는 한 다른 Amazon S3 버킷 또는 파일 시스템을 가리키도록 대상을 구성할 수 있습니다.
+ 모든 대상은 슬래시(`/`)로 시작해야 하지만 슬래시로 끝날 수는 없습니다. 예를 들어, `/amzn-s3-demo-bucket/images`는 정답이고, `amzn-s3-demo-bucket/images `와 `/amzn-s3-demo-bucket/images/`는 그렇지 않습니다.

### 스토리지 고려 사항
<a name="storage-considerations"></a>
+ Amazon S3는 폴더가 가상 개념으로만 존재하는 객체 스토어입니다. Amazon S3 스토리지를 사용하는 경우 Transfer Family는 후행 슬래시가 있는 0바이트 객체가 없더라도 STAT 작업에서 접두사를 디렉터리로 보고합니다. 후행 슬래시가 있는 적절한 0바이트 객체도 STAT 작업의 디렉터리로 보고됩니다. 이 동작은 [ Amazon Simple Storage Service 사용 설명서의 폴더를 사용하여 Amazon S3 콘솔에서 객체 구성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-folders.html)에 설명되어 있습니다. ** 
+ 파일과 폴더를 구분해야 하는 애플리케이션의 경우 Amazon Elastic File System(Amazon EFS)을 Transfer Family 스토리지 옵션으로 사용합니다.
+ 사용자의 논리적 디렉터리 값을 지정하는 경우 사용하는 파라미터는 사용자 유형에 따라 다릅니다.
  + 서비스 관리 사용자의 경우 `HomeDirectoryMappings`에서 논리적 디렉터리 값을 제공하세요.
  + 사용자 지정 자격 증명 공급자 사용자의 경우에 논리적 디렉터리 값을 제공합니다`HomeDirectoryDetails`.

### 사용자 디렉터리 값
<a name="user-dir-values"></a>
+ 논리적 디렉터리 값을 지정하기 위한 파라미터는 사용자 유형에 따라 다릅니다.
  + 서비스 관리 사용자의 경우 `HomeDirectoryMappings`에서 논리적 디렉터리 값을 제공하세요.
  + 사용자 지정 자격 증명 공급자 사용자의 경우에 논리적 디렉터리 값을 제공합니다`HomeDirectoryDetails`.
+ LOGICAL HomeDirectoryType을 사용하는 경우 서비스 관리형 사용자, Active Directory 액세스 및 응답에 HomeDirectoryDetails가 제공되는 사용자 지정 자격 증명 공급자 구현에 대한 HomeDirectory 값을 지정할 수 있습니다. 지정하지 않으면 HomeDirectory의 기본값은 입니다`/`.

논리적 디렉터리를 구현하는 방법에 대한 자세한 내용은 섹션을 참조하세요[논리적 디렉터리 구현](implement-log-dirs.md).

# 논리적 디렉터리 구현
<a name="implement-log-dirs"></a>

**중요**  
**루트 디렉터리 요구 사항**
Amazon S3 성능 최적화 설정을 사용하지 않는 경우 시작 시 루트 디렉터리가 있어야 합니다.
Amazon S3의 경우 이는 슬래시()로 끝나는 0바이트 객체를 생성하는 것을 의미합니다`/`.
이 요구 사항을 방지하려면 서버를 생성하거나 업데이트할 때 Amazon S3 성능 최적화를 활성화하는 것이 좋습니다.
LOGICAL HomeDirectoryType을 사용하여 HomeDirectory를 지정할 때 값은 논리적 디렉터리 매핑 중 하나에 매핑되어야 합니다. 이 서비스는 사용자 생성 및 업데이트 중에 이를 검증하여 작동하지 않는 구성을 방지합니다.
**논리적 홈 디렉터리 구성**
LOGICAL을 HomeDirectoryType으로 사용하는 경우 다음 사항에 유의하세요.  
HomeDirectory 값은 기존 논리적 디렉터리 매핑 중 하나와 일치해야 합니다.
시스템은 사용자 생성 및 업데이트 중에 이를 자동으로 검증합니다.
이 검증은 액세스 문제를 일으키는 구성을 방지합니다.

## 논리적 디렉터리 활성화
<a name="enable-log-dirs-small"></a>

사용자의 논리적 디렉터리를 사용하려면 `HomeDirectoryType` 파라미터를 로 설정합니다`LOGICAL`. 새 사용자를 생성하거나 기존 사용자를 업데이트할 때이 작업을 수행합니다.

```
"HomeDirectoryType": "LOGICAL"
```

## 사용자`chroot`에 대해 활성화
<a name="chroot"></a>

**chroot**의 경우, 각 사용자에 대한 단일 `Entry` 및 `Target` 쌍으로 구성된 디렉터리 구조를 만드세요. 항목 **/**는 루트 폴더를 나타내는 반면, **대상**은 버킷 또는 파일 시스템의 실제 위치를 지정합니다.

------
#### [ Example for Amazon S3 ]

```
[{"Entry": "/", "Target": "/amzn-s3-demo-bucket/jane"}]
```

------
#### [ Example for Amazon EFS ]

```
[{"Entry": "/", "Target": "/fs-faa1a123/jane"}]
```

------

이전 예와 같이 절대 경로를 사용하거나, 다음 예와 같이 사용자 이름을 동적으로 `${transfer:UserName}`로 대체할 수 있습니다.

```
[{"Entry": "/", "Target":
"/amzn-s3-demo-bucket/${transfer:UserName}"}]
```

위 예에서 사용자는 루트 디렉터리에 잠겨 있어 계층 구조에서 상위 위치로 이동할 수 없습니다.

## 가상 디렉터리 구조
<a name="virtual-dirs"></a>

가상 디렉터리 구조의 경우, 사용자의 IAM 역할 매핑에 액세스 권한이 있는 한, 여러 버킷 또는 파일 시스템을 포함하여 S3 버킷 또는 EFS 파일 시스템 어디에나 대상을 사용하여 여러 `Entry` `Target` 쌍을 생성할 수 있습니다.

다음 가상 구조 예제에서는 사용자가 AWS SFTP에 로그인할 때 , `/pics`, `/doc` `/reporting`및 하위 디렉터리가 있는 루트 디렉터리에 있습니다`/anotherpath/subpath/financials`.

**참고**  
Amazon S3 디렉터리의 성능을 최적화하도록 선택하지 않는 한(서버를 생성하거나 업데이트할 때) 사용자 또는 관리자는 디렉터리가 아직 없는 경우 디렉터리를 생성해야 합니다. 이 문제를 피하는 것은 Amazon S3 성능 최적화를 고려해야 하는 이유입니다.  
Amazon EFS의 경우 관리자가 논리적 매핑 또는 `/` 디렉터리를 생성해야 합니다.

```
[
{"Entry": "/pics", "Target": "/amzn-s3-demo-bucket1/pics"}, 
{"Entry": "/doc", "Target": "/amzn-s3-demo-bucket1/anotherpath/docs"},
{"Entry": "/reporting", "Target": "/amzn-s3-demo-bucket2/Q1"},
{"Entry": "/anotherpath/subpath/financials", "Target": "/amzn-s3-demo-bucket2/financials"}]
```



**참고**  
 매핑한 특정 폴더에만 파일을 업로드할 수 있습니다. 즉, 이전 예에서는 `/anotherpath` 또는 `anotherpath/subpath` 디렉터리에는 업로드할 수 없고; `anotherpath/subpath/financials`에만 업로드할 수 있습니다. 또한 경로가 겹칠 수 없으므로 이러한 경로에 직접 매핑할 수 없습니다.  
 예를 들어, 다음 매핑을 형성한다고 가정하겠습니다:   

```
{
   "Entry": "/pics", 
   "Target": "/amzn-s3-demo-bucket/pics"
}, 
{
   "Entry": "/doc", 
   "Target": "/amzn-s3-demo-bucket/mydocs"
}, 
{
   "Entry": "/temp", 
   "Target": "/amzn-s3-demo-bucket2/temporary"
}
```
 해당 버킷에만 파일을 업로드할 수 있습니다. `sftp`를 통해 처음 연결하면 루트 디렉터리인 `/`(으)로 이동됩니다. 해당 디렉터리에 파일을 업로드하려고 하면 업로드가 실패합니다. 다음 명령은 예 순서를 나타냅니다:   

```
sftp> pwd
Remote working directory: /
sftp> put file
Uploading file to /file
remote open("/file"): No such file or directory
```
임의의 `directory/sub-directory` 위치에 업로드하려면 경로를 `sub-directory`에 명시적으로 매핑해야 합니다. 

다운로드하여 사용할 수 있는 AWS CloudFormation 템플릿을 포함하여 논리적 디렉터리 구성 및 사용자에 **chroot** 대한 자세한 내용은 AWS 스토리지 블로그의 [ chroot 및 논리적 디렉터리를 사용하여 AWS SFTP 구조 간소화](https://aws.amazon.com/blogs/storage/simplify-your-aws-sftp-structure-with-chroot-and-logical-directories/)를 참조하세요.

# 논리적 디렉터리 구성 예제
<a name="logical-dir-example"></a>

이 예에서는 사용자를 생성하고 두 개의 논리적 디렉터리를 할당합니다. 다음 명령을 실행하면 (기존 Transfer Family 서버의 경우) 논리적 디렉터리 `pics` 및 `doc` 를 사용하여 새 사용자가 만들어집니다.

```
aws transfer create-user \
    --user-name marymajor \
    --server-id s-11112222333344445 \
    --role arn:aws:iam::1234abcd5678:role/marymajor-role \
    --home-directory-type LOGICAL \
    --home-directory-mappings "[{\"Entry\":\"/pics\", \"Target\":\"/amzn-s3-demo-bucket1/pics\"}, {\"Entry\":\"/doc\", \"Target\":\"/amzn-s3-demo-bucket2/test/mydocs\"}]" \
    --ssh-public-key-body file://~/.ssh/id_rsa.pub
```

**marymajor**가 기존 사용자이고 홈 디렉터리 타입이 `PATH`인 경우 이전 사용자와 비슷한 명령을 사용하여 그것을 `LOGICAL`로 변경할 수 있습니다.

```
aws transfer update-user \
    --user-name marymajor \
    --server-id s-11112222333344445 \
    --role arn:aws:iam::1234abcd5678:role/marymajor-role \
    --home-directory-type LOGICAL \
    --home-directory-mappings "[{\"Entry\":\"/pics\", \"Target\":\"/amzn-s3-demo-bucket1/pics\"}, {\"Entry\":\"/doc\", \"Target\":\"/amzn-s3-demo-bucket2/test/mydocs\"}]"
```

유념할 사항:
+ 디렉터리 `/amzn-s3-demo-bucket1/pics` 및 `/amzn-s3-demo-bucket2/test/mydocs` 없는 경우 사용자 (또는 관리자) 가 해당 디렉터리를 만들어야 합니다.
**참고**  
이러한 디렉터리는 최적화된 디렉터리를 구성한 경우 Transfer Family 서버에서 자동으로 생성됩니다.
+ 가 서버에 **marymajor** 연결하고 `ls -l` 명령을 실행하면 Mary는 다음을 확인합니다.

  ```
  drwxr--r--   1        -        -        0 Mar 17 15:42 doc
  drwxr--r--   1        -        -        0 Mar 17 16:04 pics
  ```
+ **marymajor**은(는) 이 수준에서는 파일이나 디렉터리를 만들 수 없습니다. 하지만 `pics` 및 `doc` 내에서 하위 디렉토리를 추가할 수는 있습니다.
+ Mary가 `pics` 및에 추가하는 파일은 `/amzn-s3-demo-bucket2/test/mydocs` 각각 Amazon S3 경로 `/amzn-s3-demo-bucket1/pics` 및에 `doc` 추가됩니다.
+ 이 예에서는 이러한 가능성을 설명하기 위해 서로 다른 두 개의 버킷을 지정합니다. 하지만 사용자에 대해 지정한 여러 논리 디렉터리 또는 모든 논리적 디렉터리에 동일한 버킷을 사용할 수 있습니다.

이 예제에서는 논리적 홈 경로에 대한 대체 구성을 제공합니다.

```
aws transfer create-user \
    --user-name marymajor \
    --server-id s-11112222333344445 \
    --role arn:aws:iam::1234abcd5678:role/marymajor-role \
    --home-directory-type LOGICAL \
    --home-directory /home/marymajor \
    --home-directory-mappings "[{\"Entry\":\"/home/marymajor/pics\", \"Target\":\"/amzn-s3-demo-bucket1/pics\"}, {\"Entry\":\"/home/marymajor/doc\", \"Target\":\"/amzn-s3-demo-bucket2/test/mydocs\"}]" \
    --ssh-public-key-body file://~/.ssh/id_rsa.pub
```

다음 사항에 유의하세요.
+ 매핑은 두 논리적 경로의 첫 번째 부분`/home/marymajor`인 공통 경로를 제공합니다. 그런 다음 파일을 `pics` 및 `doc` 폴더에 추가할 수 있습니다.
+ 이전 예제와 마찬가지로 홈 디렉터리 `/home/marymajor`는 읽기 전용입니다.

## Amazon EFS를 위한 논리적 디렉터리 구성
<a name="logical-dir-efs"></a>

Transfer Family 서버에서 Amazon EFS를 사용하는 경우, 사용자가 논리적 홈 디렉터리에서 작업할 수 있으려면 먼저 읽기 및 쓰기 권한이 있는 사용자의 홈 디렉터리를 생성해야 합니다. 사용자는 논리적 홈 디렉터리 상의 `mkdir`에 대한 권한이 없기 때문에 이 디렉터리를 직접 만들 수는 없습니다.

사용자의 홈 디렉터리가 존재하지 않고 사용자가 `ls` 명령을 실행하면 시스템은 다음과 같이 응답합니다:

```
sftp> ls
remote readdir ("/"): No such file or directory
```

상위 디렉터리에 대한 관리 액세스 권한이 있는 사용자는 사용자의 논리적 홈 디렉터리를 생성해야 합니다.

## 사용자 지정 AWS Lambda 응답
<a name="auth-lambda-response"></a>

맞춤 ID 공급자에 연결하는 Lambda 함수와 함께 논리적 디렉터리를 사용할 수 있습니다. 이렇게 하려면 Lambda 함수에서 `HomeDirectoryType`를 **LOGICAL**(으)로 지정하고, `HomeDirectoryDetails` 파라미터에 `Entry`와(과) `Target`를 추가합니다. 예제:

```
HomeDirectoryType: "LOGICAL"
HomeDirectoryDetails: "[{\"Entry\": \"/\", \"Target\": \"/amzn-s3-demo-bucket/theRealFolder"}]"
```

다음 코드는 맞춤 Lambda 인증 호출로부터의 응답 성공의 예입니다.

```
aws transfer test-identity-provider \
    --server-id s-1234567890abcdef0 \
    --user-name myuser
{
    "Url": "https://a1b2c3d4e5.execute-api.us-east-2.amazonaws.com/prod/servers/s-1234567890abcdef0/users/myuser/config", 
    "Message": "", 
    "Response": "{\"Role\": \"arn:aws:iam::123456789012:role/bob-usa-role\",
                  \"HomeDirectoryType\": \"LOGICAL\",
                  \"HomeDirectoryDetails\": \"[{\\\"Entry\\\":\\\"/myhome\\\",\\\"Target\\\":\\\"/amzn-s3-demo-bucket/theRealFolder\\\"}]\",
                  \"PublicKeys\": \"[ssh-rsa myrsapubkey]\"}", 
    "StatusCode": 200
}
```

**참고**  
이 `"Url":` 행은 API Gateway 메서드를 맞춤 ID 공급자로 사용하는 경우에만 반환됩니다.

# Transfer Family를 사용하여 FSx for NetApp ONTAP 파일 시스템에 액세스
<a name="fsx-s3-access-points"></a>



**Contents**
+ [개요](#fsx-overview)
+ [사전 조건](#fsx-prerequisites)
  + [FSx for NetApp ONTAP 요구 사항](#fsx-ontap-requirements)
  + [필수 IAM 권한](#required-iam-permissions)
+ [FSx 스토리지가 Transfer Family와 작동하는 방식](#how-fsx-storage-works)
  + [파일 시스템 사용자 자격 증명](#file-system-user-identity)
+ [FSx용 S3 액세스 포인트 생성](#creating-s3-access-point)
  + [액세스 포인트 이름 지정](#access-point-naming)
  + [FSx for NetApp ONTAP에 대한 액세스 포인트 생성](#creating-access-point-ontap)
  + [파일 시스템 권한 구성](#configuring-file-system-permissions)
+ [FSx에서 S3 액세스 포인트 별칭 사용](#using-s3-access-point-aliases)
  + [액세스 포인트 별칭 정보](#about-access-point-aliases)
  + [액세스 포인트 별칭 찾기](#finding-access-point-alias)
+ [FSx 스토리지용 Transfer Family 구성](#configuring-transfer-family-fsx)
  + [IAM 역할 생성](#creating-iam-role-fsx)
+ [FSx 스토리지 사용자 관리](#managing-users-fsx)
  + [사용자 생성](#creating-user-fsx)
  + [여러 디렉터리 매핑 구성](#multiple-directory-mappings)
+ [파일 전송 클라이언트 구성](#configuring-file-transfer-clients)
  + [WinSCP 구성](#winscp-configuration)
  + [기타 SFTP 클라이언트](#other-sftp-clients)
+ [FSx 스토리지 문제 해결](#troubleshooting-fsx-storage)
  + [파일 작업 문제](#file-operation-issues)

## 개요
<a name="fsx-overview"></a>

Transfer Family는 S3 액세스 포인트를 통해 Amazon FSx for NetApp ONTAP을 지원합니다. Amazon FSx for NetApp ONTAP은 NetApp의 인기 있는 ONTAP 파일 시스템에 구축된 매우 안정적이고 확장 가능하며 성능이 뛰어나고 기능이 풍부한 파일 스토리지를 제공하는 완전 관리형 서비스입니다. FSx 파일 시스템으로 Transfer Family를 구성하면 사용자는 표준 파일 전송 클라이언트를 사용하여 Transfer Family 엔드포인트에 연결합니다. Transfer Family는 데이터가 FSx 파일 시스템에 남아 있는 동안 FSx 볼륨에 연결된 S3 액세스 포인트를 통해 파일 작업을 라우팅합니다. FSx for NetApp ONTAP에 대한 자세한 내용은 [Amazon FSx for NetApp ONTAP이란 무엇입니까?](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/what-is-fsx-ontap.html)를 참조하세요.

이 통합을 통해 다음을 수행할 수 있습니다.
+ SFTP, FTPS 또는 FTP 프로토콜을 사용하여 파일을 엔터프라이즈급 파일 스토리지로 전송
+ 여러 프로토콜(SFTP, NFS, SMB)을 통해 동일한 데이터에 액세스
+ 스냅샷, 백업 및 데이터 계층화와 같은 FSx 기능 사용

**중요**  
이름 바꾸기 및 추가 작업을 포함하여 Transfer Family에서 FSx 파일 시스템을 사용할 때는 일부 파일 작업이 지원되지 않습니다. 업로드 작업의 경우 파일 크기는 5GB로 제한됩니다. 제한 사항의 전체 목록은 [액세스 포인트 호환성을 참조하세요](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/access-points-for-fsxn-object-api-support.html).

## 사전 조건
<a name="fsx-prerequisites"></a>

Amazon FSx로 Transfer Family를 구성하기 전에 다음 요구 사항을 충족해야 합니다.

### FSx for NetApp ONTAP 요구 사항
<a name="fsx-ontap-requirements"></a>

Transfer Family와 함께 FSx for NetApp ONTAP을 사용하려면 다음이 필요합니다.
+ ONTAP 버전 9.17.1 이상을 실행하는 FSx for NetApp ONTAP 파일 시스템
+ 동일한 AWS 리전의 파일 시스템 및 S3 액세스 포인트
+ 파일 시스템과 액세스 포인트를 모두 소유한 동일한 AWS 계정

자세한 내용은 [Amazon FSx for NetApp ONTAP 시작하기를 참조하세요](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/getting-started.html).

### 필수 IAM 권한
<a name="required-iam-permissions"></a>

각 S3 액세스 포인트를 사용하여 이루어진 모든 요청에 S3가 적용하는 고유한 권한 및 네트워크 제어를 사용하여 각 S3 액세스 포인트를 구성할 수 있습니다. S3 액세스 포인트는 리소스, 사용자 또는 기타 조건별로 액세스 포인트 사용을 제어하는 데 사용할 수 있는 IAM 리소스 정책을 지원합니다. 애플리케이션 또는 사용자가 액세스 포인트를 통해 파일에 액세스하려면 액세스 포인트와 기본 볼륨 모두 요청을 허용해야 합니다. 자세한 내용은 [IAM 액세스 포인트 정책을](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/s3-ap-manage-access-fsxn.html) 참조하세요.

FSx용 Amazon S3 액세스 포인트는 IAM 권한과 파일 시스템 수준 권한을 결합하는 이중 계층 권한 부여 모델을 사용합니다. 이 접근 방식을 사용하면 AWS 서비스 수준과 기본 파일 시스템 수준 모두에서 데이터 액세스 요청이 제대로 승인됩니다.

애플리케이션 또는 사용자가 액세스 포인트를 통해 데이터에 성공적으로 액세스하려면 S3 액세스 포인트 정책과 기본 FSx 볼륨 모두에서 요청을 허용해야 합니다.

이 통합을 생성하고 구성하려면 다음 권한이 필요합니다.
+ `fsx:CreateAndAttachS3AccessPoint`
+ `s3:CreateAccessPoint`
+ `s3:GetAccessPoint`
+ `s3:PutAccessPointPolicy` (선택 사항인 액세스 포인트 정책을 생성하는 경우)

## FSx 스토리지가 Transfer Family와 작동하는 방식
<a name="how-fsx-storage-works"></a>

FSx 파일 시스템으로 Transfer Family를 구성하면 다음 구성 요소가 함께 작동하여 파일 전송을 활성화합니다.

1. 사용자는 SFTP, FTPS 또는 FTP 클라이언트를 사용하여 Transfer Family 서버에 연결합니다.

1. Transfer Family는 서비스 관리형 자격 증명, 사용자 지정 자격 증명 공급자 또는를 사용하여 사용자를 인증합니다 AWS Directory Service for Microsoft Active Directory. 인증되면 Transfer Family는 사용자와 연결된 IAM 역할을 수임합니다.

1. 각 파일 작업에 대해 Transfer Family는 사용자의 수임된 IAM 역할을 사용하여 S3 액세스 포인트에 요청하는 표준 S3 API 클라이언트 역할을 하며 S3 액세스 포인트 정책에 대한 권한을 확인합니다.

1. FSx 파일 시스템은 액세스 포인트와 연결된 파일 시스템 사용자에게 요청된 작업을 수행할 권한이 있는지 확인합니다. 그런 다음 FSx 볼륨에서 파일 작업이 수행됩니다.

파일 작업이 성공하려면 두 권한 부여 계층 모두 요청을 허용해야 합니다.

**참고**  
S3 액세스 포인트를 FSx 볼륨에 연결해도 NFS 또는 SMB를 통해 직접 액세스할 때 볼륨의 동작 방식은 변경되지 않습니다. 기존 파일 프로토콜 액세스는 변경되지 않고 계속 작동합니다.

### 파일 시스템 사용자 자격 증명
<a name="file-system-user-identity"></a>

각 액세스 포인트는 액세스 포인트를 생성할 때 지정하는 파일 시스템 사용자 ID를 사용합니다. 이 자격 증명은 해당 액세스 포인트를 통해 이루어진 모든 파일 액세스 요청을 승인합니다. 파일 시스템 사용자는 기본 Amazon FSx 파일 시스템의 사용자 계정입니다. 파일 시스템 사용자에게 읽기 전용 액세스 권한이 있는 경우 액세스 포인트를 사용하여 수행된 읽기 요청만 승인되고 쓰기 요청은 차단됩니다. 파일 시스템 사용자에게 읽기-쓰기 액세스 권한이 있는 경우 액세스 포인트를 사용하여 만든 연결된 볼륨에 대한 읽기 및 쓰기 요청이 모두 승인됩니다.

## FSx용 S3 액세스 포인트 생성
<a name="creating-s3-access-point"></a>

Transfer Family를 구성하기 전에 FSx 볼륨에 연결된 S3 액세스 포인트를 생성해야 합니다. S3 액세스 포인트는 버킷 또는 Amazon FSx for ONTAP 볼륨과 같은 데이터 소스에 연결된 명명된 네트워크 엔드포인트입니다. Amazon FSx 콘솔, AWS CLI 또는 API를 사용하여 액세스 포인트를 생성하고 FSx for NetApp ONTAP에 연결할 수 있습니다. 연결되면 S3 객체 API를 사용하여 파일 데이터에 액세스할 수 있습니다. 데이터는 Amazon FSx 파일 시스템에 계속 상주하며 기존 워크로드에서 직접 액세스할 수 있습니다. 백업, 스냅샷, 사용자 및 그룹 할당량, 압축 등 모든 FSx for NetApp ONTAP 스토리지 관리 기능을 사용하여 스토리지를 계속 관리합니다.

자세한 내용은 [액세스 포인트 생성](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/create-access-points.html)을 참조하십시오.

### 액세스 포인트 이름 지정
<a name="access-point-naming"></a>

액세스 포인트의 이름을 지정할 때 다음 지침을 따릅니다.
+ 액세스 포인트 이름은 AWS 계정 및 리전 내에서 고유해야 합니다.
+ 이름은 `-ext-s3alias` (별칭에 대해 예약됨)로 끝날 수 없습니다.
+ 민감한 정보는 DNS에 게시되므로 이름에 포함하지 마세요.

이름 지정 규칙의 전체 목록은 [액세스 포인트 이름 지정 규칙, 제한 및 제한을](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/access-point-for-fsxn-restrictions-limitations-naming-rules.html) 참조하세요.

### FSx for NetApp ONTAP에 대한 액세스 포인트 생성
<a name="creating-access-point-ontap"></a>

다음 절차에 따라 FSx for NetApp ONTAP 볼륨에 대한 S3 액세스 포인트를 생성합니다.

**액세스 포인트를 생성하려면(콘솔)**

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

1. 탐색 창에서 **파일 시스템**을 선택합니다.

1. FSx for NetApp ONTAP 파일 시스템을 선택합니다.

1. **볼륨** 탭을 선택합니다.

1. 연결할 볼륨을 선택합니다.

1. **작업**에서 ** S3 액세스 포인트 생성을** 선택합니다.

1. **액세스 포인트 이름**에 설명이 포함된 이름(예: `transfer-family-ap`)을 입력합니다.

1. **파일 시스템 사용자 자격 증명 유형**에서 다음 중 하나를 선택합니다.
   + **UNIX 자격 증명** - UNIX 보안 스타일이 있는 볼륨의 경우
   + **Windows 자격 증명** - NTFS 보안 스타일이 있는 볼륨의 경우

1. (선택 사항) **액세스 포인트 정책에**이 액세스 포인트를 통해 액세스하는 객체에 대해 수행할 수 있는 IAM 보안 주체를 정의하는 IAM 정책을 입력합니다. 자세한 내용은 [액세스 포인트 액세스 관리를](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/s3-ap-manage-access-fsxn.html) 참조하세요.

1. **생성(Create)**을 선택합니다.

1. 생성 후 Transfer Family 구성에 사용할 액세스 포인트 별칭을 기록해 둡니다.

**참고**  
가 연결된 SFTP/FTPS 사용자를 대신하여 S3 리소스에 AWS Transfer Family 액세스하는 경우 요청은 VPC가 아닌 AWS Transfer Family 인프라에서 시작됩니다. 따라서 VPC 네트워크 오리진으로 구성된 S3 액세스 포인트는 이러한 요청을 거부합니다. 그러나 인터넷 네트워크 오리진으로 구성된 액세스 포인트를 사용하더라도 Transfer Family와 액세스 포인트 간의 모든 트래픽은 프라이빗으로 유지되고 AWS 백본 네트워크를 통해 이동하며 퍼블릭 인터넷을 통과하지 않습니다.

### 파일 시스템 권한 구성
<a name="configuring-file-system-permissions"></a>

지정하는 파일 시스템 사용자는 Transfer Family 사용자가 수행할 수 있는 작업을 결정합니다. FSx 볼륨에 대한 적절한 권한을 구성해야 합니다.

**UNIX 예제:**

```
# Create a directory for Transfer Family users
mkdir -p /vol1/transfer-users

# Set ownership to match the access point user
chown 1001:1001 /vol1/transfer-users

# Set permissions
chmod 755 /vol1/transfer-users
```

**Windows 예:**

```
# Create a directory for Transfer Family users
New-Item -Path "D:\vol1\transfer-users" -ItemType Directory

# Set permissions for the file system user associated with the access point
# Replace DOMAIN\TransferUser with your Windows user identity
icacls "D:\vol1\transfer-users" /grant "DOMAIN\TransferUser:(OI)(CI)M" /T

# Verify permissions
icacls "D:\vol1\transfer-users"
```

## FSx에서 S3 액세스 포인트 별칭 사용
<a name="using-s3-access-point-aliases"></a>

Transfer Family에서 FSx 파일 시스템을 사용하는 경우 S3 액세스 포인트 별칭을 사용해야 합니다. Transfer Family는 FSx 스토리지에 대한 액세스 포인트 ARNs 또는 기타 참조 방법 사용을 지원하지 않습니다.

**중요**  
AWS Transfer Family 는 FSx 파일 시스템을 사용할 때만 S3 액세스 포인트 별칭을 지원합니다. 액세스 포인트 ARNs 또는 virtual-hosted-style URIs 사용할 수 없습니다.

**중요**  
액세스 포인트는 볼륨과 동일한 리전에 있어야 합니다.

### 액세스 포인트 별칭 정보
<a name="about-access-point-aliases"></a>

FSx 볼륨에 연결된 S3 액세스 포인트를 생성하면 Amazon S3가 액세스 포인트 별칭을 자동으로 생성합니다. 이 별칭은 S3 버킷 이름을 사용하는 모든 곳에서 사용할 수 있는 고유 식별자입니다.

FSx 볼륨에 연결된 액세스 포인트의 경우 별칭은 다음 형식을 사용합니다.

```
access-point-name-metadata-ext-s3alias
```

**예제 별칭:**

```
my-fsx-ap-aqfqprnstn7aefdfbarligizwgyfouse1a-ext-s3alias
```

**참고**  
접미사는 `-ext-s3alias` FSx 액세스 포인트 별칭용으로 예약되어 있습니다. 액세스 포인트 이름에는이 접미사를 사용할 수 없습니다.

### 액세스 포인트 별칭 찾기
<a name="finding-access-point-alias"></a>

액세스 포인트를 생성한 후 액세스 포인트 별칭을 찾을 수 있습니다.

**액세스 포인트 별칭을 찾으려면(콘솔)**

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

1. 탐색 창에서 **파일 시스템**을 선택합니다.

1. 파일 시스템을 선택합니다.

1. **볼륨** 탭을 선택하고 액세스 포인트를 생성한 볼륨을 선택합니다.

1. **S3 액세스 포인트 세부 정보** 열로 이동합니다.

1. 별칭은 **별칭** 열에 표시됩니다.

**액세스 포인트 별칭을 찾으려면(CLI)**

`describe-s3-access-point-attachments` 명령을 사용합니다.

```
aws fsx describe-s3-access-point-attachments \
    --filters Name=file-system-id,Values=fs-0123456789abcdef0
```

응답에는 별칭이 포함됩니다.

```
{
    "S3AccessPointAttachments": [
        {
            "S3AccessPoint": {
                "ResourceARN": "arn:aws:s3:us-east-1:111122223333:accesspoint/my-fsx-ap",
                "Alias": "my-fsx-ap-aqfqprnstn7aefdfbarligizwgyfouse1a-ext-s3alias"
            }
        }
    ]
}
```

Transfer Family 사용자를 구성할 때 홈 디렉터리 매핑에서 액세스 포인트 별칭을 사용합니다.

**홈 디렉터리 형식:**

```
/access-point-alias/path/to/directory
```

**예:**

```
/my-fsx-ap-aqfqprnstn7aefdfbarligizwgyfouse1a-ext-s3alias/users/jsmith
```

## FSx 스토리지용 Transfer Family 구성
<a name="configuring-transfer-family-fsx"></a>

S3 액세스 포인트를 생성한 후 이를 사용하도록 Transfer Family 서버를 구성합니다.

### IAM 역할 생성
<a name="creating-iam-role-fsx"></a>

Transfer Family에 S3 액세스 포인트에 대한 액세스 권한을 부여하는 IAM 역할을 생성해야 합니다.

**중요**  
IAM 정책에는 별칭이 아닌 액세스 포인트 ARN 형식이 필요합니다. `arn:aws:s3:region:account-id:accesspoint/access-point-name` IAM 정책 리소스 문의 형식을 사용합니다. 액세스 포인트 별칭(로 끝남`-ext-s3alias`)은 홈 디렉터리 매핑에만 사용됩니다.

**IAM 역할을 만들려면**

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

1. 탐색 창에서 **역할을** 선택한 다음 **역할 생성을** 선택합니다.

1. **신뢰할 수 있는 엔터티 유형**에서 **AWS 서비스**를 선택합니다.

1. **사용 사례**에서 **전송**을 선택합니다.

1. **다음**을 선택합니다.

1. **정책 생성을** 선택하고 정책을 입력합니다(아래 샘플 정책 참조).

1. 정책을 역할에 연결하고 **역할 생성을** 선택합니다.

**IAM 정책의 예:**

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowFileOperations",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:GetObjectTagging",
                "s3:PutObjectTagging"
            ],
            "Resource": "arn:aws:s3:us-east-2:111122223333:accesspoint/my-fsx-ap/object/*"
        },
        {
            "Sid": "AllowDirectoryOperations",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:us-east-2:111122223333:accesspoint/my-fsx-ap"
        }
    ]
}
```

## FSx 스토리지 사용자 관리
<a name="managing-users-fsx"></a>

S3 액세스 포인트 별칭을 사용하는 홈 디렉터리 매핑을 사용하여 Transfer Family 사용자를 생성합니다.

### 사용자 생성
<a name="creating-user-fsx"></a>

FSx 스토리지 사용자를 생성할 때 홈 디렉터리 매핑에서 액세스 포인트 별칭을 사용합니다.

**서비스 관리형 사용자를 생성하려면(콘솔)**

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

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

1. 서버를 선택합니다.

1. 사용자 섹션에서 **사용자 추가**를 선택합니다.

1. **사용자 이름**에 사용자 이름을 입력합니다.

1. **역할**에서 생성한 IAM 역할을 선택합니다.

1. **홈 디렉터리**에서 **제한을** 선택합니다.

1. **홈 디렉터리 매핑**의 경우 액세스 포인트 별칭을 사용하여 매핑을 추가합니다.

   ```
   [{"Entry": "/", "Target": "/my-fsx-ap-aqfqprnstn7aefdfbarligizwgyfouse1a-ext-s3alias/users/jsmith"}]
   ```

**사용자를 생성하려면(CLI)**

`create-user` 명령을 사용합니다. 액세스 포인트 별칭을 별칭으로 바꿉니다.

```
aws transfer create-user \
    --server-id s-0123456789abcdef0 \
    --user-name jsmith \
    --role arn:aws:iam::111122223333:role/TransferFamilyFSxRole \
    --home-directory-type LOGICAL \
    --home-directory-mappings '[
        {
            "Entry": "/",
            "Target": "/my-fsx-ap-aqfqprnstn7aefdfbarligizwgyfouse1a-ext-s3alias/users/jsmith"
        }
    ]'
```

### 여러 디렉터리 매핑 구성
<a name="multiple-directory-mappings"></a>

여러 가상 디렉터리를 FSx 볼륨의 다른 경로에 매핑할 수 있습니다.

**예: 별도의 업로드 및 다운로드 디렉터리**

```
aws transfer create-user \
    --server-id s-0123456789abcdef0 \
    --user-name jsmith \
    --role arn:aws:iam::111122223333:role/TransferFamilyFSxRole \
    --home-directory-type LOGICAL \
    --home-directory-mappings '[
        {
            "Entry": "/inbox",
            "Target": "/my-fsx-ap-aqfqprnstn7aefdfbarligizwgyfouse1a-ext-s3alias/users/jsmith/inbox"
        },
        {
            "Entry": "/outbox",
            "Target": "/my-fsx-ap-aqfqprnstn7aefdfbarligizwgyfouse1a-ext-s3alias/users/jsmith/outbox"
        }
    ]'
```

## 파일 전송 클라이언트 구성
<a name="configuring-file-transfer-clients"></a>

Transfer Family에서 FSx 파일 시스템을 사용하는 경우 지원되지 않는 기능을 비활성화하도록 파일 전송 클라이언트를 구성해야 합니다.

### WinSCP 구성
<a name="winscp-configuration"></a>

WinSCP는 기본적으로 FSx용 S3 액세스 포인트에서 지원되지 않는 임시 이름 바꾸기 기능을 사용합니다.

**주의**  
WinSCP에서 임시 이름 바꾸기 기능을 비활성화하지 않으면 파일 업로드가 실패합니다.

**WinSCP에서 임시 이름 바꾸기를 비활성화하려면**

1. WinSCP를 엽니다.

1. 로그인 대화 상자에서 **편집**을 선택하여 세션 설정을 수정합니다.

1. **고급**을 선택합니다.

1. 왼쪽 탐색의 **전송**에서 **내구성**을 선택합니다.

1. **임시 파일 이름으로 전송 재개/전송 활성화**에서 **비활성화**를 선택합니다.

1. **확인**을 선택하여 설정을 저장합니다.

또는 기존 세션에 대해이 설정을 비활성화할 수 있습니다.

1. Transfer Family 서버에 연결합니다.

1. **옵션을** 선택한 다음 **기본 설정을** 선택합니다.

1. **전송**을 선택한 다음 **내구성을** 선택합니다.

1. **임시 파일 이름으로 전송 재개/전송 활성화**에서 **비활성화**를 선택합니다.

1. **확인**을 선택합니다.

### 기타 SFTP 클라이언트
<a name="other-sftp-clients"></a>

다른 SFTP 클라이언트의 경우 사용 가능한 경우 다음 기능을 비활성화합니다.
+ 임시 파일 업로드(임시 파일로 업로드한 다음 이름 바꾸기)
+ 임시 파일을 사용하여 전송 재개
+ 이름 바꾸기 작업을 사용한 원자성 업로드
+ 업로드를 위한 추가 모드

특정 구성 단계는 클라이언트 설명서를 참조하세요.

## FSx 스토리지 문제 해결
<a name="troubleshooting-fsx-storage"></a>

이 섹션에서는 FSx 파일 시스템에서 Transfer Family를 사용할 때 발생하는 일반적인 문제를 식별하고 해결하는 방법을 설명합니다.

### 파일 작업 문제
<a name="file-operation-issues"></a>

**권한 거부됨**

권한 거부 오류가 발생하는 경우:

1. IAM 역할에 액세스 포인트 별칭에 대한 올바른 권한이 있는지 확인합니다. S3 APIs.

1. 액세스 포인트 정책이 IAM 역할을 허용하는지 확인합니다.

1. 파일 시스템 사용자에게 대상 경로에 대한 권한이 있는지 확인합니다.

1. 홈 디렉터리 매핑이 올바른 액세스 포인트 별칭을 사용하는지 확인합니다.

**WinSCP에서 업로드 실패**

WinSCP에서 파일 업로드에 실패하면 임시 이름 바꾸기를 비활성화합니다.

1. WinSCP에서 **옵션을** 선택한 다음 **기본 설정을** 선택합니다.

1. **전송**을 선택한 다음 **내구성을** 선택합니다.

1. **임시 파일 이름으로 전송 재개/전송 활성화**에서 **비활성화**를 선택합니다.

자세한 내용은 [파일 전송 클라이언트 구성](#configuring-file-transfer-clients) 단원을 참조하십시오.

**파일 업로드 실패**

파일 업로드에 실패하는 경우:

1. 파일 크기가 5GB 미만인지 확인합니다.

1. FSx 볼륨에 사용 가능한 스토리지가 충분한지 확인합니다.

1. CloudWatch 지표의 제한을 모니터링합니다.