사용자 지정 ID 공급자 작업 - AWS Transfer Family

문서의 영문과 번역 사이에 충돌이 있는 경우에는 영문 버전을 따릅니다. 번역 버전은 기계 번역을 사용하여 제공합니다.

사용자 지정 ID 공급자 작업

기존 ID 공급자를 에 통합하려면 AWS Transfer Family, RESTful 인터페이스 제공 Amazon API Gateway 방법. Transfer Family 이 방법을 호출하여 사용자를 인증합니다.

이 단일 방법은 사용자의 액세스 권한을 인증하고 인증합니다. Amazon S3. 방법을 구성한 후 새 서버를 생성할 때 서버에 연결합니다. 다음을 사용하여 새 서버를 생성할 수 있습니다. AWS Transfer Family 콘솔 또는 서버생성 API 작업.

API 게이트웨이 작업에 대한 자세한 내용은 API 게이트웨이 개발자 안내서 단원을 참조하십시오.

사용자 지정 ID 공급자를 사용하여 인증

에 대한 사용자 지정 ID 공급자를 만들려면 Transfer Family, 사용 API 게이트웨이API를 생성하고 제공할 수 있는 매우 안전한 방법을 제공합니다. 함께 API 게이트웨이, 모든 수신 API 호출이 더 큰 보안으로 전송되도록 HTTPS 끝점을 만들 수 있습니다. API 게이트웨이 서비스에 대한 자세한 내용은 API 게이트웨이 개발자 안내서를 참조하십시오.

API 게이트웨이 은(는) AWS_IAM에 따라 동일한 인증을 제공합니다. AWS Identity and Access Management (IAM)을 AWS에서 내부적으로 사용합니다. 를 사용하여 인증을 활성화하는 경우 AWS_IAMAPI에 전화할 명시적 권한이 있는 발신자만 해당 API의 API Gateway 방법.

사용 방법 API 게이트웨이 을(를) 위한 사용자 지정 ID 공급자로 Transfer Family, 활성화 IAM 귀하의 API 게이트웨이 게이트웨이. 이 프로세스의 일환으로 귀하는 IAM 권한 있는 역할 Transfer Family 게이트웨이 을(를) 사용합니다.

