Amazon API Gateway 메서드를 사용자 지정 ID 공급자로 설정 - AWS Transfer Family

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

Amazon API Gateway 메서드를 사용자 지정 ID 공급자로 설정

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

사전 조건

AWS CloudFormation에서 Transfer Family 리소스를 생성하기 전에 스토리지와 사용자 역할을 생성합니다.

스토리지를 지정하고 사용자 역할을 생성하려면
  1. 사용 중인 스토리지에 따라 다음 설명서를 참조하세요.

  2. 사용자 역할을 생성하려면 IAM 역할 및 정책 생성 단원을 참조하세요.

다음 섹션에서 AWS CloudFormation 스택을 생성할 때 스토리지의 세부 정보와 사용자 역할을 입력합니다.

1단계: CloudFormation 스택 생성

제공된 템플릿에서 AWS CloudFormation 스택을 생성하려면
  1. AWS CloudFormation 콘솔(https://console.aws.amazon.com/cloudformation)을 엽니다.

  2. 스택 생성을 선택한 다음 새 리소스 사용(표준)을 선택합니다.

  3. 사전 조건 - 템플릿 준비 창에서 템플릿 준비 완료를 선택합니다.

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

  5. 다음을 클릭합니다.

  6. 스택 이름을 비롯한 파라미터를 지정합니다. 다음 작업을 수행합니다.

    • UserName및 의 디폴트 값을 UserPassword바꿉니다.

    • UserHomeDirectory앞서 생성한 스토리지 (Amazon S3 버킷 또는 Amazon EFS 파일 시스템) 의 세부 정보를 입력합니다.

    • 기본값을 이전에 UserRoleArn생성한 사용자 역할로 바꾸십시오. AWS Identity and Access Management(IAM)에 적절한 권한이 있어야 합니다. IAM 역할 및 버킷 정책 예제는 6단계: 버킷에 대한 액세스 제한 단원을 참조하세요.

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

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

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

    참고

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

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

참고

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

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

  2. AWS CloudFormation 템플릿에서 생성한 사용자 정의 자격 증명 공급자 기본 템플릿 API 전송을 선택합니다.

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

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

    API Gateway 메서드가 성공적으로 배포되면 단계 편집기 섹션에서 성능을 확인합니다.

    참고

    페이지 상단에 표시되는 URL 호출 주소를 복사합니다. 이 정보는 다음 단계에 필요합니다.

3단계: Transfer Family 서버 세부 정보 보기

템플릿을 사용하여 AWS CloudFormation 스택을 생성하면 Transfer Family 서버가 자동으로 생성됩니다.

3단계: Transfer Family 서버 세부 정보 보기
  1. AWS CloudFormation 콘솔(https://console.aws.amazon.com/cloudformation)을 엽니다.

  2. 생성한 스택을 선택합니다.

  3. 리소스 탭을 선택합니다.

    
                        Transfer Family 서버의 세부 정보가 강조 표시된 상태로 AWS CloudFormation 스택을 생성하는 동안 생성된 리소스 목록을 보여주는 화면입니다.

    서버 ARN은 해당 행의 물리적 ID 열에 표시됩니다. TransferServer 서버 ID는 ARN에 포함되어 있습니다(예: s-11112222333344445).

  4. https://console.aws.amazon.com/transfer/에서 AWS Transfer Family 콘솔을 열고 서버 페이지에서 새 서버를 선택합니다.

    서버 ID는 의 TransferServer리소스에 AWS CloudFormation 대해 표시된 ID와 일치합니다.

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

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

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

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

  4. 서버 프로토콜에 대해 SFTP를 선택하고 소스 IP127.0.0.1을 입력합니다.

  5. 테스트를 선택합니다.

    사용자 인증에 성공하면 테스트에서 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 Gateway AWS 관리형 정책 중 하나를 API에 사용 중인 역할에 추가하세요.

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

SFTP 연결을 테스트하려면
  1. Linux 또는 macOS 장치에서 명령 터미널을 엽니다.

  2. 인증에 암호를 사용하는지 또는 키 페어를 사용하는지 여부에 따라 다음 명령 중 하나를 입력합니다.

    • 암호를 사용하는 경우 이 명령 입력:

      sftp -o PubkeyAuthentication=no myuser@server-ID.server.transfer.region-code.amazonaws.com

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

    • 키 페어를 사용하는 경우 이 명령 입력:

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

    참고

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

  3. sftp> 프롬프트에서 디렉터리와 파일(pwdls)을 업로드(put)하고 다운로드(get)하고 볼 수 있는지 확인합니다.

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은 공개/개인 키 쌍의 일부로 생성한 공개 키입니다.

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 -o PubkeyAuthentication=no myuser@transfer-server-ID.server.transfer.region-id.amazonaws.com

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

  • 키 페어를 사용하여 인증하는 경우 실행할 명령:

    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 서버의 스토리지 옵션으로 Amazon EFS를 선택한 경우 스택의 람다 함수를 편집해야 합니다.

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

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

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

  4. response에서 Policy과(와) HomeDirectory 사이에 다음 줄을 추가합니다.

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

    여기서 uid-valuegid-value는 각각 사용자 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 '/' };