Amazon API Gateway를 사용하여 자격 증명 공급자 통합 - AWS Transfer Family

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

Amazon API Gateway를 사용하여 자격 증명 공급자 통합

이 주제에서는 AWS Lambda 함수를 사용하여 API Gateway 메서드를 백업하는 방법을 설명합니다. 를 사용하여 자격 증명 공급자RESTfulAPI를 통합해야 하거나 를 사용하여 지리 차단 또는 속도 제한 요청을 위한 기능을 AWS WAF 활용하려는 경우 이 옵션을 사용합니다.

API Gateway를 사용하여 자격 증명 공급자를 통합하는 경우의 제한 사항

  • 이 구성은 사용자 지정 도메인을 지원하지 않습니다.

  • 이 구성은 프라이빗 API 게이트웨이 를 지원하지 않습니다URL.

이 중 하나가 필요한 경우 API Gateway 없이 Lambda를 자격 증명 공급자로 사용할 수 있습니다. 세부 정보는 AWS Lambda 를 사용하여 자격 증명 공급자 통합을 참조하세요.

API Gateway 메서드를 사용하여 인증

Transfer Family의 자격 증명 공급자로 사용할 API Gateway 메서드를 생성할 수 있습니다. 이 접근 방식은 를 생성하고 제공할 수 있는 매우 안전한 방법을 제공합니다APIs. API Gateway를 사용하면 HTTPS 엔드포인트를 생성하여 모든 수신 API 통화가 더 높은 보안으로 전송되도록 할 수 있습니다. API Gateway 서비스에 대한 자세한 내용은 API Gateway 개발자 안내서를 참조하세요.

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

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

참고

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

Transfer Family를 사용한 사용자 지정 인증에 API Gateway 메서드를 사용하려면
  1. AWS CloudFormation 스택을 생성합니다. 방법:

    참고

    스택 템플릿이 BASE64인코딩된 암호를 사용하도록 업데이트되었습니다. 자세한 내용은 섹션을 참조하세요AWS CloudFormation 템플릿 개선 사항.

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

    2. AWS CloudFormation 사용 설명서의 AWS CloudFormation 스택 템플릿 선택 의 기존 템플릿에서 스택을 배포하는 방법에 대한 지침을 따릅니다.

    3. 다음 기본 템플릿 중 하나를 사용하여 Transfer Family에서 사용자 지정 자격 증명 공급자로 사용할 AWS Lambda지원 API Gateway 메서드를 생성합니다.

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

    중요

    기본 사용자 및 암호 보안 인증 정보를 편집하는 것이 좋습니다.

    스택이 배포된 후 CloudFormation 콘솔의 출력 탭에서 스택에 대한 세부 정보를 볼 수 있습니다. 이러한 세부 정보에는 스택의 Amazon 리소스 이름(ARN), 스택이 생성한 IAM 역할ARN의 , 새 게이트웨이의 URL가 포함됩니다.

    참고

    사용자 지정 자격 증명 공급자 옵션을 사용하여 사용자의 암호 기반 인증을 활성화하고 API Gateway에서 제공하는 요청 및 응답 로깅을 활성화하는 경우 API Gateway는 사용자의 암호를 Amazon CloudWatch Logs에 기록합니다. 프로덕션 환경에서는 이 로그를 사용하지 않는 것이 좋습니다. 자세한 내용은 API Gateway 개발자 안내서의 Gateway에서 CloudWatch API 로깅 설정을 참조하세요. API

  2. 서버의 API 게이트웨이 메서드 구성을 확인합니다. 방법:

    1. 에서 API 게이트웨이 콘솔을 엽니다https://console.aws.amazon.com/apigateway/.

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

    3. 리소스 창에서 를 선택합니다GET. 다음 스크린샷은 올바름 방법 설정을 보여줍니다.

      API Request Paths 및 URL 쿼리 문자열에 대한 메서드 구성 파라미터를 보여주는 구성 세부 정보입니다.

    이제 API 게이트웨이를 배포할 준비가 되었습니다.

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

    API Gateway 메서드가 성공적으로 배포되면 다음 스크린샷과 같이 스테이지 > 스테이지 세부 정보 에서 성능을 확인합니다.

    참고

    화면 상단에 나타나는 호출 URL 주소를 복사합니다. 다음 단계에 필요할 수 있습니다.

    호출이 URL 강조 표시된 스테이지 세부 정보입니다.
  4. 에서 AWS Transfer Family 콘솔을 엽니다https://console.aws.amazon.com/transfer/.

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

    1. 서버 생성을 선택하여 서버 생성 페이지를 엽니다. 자격 증명 공급자 선택 에서 사용자 지정 을 선택한 다음 다음 다음 스크린샷과 같이 Amazon API Gateway를 사용하여 자격 증명 공급자 에 연결을 선택합니다.

      사용자 지정 자격 증명 공급자를 선택하고 자격 증명 공급자에 연결하기 위해 API 게이트웨이를 선택한 자격 증명 공급자 화면입니다.
    2. Amazon API Gateway 텍스트 제공 URL 상자에 이 절차의 3단계에서 생성한 API Gateway 엔드포인트의 호출 URL 주소를 붙여넣습니다.

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

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

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

API Gateway 메서드 구현

Transfer Family에 대한 사용자 지정 자격 증명 공급자를 생성하려면 API Gateway 메서드에서 리소스 경로가 인 단일 메서드를 구현해야 합니다/servers/serverId/users/username/config. serverIdusername 값은 RESTful 리소스 경로에서 가져옵니다. 또한 다음 이미지와 같이 메서드 요청sourceIp 및 를 URL 쿼리 문자열 파라미터protocol로 추가합니다.