사용 방법 API 게이트웨이 사용자 지정 인증의 경우 Transfer Family

  1. 생성 AWS CloudFormation 스택. 방법:

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

    2. 다음 지침을 따르십시오. AWS CloudFormation 의 기존 템플릿에서 스택 스택 템플릿 선택 에서 AWS CloudFormation 사용 설명서.

    3. 다음 기본 템플릿 중 하나를 사용하여 AWS Lambda-뒷면 API 게이트웨이 에서 사용자 지정 ID 공급자로 사용 Transfer Family:

    이러한 스택 중 하나를 배포하는 것은 사용자 지정 ID 공급자를 Transfer Family 워크플로. 스택은 Lambda 게이트웨이를 지원하는 기능은 API 게이트웨이. 그런 다음 이 게이트웨이를 사용자 지정 ID 공급자로 사용할 수 있습니다. Transfer Family. 기본적으로 Lambda 기능이 단일 사용자를 인증합니다. myuser 의 암호를 사용하여 MySuperSecretPassword. 이러한 자격 증명을 편집하거나 Lambda 배포 후 다른 작업을 수행하기 위한 기능 코드입니다.

    참고

    기본 사용자 및 암호 자격 증명을 편집하는 것이 좋습니다.

    스택이 배포된 후에는 출력 탭. 이러한 세부 정보에는 스택 아마존 리소스 이름(ARN), IAM 스택이 만든 역할 및 새 게이트웨이의 URL입니다.

    참고

    사용자 지정 ID 공급자 옵션을 사용하여 암호를 활성화하는 경우–API 게이트웨이의 요청 및 응답 로깅을 활성화하면 사용자의 암호를 Amazon에 CloudWatch Logs. 프로덕션 환경에서는 이 로그를 사용하지 않는 것이 좋습니다. 자세한 내용은 을 참조하십시오. 설정 CloudWatch API 게이트웨이에서 API 로깅 에서 API 게이트웨이 개발자 안내서.

  2. 다음을 확인하십시오. API 게이트웨이 서버 의 구성. 방법:

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

    2. 다음을 선택하십시오. Transfer Custom Identity Provider basic template API 해당 AWS CloudFormation 템플릿 생성됨.

      다음 스크린샷은 전체 API 구성을 보여줍니다. 이번 예제에서 메서드는 Lambda 함수를 기반으로 하지만, 다른 다양한 통합 유형을 사용할 수도 있습니다.

    3. 에서 리소스 창, 선택 GET을 선택하고 방법 요청. 다음 스크린샷은 다음을 포함하는 올바른 방법 구성을 보여줍니다. protocol, serverId, sourceIp, 및 username 매개 변수의 일부로

    이 시점에서 게이트웨이를 배포할 준비가 되었습니다.

  3. 대상 조치, 선택 API 배포. 대상 배치 단계, 선택 제품을 선택하고 배포.

    API가 성공적으로 배포된 후 스테이지 편집기 섹션을 참조하십시오.

    참고

    복사 URL 불러오기 화면 상단에 나타납니다. 다음 단계에 필요합니다.

  4. https://console.aws.amazon.com/transfer/에서 AWS Transfer Family 콘솔을 엽니다.

    선택 서버 생성 을(를) 열어 서버 생성 페이지. 대상 ID 공급자 선택, 선택 사용자 지정, 다음 참조.

    대상 사용자 지정 공급자, 붙여넣기 URL 불러오기 / API 게이트웨이 이전 단계에서 만든 끝점입니다.

    대상 호출 역할, 선택 IAM 에 의해 생성된 역할 AWS CloudFormation 템플릿. 이 역할은 Transfer Family 게이트웨이를 호출합니다.

    호출 역할에는 AWS CloudFormation 1단계에서 만든 스택에 대해 선택한 스택 이름입니다. 다음과 같은 형식이 있습니다. CloudFormation-stack-name-TransferIdentityProviderRole-ABC123DEF456GHI.

  5. 나머지 상자를 채우고 서버 생성.

구성 테스트

사용자 지정 ID 공급자를 만든 후 구성을 테스트해야 합니다.

Console

를 사용하여 구성을 테스트하려면 AWS Transfer Family 콘솔

  1. https://console.aws.amazon.com/transfer/에서 AWS Transfer Family 콘솔을 엽니다.

  2. 에서 서버 페이지에서 새 서버를 선택하고 조치을 선택하고 테스트.

  3. 다음에 대한 텍스트 입력: 사용자 이름비밀번호 이 기능을 배포할 때 설정한 AWS CloudFormation 스택. 기본 옵션을 유지한 경우 사용자 이름은 다음과 같습니다. myuser 암호는 MySuperSecretPassword.

  4. 다음을 선택하십시오. 서버 프로토콜 IP 주소를 입력합니다 원본 IP, 배포 시 설정한 경우 AWS CloudFormation 스택.

    사용자 인증이 성공하면 테스트에서 StatusCode: 200 HTML 응답 및 사용자 역할 및 권한의 세부 정보가 포함된 JSON 개체(다음 참조).

CLI

