AWS SAM 템플릿으로 API 액세스 제어 - AWS Serverless Application Model

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

AWS SAM 템플릿으로 API 액세스 제어

API Gateway API에 대한 액세스를 제어하면 서버리스 애플리케이션의 보안을 유지하고 활성화한 인증을 통해서만 액세스할 수 있습니다. AWS SAM 템플릿에서 권한 부여를 활성화하여 API Gateway API에 액세스할 수 있는 사용자를 제어할 수 있습니다.

AWS SAM API Gateway API에 대한 액세스를 제어하기 위한 여러 메커니즘을 지원합니다. 지원되는 메커니즘 세트는 AWS::Serverless::HttpApiAWS::Serverless::Api 리소스 유형 간에 차이가 있습니다.

다음 표에는 각 리소스 유형이 지원하는 메커니즘이 요약되어 있습니다.

액세스를 제어하기 위한 메커니즘 AWS::Serverless::HttpApi AWS::Serverless::Api
Lambda 권한 부여자
IAM 권한
Amazon Cognito 사용자 풀 ✓ *
API 키
리소스 정책
OAuth 2.0/JWT 권한 부여자

* Amazon Cognito를 AWS::Serverless::HttpApi리소스 유형과 함께 JSON Web Token(JWT) 발급자로 사용할 수 있습니다.

  • Lambda 권한 부여자 – Lambda 권한 부여자(이전에는 사용자 지정 권한 부여자로 칭함)는 API에 대한 액세스를 제어하기 위해 제공하는 Lambda 함수입니다. API가 호출되면 이 Lambda 함수는 클라이언트 애플리케이션이 제공하는 요청 컨텍스트 또는 권한 부여 토큰을 사용하여 호출됩니다. Lambda 함수는 호출자가 요청된 작업을 수행할 권한이 있는지 여부에 응답합니다.

    AWS::Serverless::HttpApiAWS::Serverless::Api 리소스 유형 모두 Lambda 권한 부여자를 지원합니다.

    AWS::Serverless::HttpApi을 사용하는 Lambda 권한 부여자에 대한 자세한 내용은 API Gateway 개발자 안내서HTTP API를 위한 AWS Lambda 권한 부여자 사용을 참조하세요. AWS::Serverless::Api을 사용하는 Lambda 권한 부여자에 대한 자세한 내용은 API Gateway 개발자 안내서API Gateway Lambda 권한 부여자 사용을 참조하세요.

    각 리소스 유형에 대한 Lambda 권한 부여자의 예는 Lambda 권한 부여자 예제 섹션을 참조하세요.

  • IAM 권한 - AWS Identity and Access Management (IAM) 권한을 사용하여 누가 귀하의 API를 호출할 수 있는지 제어할 수 있습니다. 귀하의 API를 호출하는 사용자는 IAM 자격 증명으로 인증을 받아야 합니다. API 호출자를 나타내는 IAM 사용자에게 연결된 IAM 정책, 사용자를 포함하는 IAM 그룹 또는 사용자가 위임하는 IAM 역할이 있는 경우에만 API 호출이 성공합니다.

    AWS::Serverless::Api 리소스 유형만 IAM 권한을 지원합니다.

    자세한 내용은 API Gateway 개발자 가이드에서 IAM 권한 부여자를 사용하는 API에 대한 액세스 제어를 참조하세요. 예시는 IAM 권한 예제에서 확인하십시오.

  • Amazon Cognito 사용자 풀 – Amazon Cognito 사용자 풀은 Amazon Cognito의 사용자 디렉터리입니다. API 클라이언트는 먼저 사용자를 사용자 풀에 로그인시키고 해당 사용자에 대한 자격 증명 또는 액세스 토큰을 얻어야 합니다. 그러면 클라이언트가 반환된 토큰 중 하나를 사용하여 귀하의 API를 호출합니다. API 호출은 필수 토큰이 유효한 경우에만 성공합니다.

    AWS::Serverless::Api 리소스 유형은 Amazon Cognito 사용자 풀을 지원합니다. AWS::Serverless::HttpApi 리소스 유형은 Amazon Cognito를 JWT 발급자로 사용할 수 있도록 지원합니다.

    자세한 내용은 API Gateway 개발자 가이드에서 Amazon Cognito 사용자 풀을 권한 부여자로 사용하여 REST API에 대한 액세스 제어를 참조하세요. 예시는 Amazon Cognito 사용자 풀 예제에서 확인하십시오.

  • API 키는 앱 개발자 고객에게 귀하의 API에 대한 액세스 권한을 부여하기 위해 귀하가 배포하는 영숫자 문자열 값입니다.

    AWS::Serverless::Api 리소스 유형만 API 키를 지원합니다.

    자세한 내용을 알아보려면 API Gateway 개발자 안내서Amazon API Gateway에서 API 키 생성 및 사용 계획을 참조하십시오. API 키의 예는 API 키 예제 섹션을 참조하세요.

  • 리소스 정책 – 리소스 정책은 API Gateway API에 연결할 수 있는 JSON 정책 문서입니다. 리소스 정책을 사용하여 지정된 보안 주체(보통 IAM 사용자 또는 역할)가 API를 호출할 수 있는지 여부를 제어합니다.

    AWS::Serverless::Api 리소스 유형만 API Gateway API에 대한 액세스를 제어하는 메커니즘으로 리소스 정책을 지원합니다.

    리소스 정책에 대한 자세한 내용은 API Gateway 개발자 안내서API Gateway 리소스 정책을 사용하는 액세스 제어를 참조하세요. 리소스 정책의 예는 리소스 정책 예시 섹션을 참조하세요.

  • 귀하는 OAuth 2.0/JWT 권한 부여자 - OpenID Connect(OIDC)OAuth 2.0 프레임워크의 일부로 JWT를 사용하여 API에 대한 액세스를 제어할 수 있습니다. API Gateway는 클라이언트가 API 요청과 함께 제출하는 JWT를 검증하고 토큰 검증 및 선택적으로 토큰의 범위를 기반으로 요청을 허용하거나 거부합니다.

    AWS::Serverless::HttpApi 리소스 유형만 OAuth 2.0/JWT 권한 부여자를 지원합니다.

    자세한 내용은 API Gateway 개발자 가이드에서 JWT 권한 부여자를 사용하는 HTTP API에 대한 액세스 제어를 참조하십시오. 예시는 OAuth 2.0/JWT 권한 부여자 예제에서 확인하십시오.