게이트웨이의 리소스 화면에 GET 메서드 세부 정보가 API 표시됩니다.
참고

이 사용자 이름은 최소 3글자에서 최대 100자여야 합니다. 사용자 이름에는 다음 글자를 사용할 수 있습니다. a~z, A~Z, 0~9, 밑줄(_)과 하이픈(-), 마침표(.)과 골뱅이 사인(@)입니다. 그러나 사용자 이름은 하이픈, 마침표 및 @ 기호로 시작할 수 없습니다.

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": "/bucketName/path/to/home/directory" }
참고

정책은 문자열JSON로 이스케이프됩니다. 예:

"Policy": "{ \"Version\": \"2012-10-17\", \"Statement\": [ {\"Condition\": {\"StringLike\": {\"s3:prefix\": [\"user/*\", \"user/\"]}}, \"Resource\": \"arn:aws:s3:::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\":\"/MY-HOME-BUCKET\"}]", "PublicKeys":[""] }
Amazon EFS 예제 응답

예제 응답 본문은 Amazon 에 대한 다음 양식의 JSON 문서입니다EFS.

{ "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의 사용자 정책 구성에 대한 자세한 내용은 단원을 참조하세요액세스 통제 관리.

기본 Lambda 함수

다양한 인증 전략을 구현하려면, 사용자의 게이트웨이 사용하는 Lambda 함수를 편집하세요. 애플리케이션의 요구 사항을 충족하는 데 도움이 되려면 Node.js에서 다음 예 Lambda 함수를 사용할 수 있습니다. 자세한 내용은 개발자 안내서AWS Lambda Node.js로 Lambda 함수 구축을 참조하세요.

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

참고

서버에 여러 프로토콜을 사용하도록 설정한 상태에서 여러 프로토콜에서 동일한 사용자 이름을 사용하여 액세스를 제공하려는 경우 ID 공급자에 각 프로토콜별 보안 인증이 설정되어 있으면 그렇게 할 수 있습니다.

파일 전송 프로토콜(FTP)의 경우 Secure Shell() 파일 전송 프로토콜(SSH) 및 파일 전송 프로토콜 overSSL(SFTP)와 별도의 보안 인증을 유지하는 것이 좋습니다FTPS. SFTP 및 와 달리 는 보안 인증 정보를 일반 텍스트로 FTPS FTP 전송FTP하므로 에 대한 별도의 보안 인증 정보를 유지하는 것이 좋습니다. SFTP 또는 에서 FTP 보안 인증을 격리하면 FTP 보안 인증 정보가 공유되거나 노출FTPS되면 워크로드가 SFTP 또는 를 사용하여 보안이 FTPS 유지됩니다.

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

서비스 관리 사용자를 생성할 때는 해당 사용자의 홈 디렉터리를 논리적 또는 물리적 디렉터리로 설정합니다. 마찬가지로 원하는 사용자의 물리적 또는 논리적 디렉터리 구조를 전달하려면 Lambda 함수 결과가 필요합니다. 설정한 파라미터는 의 값에 따라 달라집니다. HomeDirectoryType 필드.

  • HomeDirectoryType 로 설정 PATH- HomeDirectory 필드는 사용자가 볼 수 있는 절대 Amazon S3 버킷 접두사 또는 Amazon EFS 절대 경로여야 합니다.

  • HomeDirectoryTypeLOGICAL로 설정 — HomeDirectory 필드를 설정하지 마세요. 대신 의 설명된 값과 마찬가지로 원하는 항목/대상 매핑을 제공하는 HomeDirectoryDetails 필드를 설정합니다. HomeDirectoryDetails 서비스 관리 사용자를 위한 파라미터입니다.

예 함수는 예 Lambda 함수에 나열되어 있습니다.

와 함께 사용하기 위한 Lambda 함수 AWS Secrets Manager

를 자격 증명 공급자 AWS Secrets Manager 로 사용하려면 샘플 AWS CloudFormation 템플릿에서 Lambda 함수로 작업할 수 있습니다. Lambda 함수는 사용자 자격 증명으로 Secrets Manager 서비스를 쿼리하고, 성공하면 지정된 시크릿을 반환합니다. Secrets Manager 사용에 대한 자세한 내용은 AWS Secrets Manager 사용 설명서를 참조하세요.

이 Lambda 함수를 사용하는 샘플 AWS CloudFormation 템플릿을 다운로드하려면 에서 제공하는 Amazon S3 버킷으로 AWS Transfer Family 이동합니다.

AWS CloudFormation 템플릿 개선 사항

API 게이트웨이 인터페이스가 게시된 CloudFormation 템플릿에 개선되었습니다. 이제 템플릿은 API Gateway에서 BASE64인코딩된 암호를 사용합니다. 기존 배포는 이 개선 사항 없이 계속 작동하지만 기본 미국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에서 AWS CloudFormation 콘솔을 엽니다.

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

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

  4. 다음을 찾습니다.

    • 를 검색RequestTemplates하고 다음 줄이 있는지 확인합니다.

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

      method.request.header.PasswordBase64: false

업데이트된 줄이 표시되지 않으면 스택을 편집합니다. AWS CloudFormation 스택을 업데이트하는 방법에 대한 자세한 내용은 AWS CloudFormation, 사용 설명서스택 템플릿 수정을 참조하세요.