AWS CLI를 사용하여 구성을 테스트하려면

  1. 실행 테스트-신분증-제공자 명령.

    aws transfer test-identity-provider --server-id s-1234abcd5678efgh --user-name myuser --user-password MySuperSecretPassword --server-protocol FTP --source-ip 127.0.0.1
  2. 서버 ID를 입력합니다.

  3. 를 배포할 때 설정한 사용자 이름과 암호를 입력합니다. AWS CloudFormation 스택. 기본 옵션을 유지한 경우 사용자 이름은 다음과 같습니다. myuser 암호는 MySuperSecretPassword.

  4. 서버 프로토콜 및 소스 IP를 입력합니다. AWS CloudFormation 스택.

    사용자 인증이 성공하면 명령은 StatusCode: 200 HTML 응답 및 사용자의 역할 및 권한에 대한 세부 정보가 포함된 JSON 개체.

    { "Response": "{\"Policy\": \"{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n{\n \"Sid\": \"ReadAndListAllBuckets\",\n \"Effect\": \"Allow\",\n \"Action\": [\n \"s3:ListAllMybuckets\",\n \"s3:GetBucketLocation\",\n \"s3:ListBucket\",\n \"s3:GetObjectVersion\",\n \"s3:GetObjectVersion\"\n],\n \"Resource\":\"*\"\n}\n]\n}\",\"Role\": \"arn:aws:iam::000000000000:role/MyUserS3AccessRole\",\"HomeDirectory\": \"/\"}", "StatusCode": 200, "Message": "", "Url": "https://abcde1234.execute-api.us-east-2.amazonaws.com/prod/servers/s-123a4567bcd891e23/users/myuser/config" }

다음을 구현하십시오 API 게이트웨이 방법

에 대한 사용자 지정 ID 공급자를 만들려면 Transfer Family, 귀하의 API 게이트웨이 게이트웨이는 다음과 같은 리소스 경로를 가진 단일 방법을 구현해야 합니다. /servers/serverId/users/username/config. 더 serverIdusername 값은 RESTful 리소스 경로에서 가져옵니다. 필요에 따라 sourceIpprotocol 값을 RESTful 리소스 경로로 설정합니다.

참고

사용자 이름은 최소 3자, 최대 100자여야 합니다. 사용자 이름에 다음 문자를 사용할 수 있습니다. a–z, A-Z, 0개–9, 밑줄 '_', 하이픈 '-', 마침표 '.' 및 의 기호 "@". 사용자 이름은 하이픈, 마침표 및 기호 로 시작할 수 없습니다.

만약 Transfer Family 가 사용자의 암호 인증을 시도하면 서비스가 Password: 헤더 필드. 다음 부재 시: Password: 헤더, Transfer Family 은 공개 키 인증을 시도하여 사용자 을(를) 인증합니다.

ID 공급자를 사용하여 최종 사용자를 인증 및 인증하는 경우, 자격 증명의 유효성 검사 외에도 이제 최종 사용자가 사용하는 클라이언트의 IP 주소를 기반으로 액세스 요청을 허용 또는 거부할 수 있습니다. 이렇게 하면 신뢰할 수 있는 로 지정된 IP 주소에서만 S3 버킷에 저장된 데이터에 액세스할 수 있습니다. 이 기능을 사용하려면 sourceIp RESTful 리소스 경로의 값입니다.

서버에 대해 여러 프로토콜이 활성화되어 있고 여러 프로토콜에 대해 동일한 사용자 이름을 사용하여 액세스를 제공하려는 경우, 프로토콜에 특정된 자격 증명이 ID 공급자 에 설정되어 있는 한 그렇게 할 수 있습니다. 이 기능을 사용하려면 protocol RESTful 리소스 경로의 값입니다.

이 방법은 항상 HTTP 상태를 반환해야 합니다. 200. 다른 HTTP 상태 코드는 API 에 액세스하는 중 오류가 발생한 것을 의미합니다.

답변 본문은 다음 양식의 JSON 문서입니다.

{ "Role": "IAM role with configured S3 permissions", "PublicKeys": [ "ssh-rsa public-key1", "ssh-rsa public-key2" ], "Policy": "STS Assume role scope down policy", "HomeDirectory": "User's home directory" }

Role 필드에 인증이 성공적으로 수행되었음을 나타냅니다. 암호 인증을 수행할 때( Password: 헤더), SSH 공개 키를 제공할 필요가 없습니다. 또한 PolicyHomeDirectory 필드는 선택 사항입니다. 아니요일 때 home 디렉터리가 제공됩니다. Transfer Family 부모 S3 버킷으로 기본 설정됩니다. 사용자를 인증할 수 없는 경우, 예를 들어 암호가 올바르지 않은 경우 Role 을(를) 설정합니다. 예를 들어 빈 JSON 개체가 있습니다.

