

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

# Transfer Family, Amazon Cognito 및 GuardDuty를 사용하여 파일 전송 보호
<a name="secure-file-transfers"></a>

*Manoj Kumar, Amazon Web Services*

## 요약
<a name="secure-file-transfers-summary"></a>

이 솔루션은를 사용하여 SFTP 서버를 통해 파일을 안전하게 전송하는 데 도움이 됩니다 AWS Transfer Family. 여기에는 Amazon GuardDuty의 기능인 [ S3용 맬웨어 보호를](https://docs.aws.amazon.com/guardduty/latest/ug/gdu-malware-protection-s3.html) 통한 자동 맬웨어 스캔 기능이 포함됩니다. Amazon GuardDuty 외부 당사자와 파일을 안전하게 교환하고 모든 수신 파일이 처리되기 전에 맬웨어에 대해 스캔되는지 확인해야 하는 조직을 위해 설계되었습니다.

이 패턴과 함께 제공되는 코드형 인프라(IaC) 템플릿은 다음을 배포하는 데 도움이 됩니다.
+ 를 통해 Amazon Cognito 인증을 사용하는 보안 SFTP 서버 AWS Lambda
+ 맬웨어가 스캔된 업로드 및 수신 파일을 위한 Amazon Simple Storage Service(Amazon S3) 버킷
+ 여러 가용 영역에 배치된 퍼블릭 및 프라이빗 서브넷을 사용한 가상 프라이빗 클라우드(VPC) 기반 아키텍처
+ 구성 가능한 허용 및 거부 목록이 있는 수신 및 송신 트래픽 모두에 대한 IP 기반 액세스 제어
+ GuardDuty를 통한 자동 맬웨어 스캔
+ Amazon EventBridge 및 Lambda를 통한 스캔 결과를 기반으로 하는 지능형 파일 라우팅
+ Amazon Simple Notification Service(Amazon SNS)를 통한 보안 인시던트에 대한 실시간 알림
+  AWS Key Management Service (AWS KMS)를 통한 Amazon S3 버킷 및 Lambda 환경 변수의 암호화
+ 인터넷 노출 없이 액세스할 수 있는 Amazon Virtual Private Cloud(VPC) 엔드포인트
+ Amazon CloudWatch 통합을 통한 포괄적인 로깅

## 사전 조건 및 제한 사항
<a name="secure-file-transfers-prereqs"></a>

**사전 조건 **
+ 활성 AWS 계정
+ IAM 역할을 프로비저닝하는 AWS CloudFormation 템플릿 배포를 포함하여이 패턴에 설명된 작업을 수행할 수 있는 AWS Identity and Access Management (IAM)의 권한
+ GuardDuty, 대상 계정에서 [활성화](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_settingup.html)됨
+ 대상 계정에서 [활성화된](https://docs.aws.amazon.com/guardduty/latest/ug/malware-protection-s3-get-started-independent.html) S3용 맬웨어 보호
+ Service Quotas를 사용하면 대상 계정에서 다음을 생성할 수 있습니다.
  + VPC 한 개
  + 프라이빗 서브넷 1개
  + 퍼블릭 서브넷 1개
  + EC2 탄력적 IP 주소 3개
  + 충분한 Lambda 동시성 제한
+ 보안 관련 알림에 유효한 이메일 주소
+ (선택 사항) 허용하거나 거부할 IP 주소 또는 CIDR 범위 목록
+ (선택 사항) AWS Command Line Interface (AWS CLI), [설치](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) 및 [구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)됨

**제한 사항 **
+ S3용 맬웨어 보호에는 최대 파일 크기와 같은 할당량이 적용됩니다. 자세한 내용은 GuardDuty 설명서[의 S3용 맬웨어 보호의 할당량](https://docs.aws.amazon.com/guardduty/latest/ug/malware-protection-s3-quotas-guardduty.html) 및 [ Amazon S3 기능 지원을](https://docs.aws.amazon.com/guardduty/latest/ug/supported-s3-features-malware-protection-s3.html) 참조하세요.
+ 이 솔루션은 Amazon Cognito 사용자 이름 및 암호 인증만 사용합니다. 이 템플릿에서는 인증서 기반 또는 기타 인증 방법이 지원되지 않습니다. 기본적으로이 솔루션은 다중 인증(MFA)을 구성하지 않습니다.
+ 이 솔루션은 보안 그룹만 통해 IP 기반 액세스 제어를 구현합니다.

## 아키텍처
<a name="secure-file-transfers-architecture"></a>

다음 아키텍처 다이어그램은 이 패턴에서 배포되는 리소스를 보여줍니다. 이 솔루션은 사용자 인증 및 권한 부여에 Amazon Cognito를 사용합니다. AWS Transfer Family SFTP 서버는 파일 업로드에 사용됩니다. 파일은 Amazon S3 버킷에 저장되며 Amazon GuardDuty는 파일에 맬웨어가 있는지 스캔합니다. 맬웨어가 감지되면 Amazon SNS에서 이메일 알림을 보냅니다.

![GuardDuty 및 Cognito를 사용하여 파일을 Amazon S3 버킷으로 안전하게 전송합니다.](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/39d98ebe-2844-4ccd-a497-9b796b7da5e8/images/05567010-e189-40e7-acab-74e77c4f8525.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. 사용자는의 SFTP 서버 엔드포인트에 연결합니다 AWS Transfer Family. 이렇게 하면 Amazon Cognito 사용자 풀을 사용하여 인증 프로세스가 시작됩니다.

1. Lambda 함수는 인증 및 권한 부여 프로세스를 시작하고 Amazon Cognito를 사용하여 사용자의 자격 증명을 검증합니다.

1. Lambda 함수는 `UploadBucket` Amazon S3 버킷을 홈 디렉터리로 반환합니다. 사용자는 Transfer Family 서버의 IAM 역할을 수임하고 Lambda 함수는 사용자에게 성공적으로 인증되었음을 알립니다.

1. 사용자가 Transfer Family SFTP 서버에 파일을 업로드합니다. 이 파일은 `UploadBucket` Amazon S3 버킷에 저장됩니다.

1. GuardDuty는 파일에 맬웨어가 있는지 스캔합니다. 잠재적 스캔 결과는 `NO_THREATS_FOUND`, `THREATS_FOUND`, `UNSUPPORTED`, 및 `ACCESS_DENIED`입니다`FAILED`. 샘플 결과는 GuardDuty 설명서의 [S3 객체 스캔 결과를](https://docs.aws.amazon.com/guardduty/latest/ug/monitor-with-eventbridge-s3-malware-protection.html#s3-object-scan-status-malware-protection-s3-ev) 참조하세요.

1. EventBridge 규칙은 스캔 결과 이벤트를 감지합니다.

1. EventBridge는 파일 라우팅 Lambda 함수를 시작합니다.

1. Lambda 함수는 이벤트를 처리하고 다음과 같이 스캔 결과를 기반으로 파일을 필터링합니다.
   + `NO_THREATS_FOUND` 스캔 결과가 있는 파일은 `CleanBucket` Amazon S3 버킷으로 전송됩니다.
   + `THREATS_FOUND` 스캔 결과가 있는 파일은 `MalwareBucket` Amazon S3 버킷으로 전송됩니다.
   + `UNSUPPORTED` 스캔 결과가 있는 파일은 `ErrorBucket` Amazon S3 버킷으로 전송됩니다.
   + `ACCESS_DENIED` 스캔 결과가 있는 파일은 `ErrorBucket` Amazon S3 버킷으로 전송됩니다.
   + `FAILED` 스캔 결과가 있는 파일은 `ErrorBucket` Amazon S3 버킷으로 전송됩니다.

   모든 파일은 로 암호화됩니다 AWS KMS key.

1. 파일이 `MalwareBucket` Amazon S3 버킷으로 전송된 경우 Lambda 함수는 Amazon SNS 주제를 시작합니다. 이 Amazon SNS 주제는 사용자가 구성한 이메일 주소로 이메일 알림을 보냅니다.

## 도구
<a name="secure-file-transfers-tools"></a>

**AWS 서비스**
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)를 사용하면 AWS 리소스 및에서 실행되는 애플리케이션의 지표를 실시간으로 모니터링할 AWS 수 있습니다.
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html)는 웹 및 모바일 앱에 대한 인증, 권한 부여 및 사용자 관리를 제공합니다.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html)는 애플리케이션을 다양한 소스의 실시간 데이터와 연결할 수 있는 서버리스 이벤트 버스 서비스입니다. 예를 들어 AWS Lambda 함수, API 대상을 사용하는 HTTP 호출 엔드포인트 또는 다른의 이벤트 버스 등이 있습니다 AWS 계정.
+ [Amazon GuardDuty](https://docs.aws.amazon.com/guardduty/latest/ug/what-is-guardduty.html)는 로그를 분석하고 처리하여 AWS 환경에서 예기치 않고 잠재적으로 승인되지 않은 활동을 식별하는 지속적인 보안 모니터링 서비스입니다.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)를 사용하면 암호화 키를 생성하고 제어하여 데이터를 보호할 수 있습니다.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
+ [Amazon Simple Notification Service(Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)를 사용하면 웹 서버 및 이메일 주소를 포함하여 게시자와 클라이언트 간의 메시지 교환을 조정하고 관리할 수 있습니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.
+ [AWS Transfer Family](https://docs.aws.amazon.com/transfer/latest/userguide/what-is-aws-transfer-family.html)를 사용하면 SFTP, FTPS 또는 FTP 프로토콜을 통해 AWS 스토리지 서비스 안팎으로 파일을 전송할 수 있습니다.
+ [Amazon Virtual Private Cloud(Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)를 사용하면 정의한 가상 네트워크에서 AWS 리소스를 시작할 수 있습니다. 이 가상 네트워크는 AWS의 확장 가능한 인프라를 사용한다는 이점과 함께 고객의 자체 데이터 센터에서 운영하는 기존 네트워크와 유사합니다.

**코드 리포지토리**

이 패턴의 코드는 GitHub [AWS Transfer Family 및 GuardDuty 맬웨어 스캔 솔루션](https://github.com/aws-samples/sample-secure-transfer-family-code) 리포지토리에서 사용할 수 있습니다.

## 모범 사례
<a name="secure-file-transfers-best-practices"></a>

제공된 CloudFormation 템플릿은 IAM 역할 및 정책에 대한 최소 권한 권한, 저장 및 전송 중 암호화, 자동 키 교체와 같은 여러 AWS 모범 사례를 통합하도록 설계되었습니다. 프로덕션 환경의 경우 다음과 같은 추가 권장 사항을 구현하는 것이 좋습니다.
+ Amazon Cognito 사용자를 위한 [MFA](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-mfa.html) 활성화
+ 분산 서비스 거부(DDoS) 보호를 [AWS Shield](https://docs.aws.amazon.com/waf/latest/developerguide/shield-chapter.html) 위한 구현
+ 지속적인 규정 준수 모니터링을 [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html) 위한 구성
+ 포괄적인 API 로깅을 [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) 위한 구현
+ 맬웨어 스캔 이상의 위협 탐지를 위해 [Amazon GuardDuty](https://docs.aws.amazon.com/guardduty/latest/ug/what-is-guardduty.html) 설정
+ 중앙 집중식 보안 관리를 [AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub-v2.html) 위한 구현
+ 자격 증명 관리에 [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) 사용
+ 트래픽 [미러링을 사용하여 네트워크 트래픽](https://docs.aws.amazon.com/vpc/latest/mirroring/what-is-traffic-mirroring.html) 모니터링 구현
+ Amazon S3에서 민감한 데이터 검색 및 보호를 위해 [Amazon Macie](https://docs.aws.amazon.com/macie/latest/user/what-is-macie.html) 구성 Amazon S3
+ 정기적인 보안 평가 및 침투 테스트 구현
+ 공식적인 인시던트 대응 계획 수립
+ 모든 구성 요소에 대한 자동 패치 구현
+ 관리자를 위한 정기적인 보안 교육 수행
+ 다중 계정 보안 관리를 [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html) 위한 설정

## 에픽
<a name="secure-file-transfers-epics"></a>

### 리소스 배포
<a name="deploy-the-resources"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 리포지토리를 복제합니다. | 다음 명령을 입력하여 [AWS Transfer Family 및 GuardDuty 맬웨어 스캔 솔루션](https://github.com/aws-samples/sample-secure-transfer-family-code) 리포지토리를 로컬 워크스테이션에 복제합니다.<pre>git clone https://github.com/aws-samples/sample-secure-transfer-family-code.git</pre> | 앱 개발자, DevOps 엔지니어 | 
| CloudFormation 스택을 생성하십시오. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/secure-file-transfers.html) | 클라우드 관리자, DevOps 엔지니어 | 

### 리소스 구성
<a name="configure-the-resources"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 맬웨어 보호를 켭니다. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/secure-file-transfers.html) | 클라우드 관리자, AWS 관리자 | 
| 사용자 풀에 사용자를 추가합니다. | Amazon Cognito 사용자 풀에 사용자를 한 명 이상 추가합니다. 지침은 Amazon Cognito 설명서[의 사용자 풀의 사용자 관리를 참조하세요](https://docs.aws.amazon.com/cognito/latest/developerguide/managing-users.html). | 클라우드 관리자, AWS 관리자 | 

### SFTP 서버 테스트
<a name="test-the-sftp-server"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SFTP 서버 엔드포인트에 연결합니다. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/secure-file-transfers.html) | 앱 개발자, 클라우드 관리자, 클라우드 아키텍트, DevOps 엔지니어 | 

## 문제 해결
<a name="secure-file-transfers-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| 사용자 인증 실패 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/secure-file-transfers.html)이러한 문제 해결 단계를 수행하는 데 도움이 되는 AWS CLI 명령 목록은 [추가 정보](#secure-file-transfers-additional) 섹션의 *문제 해결을 위한 유용한 명령을* 참조하세요. | 
| SFTP 인증 실패 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/secure-file-transfers.html)이러한 문제 해결 단계를 수행하는 데 도움이 되는 AWS CLI 명령 목록은 [추가 정보](#secure-file-transfers-additional) 섹션의 *문제 해결을 위한 유용한 명령을* 참조하세요. | 
| 파일 업로드 액세스 거부됨 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/secure-file-transfers.html)이러한 문제 해결 단계를 수행하는 데 도움이 되는 AWS CLI 명령 목록은 [추가 정보](#secure-file-transfers-additional) 섹션의 *문제 해결을 위한 유용한 명령을* 참조하세요. | 
| 맬웨어 스캔 없음 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/secure-file-transfers.html)이러한 문제 해결 단계를 수행하는 데 도움이 되는 AWS CLI 명령 목록은 [추가 정보](#secure-file-transfers-additional) 섹션의 *문제 해결을 위한 유용한 명령을* 참조하세요. | 
| Lambda 함수 오류 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/secure-file-transfers.html)이러한 문제 해결 단계를 수행하는 데 도움이 되는 AWS CLI 명령 목록은 [추가 정보](#secure-file-transfers-additional) 섹션의 *문제 해결을 위한 유용한 명령을* 참조하세요. | 

## 관련 리소스
<a name="secure-file-transfers-resources"></a>
+ [Transfer Family 웹 앱](https://docs.aws.amazon.com/transfer/latest/userguide/web-app.html)(Transfer Family 설명서)

## 추가 정보
<a name="secure-file-transfers-additional"></a>

**문제 해결에 유용한 명령**

CloudFormation 스택의 상태를 확인합니다.

```
aws cloudformation describe-stacks \
  --stack-name <STACK_NAME>
```

Amazon Cognito 사용자 풀의 모든 사용자를 나열합니다.

```
aws cognito-idp list-users \
  --user-pool-id <USER_POOL_ID>
```

Lambda 함수에 대한 로그를 봅니다.

```
aws logs describe-log-groups \
  --log-group-name-prefix /aws/lambda/
```

GuardDuty의 상태를 확인합니다.

```
aws guardduty list-detectors
```

보안 그룹 규칙을 확인합니다.

```
aws ec2 describe-security-groups \
  --group-ids <SECURITY_GROUP_ID> \
  --output table
```

 AWS Transfer Family 서버 상태를 확인합니다.

```
aws transfer describe-server \
  --server-id <SERVER_ID>
```

Amazon S3 버킷의 모든 파일 나열

```
aws s3 ls s3://<BUCKET_NAME>/ \
  --recursive
```

EventBridge 규칙의 상태를 확인합니다.

```
aws events describe-rule \
  --name <RULE_NAME>
```