자습서: Amazon API Gateway 메서드를 사용자 지정 자격 증명 공급자로 설정 - AWS Transfer Family

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

자습서: Amazon API Gateway 메서드를 사용자 지정 자격 증명 공급자로 설정

이 자습서에서는 Amazon API Gateway 메서드를 설정하고 이를 사용자 지정 자격 증명 공급자로 사용하여AWS Transfer Family 서버에 파일을 업로드하는 방법을 보여줍니다. 이 자습서에서는 기본 스택 템플릿과 기타 기본 기능을 예제로만 사용합니다.

목차

1단계: CloudFormation 스택 생성

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

  2. 스택 생성을 선택하고 새 리소스 포함 (표준) 을 선택합니다.

  3. [필수 조건] - [템플릿 준비] 창에서 [템플릿 준비 완료] 를 선택합니다.

  4. 기본 스택 템플릿인 이 링크를 복사하여 Amazon S3 URL 필드에 붙여넣습니다.

  5. 다음(Next)을 클릭합니다.

  6. 스택 이름을 포함하여 파라미터를 지정합니다. 다음을 수행하십시오.

    • UserName및 의 기본값을 UserPassword대체합니다.

    • 기본값을 적절한 권한이 UserRoleArn있는 실제AWS Identity and Access Management (IAM) 역할로 바꾸십시오. IAM 역할 및 버킷 정책 예제는 섹션을 참조하세요6단계: 버킷에 대한 액세스 제한.

    • 암호 대신 공개 키를 사용하여 인증하려면 UserPublicKey1 필드에 공개 키를 입력합니다. SFTP를 사용하여 서버에 처음 연결할 때 암호 대신 개인 키를 입력합니다.

  7. 다음을 선택한 후 스택 옵션 구성 페이지에서 다음을 다시 선택합니다.

  8. 생성 중인 스택의 세부 정보를 검토한 다음 Create stack (Create stack) 을 선택합니다.

    참고

    페이지 하단의 기능에서 이 IAM 리소스를 생성할AWS CloudFormation 수 있음을 확인해야 합니다.

2단계: 서버의 API Gateway 메서드 구성을 확인하고 생성합니다.

참고

보안을 강화하기 위해 웹 애플리케이션 방화벽을 구성할 수 있습니다. AWS WAF는 Amazon API Gateway에 전달되는 HTTP 및 HTTPS 요청을 모니터링할 수 있게 해주는 웹 애플리케이션 방화벽입니다. 세부 정보는 웹 애플리케이션 방화벽 추가을 참조하세요.

서버의 API Gateway 메서드 구성을 확인하고 생성하려면
  1. https://console.aws.amazon.com/apigateway/에서 Amazon API Gateway 콘솔을 엽니다.

  2. 템플릿에서 생성한 전송 사용자 지정 ID 공급자 기본AWS CloudFormation 템플릿 API를 선택합니다.

  3. 리소스 창에서 GET을 선택한 다음 메서드 요청을 선택합니다.

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

    API Gateway 메서드가 성공적으로 배포되면 Stage Editor 섹션에서 해당 메서드의 성능을 확인하십시오.

    참고

    페이지 상단에 표시되는 Invoke URL 주소를 복사합니다. 다음 단계에서 이 값을 사용할 것입니다.

3단계: Transfer Family 서버 생성

Transfer Family 서버를 만들려면
  1. https://console.aws.amazon.com/transfer/ 에서AWS Transfer Family 콘솔을 엽니다.

  2. 서버 생성을 선택하여 서버 생성 페이지를 엽니다.

  3. 프로토콜 선택에서 SFTP (SSH 파일 전송 프로토콜) 를 선택한 후 다음을 선택합니다.

  4. ID 공급자 선택에서 사용자 지정을 선택합니다.

  5. 사용자 지정 공급자의 경우 2단계에서 만든 API Gateway 엔드포인트의 Invoke URL 주소를 붙여넣습니다.

  6. 호출 역할에서AWS CloudFormation 템플릿에서 생성한 IAM 역할을 선택합니다. 이 역할을 통해 Transfer Family 패밀리는 API Gateway 메서드를 호출할 수 있습니다.

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

  7. 올바른 CloudWatch 로깅 역할을 추가했는지 확인하십시오. 형식은 다음과 같습니다.

    CloudFormation-stack-name-CloudWatchLoggingRole-ABC123DEF45

    참고

    서버의 로깅 역할이 Transfer Family와 신뢰 관계가 있는지 확인하십시오. 자세한 정보는 신뢰 관계를 설정하려면을 참조하세요.

  8. 나머지 옵션을 입력한 후 서버 생성을 선택합니다.

참고

스토리지 옵션으로 EFS 선택한 경우 Lambda 함수에 Posix 프로필 설정을 추가해야 합니다. 세부 정보는 Amazon EFS 사용하는 경우 Lambda 업데이트을 참조하세요.

4단계: 사용자가 서버에 연결할 수 있는지 테스트

Transfer Family 콘솔을 사용하여 사용자가 서버에 연결할 수 있는지 테스트하려면
  1. https://console.aws.amazon.com/transfer/ 에서AWS Transfer Family 콘솔을 엽니다.

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

  3. 사용자 이름 필드와 암호 필드에 로그인 자격 증명 텍스트를 입력합니다. AWS CloudFormation스택을 배포할 때 설정한 값입니다.

  4. 서버 프로토콜에서 SFTP를 선택하고 소스 IP에 를 입력합니다127.0.0.1.

  5. 테스트(Test)를 선택합니다.

    사용자 인증에 성공하면 테스트에서StatusCode: 200 HTML 응답과 사용자의 역할 및 권한에 대한 세부 정보가 포함된 JSON 객체를 반환합니다. 예시:

    { "Response": "{\"Role\": \"arn:aws:iam::123456789012:role/my-user-role\",\"HomeDirectory\": \"/${transfer:HomeBucket}/\"}", "StatusCode": 200, "Message": "", "Url": "https://1a2b3c4d5e.execute-api.us-east-2.amazonaws.com/prod/servers/s-1234abcd5678efgh0/users/myuser/config" }

    테스트가 실패하면 API GatewayAWS 관리형 정책 중 하나를 API에 사용 중인 역할에 추가하십시오.