에 사용자 정책 포함 Lambda JSON 형식의 함수. 에서 사용자 정책을 구성하는 방법에 대한 자세한 내용은 Transfer Family, 참조 사용자 구성 편집.

예 Lambda 인증 기능

다른 인증 전략을 구현하려면 Lambda 게이트웨이에서 사용하는 기능입니다. 애플리케이션의 요구 사항을 충족하는 데 도움이 되도록 다음 예를 참조할 수 있습니다. Lambda 기능을 Python 에서 사용할 수 있습니다. Lambda에 대한 자세한 내용은 AWS Lambda Developer Guide 단원을 참조하십시오.

기본값 Lambda 기능

다음은 Lambda 기능은 사용자 이름, 암호(헤더 필드에서)를 가져옵니다. IAM 액세스 역할, 공용 SSH 키 및 프로토콜. 프로토콜 필드를 사용하여 ID 공급자를 조회할 수 있습니다. 지원되는 프로토콜 값은 SFTP, FTPS 및 FTP입니다.

참고

서버에 대해 여러 프로토콜이 활성화되어 있고 여러 프로토콜에 대해 동일한 사용자 이름을 사용하여 액세스를 제공하려는 경우, 프로토콜에 특정된 자격 증명이 ID 공급자 에 설정되어 있는 한 그렇게 할 수 있습니다. FTP의 경우 SFTP 및 FTPS와는 별도의 자격 증명을 유지하는 것이 좋습니다. SFTP 및 FTPS와 달리 FTP는 일반 텍스트 에서 자격 증명을 전송하기 때문입니다. SFTP 또는 FTPS에서 FTP 자격 증명을 격리하여 FTP 자격 증명을 공유하거나 노출하면 SFTP 또는 FTPS를 사용하는 워크로드가 안전하게 유지됩니다.

더 Lambda 인증하고, 성공할 경우 관련 IAM 액세스 역할 및 정책. 이 Lambda 함수는 예제에서 사용된 것과 동일합니다. AWS CloudFormation 템플릿.

다음 예의 주석 처리된 섹션은 Transfer Family 아키텍처. 논리적 디렉토리를 사용하여 사용자 내 특정 경로에 대한 액세스를 AWS 사용자별로 설정합니다. 예를 들어, S3 버킷의 다른 섹션에 대한 액세스를 위임할 수 있습니다. 논리 디렉토리를 사용하려면 함수를 설정하십시오. HomeDirectoryType 매개 변수를 LOGICAL. 또한, HomeDirectoryDetails 매개 변수, 다음 목록 제공 EntryTarget 쌍.

// GetUserConfig Lambda exports.handler = (event, context, callback) => { console.log("Username:", event.username, "ServerId: ", event.serverId); var response; // Check if the user name presented for authentication is correct. This doesn't check the value of the serverId, 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 == '${UserName}') { response = { Role: '${UserRoleArn}', // 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 HomeDirectory: '${UserHomeDirectory}' // Not required, defaults to '/' }; // Check if password is provided if (event.password == "") { // If no password provided, return the user's SSH public key response['PublicKeys'] = [ "${UserPublicKey1}" ]; // Check if password is correct } else if (event.password !== '${UserPassword}') { // 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); };

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

사용 방법 AWS Secrets Manager ID 공급자인 경우 Lambda 검체 내 기능 AWS CloudFormation 템플릿. 이는 Secrets Manager 자격 증명을 사용하여 서비스를 수행하고, 성공할 경우 지정된 암호를 반환합니다. Secrets Manager에 대한 자세한 내용은 AWS Secrets Manager 사용 설명서 단원을 참조하십시오.

샘플을 다운로드하려면 AWS CloudFormation 이를 사용하는 템플릿 Lambda 기능을 사용하려면 아마존 S3 버킷 제공: AWS Transfer Family.