액세스 제어를 위한 메커니즘의 선택

귀하의 API Gateway API에 대한 액세스를 제어하는 데 사용할 메커니즘은 몇 가지 요인에 따라 달라집니다. 예를 들어, 승인 또는 액세스 제어를 설정하지 않은 미개발 프로젝트가 있는 경우 Amazon Cognito 사용자 풀이 최선의 선택일 수 있습니다. 사용자 풀을 설정하면 인증과 액세스 제어도 자동으로 설정되기 때문입니다.

하지만 애플리케이션에 이미 인증이 설정되어 있는 경우에는 Lambda 권한 부여자를 사용하는 것이 가장 좋은 방법일 수 있습니다. 기존 인증 서비스를 호출하고 응답에 따라 정책 문서를 반환할 수 있기 때문입니다. 또한 애플리케이션에 사용자 풀이 지원하지 않는 사용자 지정 인증 또는 액세스 제어 로직이 필요한 경우 Lambda 권한 부여자가 최선의 옵션일 수 있습니다.

사용할 메커니즘을 선택했으면 해당 메커니즘을 사용하도록 애플리케이션을 구성하는 AWS SAM 방법에 대한 해당 섹션을 참조하십시오.

오류 응답 사용자 지정

를 AWS SAM 사용하여 일부 API Gateway 오류 응답의 콘텐츠를 사용자 지정할 수 있습니다. AWS::Serverless::Api 리소스 유형만 사용자 지정된 API Gateway 응답을 지원합니다.

API Gateway 응답에 대한 자세한 내용은 API Gateway 개발자 안내서API Gateway에서의 게이트웨이 응답을 참조하세요. 사용자 지정 응답의 예는 사용자 지정 응답 예제 섹션을 참조하세요.