5단계: SFTP 연결 및 파일 전송 테스트

SFTP 연결을 테스트하려면
  1. Linux 또는 macOS 디바이스에서 커맨드 터미널을 엽니다.

  2. 인증을 위해 암호를 사용할지에 따라 key pair 쌍을 사용할지에 따라 다음 명령 중 하나를 입력합니다.

    • 암호를 사용하는 경우 다음 명령을 입력합니다.

      sftp myuser@server-ID.server.transfer.region-code.amazonaws.com

      메시지가 표시되면 암호를 입력합니다.

    • key pair 페어를 사용하는 경우 다음 명령을 입력합니다.

      sftp -i private-key-file myuser@server-ID.server.transfer.region-code.amazonaws.com

    참고

    이러한sftp 명령의 경우 Transfer Family 서버가AWS 리전 있는 위치에 대한 코드를 입력하십시오. 예를 들어, 서버가 미국 동부 (오하이오) 에 있는 경우 를 입력합니다us-east-2.

  3. sftp>프롬프트에서 디렉토리 및 파일 (및put) 을 업로드 (get), 다운로드 () 및 볼 수 있는지 확인하십시오.pwdls

6단계: 버킷에 대한 액세스 제한

특정 Amazon S3 버킷에 액세스할 수 있는 사용자를 제한할 수 있습니다. 다음 예제는 CloudFormation 스택 및 사용자에 대해 선택한 정책에서 사용할 설정을 보여줍니다.

이 예시에서는AWS CloudFormation 스택에 다음과 같은 파라미터를 설정합니다.

  • CreateServer: true

  • UserHomeDirectory: /myuser-bucket

  • UserName: myuser

  • UserPassword: MySuperSecretPassword

    중요

    다음은 예제 암호입니다. API Gateway 메서드를 구성할 때는 강력한 암호를 입력해야 합니다.

  • UserPublicKey1:your-public-key

  • UserRoleArn: arn:aws:iam::role-id:role/myuser-api-gateway-role

UserPublicKey1은 공개/개인 key pair 일부로 생성한 공개 키입니다.

role-id는 생성한 사용자 역할에 고유합니다. 에 첨부된 정책은 다음과 같습니다.myuser-api-gateway-role

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::myuser-bucket" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObjectAcl", "s3:GetObject", "s3:DeleteObjectVersion", "s3:DeleteObject", "s3:PutObjectAcl", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::myuser-bucket/*" } ] }

SFTP를 사용하여 서버에 연결하려면 프롬프트에 다음 명령 중 하나를 입력합니다.

  • 암호를 사용하여 인증할 경우 다음 명령을 실행합니다.

    sftp myuser@transfer-server-ID.server.transfer.region-id.amazonaws.com

    메시지가 표시되면 암호를 입력합니다.

  • key pair 페어를 사용하여 인증하는 경우 다음 명령을 실행합니다.

    sftp -i private-key-file myuser@transfer-server-ID.server.transfer.region-id.amazonaws.com

참고

이러한sftp 명령에는 Transfer Family 서버가AWS 리전 있는 위치의 ID를 사용하십시오. 예를 들어, 서버가 미국 동부 (오하이오) 에 있는 경우 를 사용하십시오us-east-2.

sftp프롬프트에서pwd 명령을 실행하여 볼 수 있는 홈 디렉터리로 이동합니다. 예시:

sftp> pwd Remote working directory: /myuser-bucket

사용자는 홈 디렉터리 위에 있는 디렉터리를 볼 수 없습니다. 예시:

sftp> pwd Remote working directory: /myuser-bucket sftp> cd .. sftp> ls Couldn't read directory: Permission denied

Amazon EFS 사용하는 경우 Lambda 업데이트

Transfer Family 서버의 스토리지 옵션으로 EFS 선택한 경우 스택의 람다 함수를 편집해야 합니다.

Lambda 함수에 Posix 프로필을 추가하려면
  1. https://console.aws.amazon.com/lambda/ 에서 Lambda 콘솔을 엽니다.

  2. 이전에 생성한 Lambda 함수를 선택합니다. Lambda 함수는 스택 이름 -GetUserConfigLambda - 람다 식별자 형식을 사용합니다. 여기서 CloudFormation 스택 이름은 스택 이름이고 람다 식별자는 함수의 식별자입니다.

  3. 코드 탭에서 index.js 를 선택하여 함수의 코드를 표시합니다.

  4. 에서responsePolicy 과 사이에 다음 줄을 추가합니다HomeDirectory.

    PosixProfile: {"Uid": uid-value, "Gid": gid-value},

    여기서 uid-값과 gid-값은 각각 사용자 ID와 그룹 ID를 나타내는 0 이상의 정수입니다.

    예를 들어 Posix 프로필을 추가한 후 응답 필드는 다음과 같을 수 있습니다.

    response = { Role: 'arn:aws:iam::123456789012:role/api-gateway-transfer-efs-role', // The user will be authenticated if and only if the Role field is not blank Policy: '', // Optional JSON blob to further restrict this user's permissions PosixProfile: {"Gid": 65534, "Uid": 65534}, HomeDirectory: '/fs-fab2c234' // Not required, defaults to '/' };