0Pricing
AWS Solutions Architect · 강의

권한 부여: IAM, Lambda 권한 부여자 및 Cognito

IAM SigV4 서명, 사용자 지정 Lambda 권한 부여자 또는 Amazon Cognito 사용자 풀 권한 부여자로 API 엔드포인트를 보호합니다.

권한 부여: IAM, Lambda 권한 부여자 및 Cognito은(는) CoddyKit의 무료 AWS Solutions Architect 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AWS Solutions Architect 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AWS Solutions Architect 강의에는 총 4개의 강의가 포함되어 있습니다.

API 권한 부여가 중요한 이유

권한 부여 제어가 없다면 인터넷의 모든 클라이언트가 API Gateway 엔드포인트를 호출하여 데이터에 액세스하거나 데이터를 수정할 수 있습니다. API Gateway는 세 가지 기본 권한 부여 방식을 제공합니다. IAM (SigV4), Lambda Authorisers, Amazon Cognito User Pool Authorisers입니다. 각 방식은 서로 다른 사용 사례에 적합합니다. IAM은 AWS 서비스 간 호출에, Lambda 권한 부여자는 사용자 지정 토큰 또는 요청 기반 인증에, Cognito는 웹 및 모바일 사용자 인증에 사용합니다.

SigV4를 사용한 IAM 권한 부여

IAM 권한 부여에서는 호출자가 AWS Signature Version 4 (SigV4)를 사용하여 요청에 서명해야 합니다. 호출자에게는 AWS 자격 증명(액세스 키와 보안 키 또는 STS에서 발급한 임시 자격 증명)이 있어야 하며, IAM 정책에서 API의 ARN에 대한 execute-api:Invoke를 허용해야 합니다. 이는 AWS 내부의 기계 간(서버 간) 호출에 적합합니다. 예를 들어 Lambda가 다른 API를 호출하거나, EC2가 내부 API를 호출하거나, 계정 간 서비스 액세스가 필요한 경우입니다. 브라우저 클라이언트에서는 SigV4를 쉽게 사용하기 어렵습니다.

# IAM policy to allow invoking a specific API endpoint
{
  'Version': '2012-10-17',
  'Statement': [{
    'Effect': 'Allow',
    'Action': 'execute-api:Invoke',
    'Resource': 'arn:aws:execute-api:us-east-1:123456789012:abc123/prod/GET/orders'
  }]
}

Lambda Authorizers: 토큰 기반

Lambda Authoriser(이전 명칭: Custom Authoriser)는 사용자가 작성하는 Lambda 함수로, API Gateway가 백엔드 통합을 호출하기 전에 이 함수를 호출합니다. 토큰 기반 권한 부여자의 경우 API Gateway는 Authorization 헤더에서 토큰(JWT, OAuth, API 키)을 추출하여 Lambda에 전달합니다. Lambda는 토큰을 검증합니다(예: 공개 키를 사용하여 JWT 서명을 확인하거나 서드 파티 ID 공급자를 호출). 그런 다음 요청을 허용하거나 거부하는 IAM 정책 문서를 반환합니다.

def lambda_handler(event, context):
    token = event['authorizationToken']
    # Validate token (JWT verification, introspect OAuth, etc.)
    if is_valid_token(token):
        return {
            'principalId': 'user123',
            'policyDocument': {
                'Version': '2012-10-17',
                'Statement': [{'Effect': 'Allow', 'Action': 'execute-api:Invoke',
                                'Resource': event['methodArn']}]
            },
            'context': {'userId': 'user123', 'role': 'admin'}
        }
    raise Exception('Unauthorized')

Lambda Authorizers: 요청 기반

요청 기반 Lambda 권한 부여자의 경우 API Gateway는 토큰만이 아니라 전체 요청 컨텍스트(헤더, 쿼리 문자열, 스테이지 변수, 경로 매개변수)를 Lambda에 전달합니다. 이는 IP 허용 목록, 헤더 조합 또는 다중 요소 인증 확인처럼 여러 요청 속성에 따라 권한을 부여해야 할 때 유용합니다. 요청 기반 권한 부여자는 REST API와 HTTP API 모두에서 지원됩니다.

Lambda Authorizer 캐싱

모든 API 요청마다 Lambda 권한 부여자를 호출하면 지연 시간과 비용이 증가합니다. 권한 부여자 결과 캐싱을 활성화하면 권한 부여자가 반환한 IAM 정책을 구성 가능한 TTL(0~3600초) 동안 토큰 값을 키로 캐시할 수 있습니다. 이후 동일한 토큰을 사용하는 요청은 Lambda 호출을 건너뛰고 캐시된 정책을 사용합니다. TTL은 토큰 만료 시간에 맞추어 설정하십시오. 토큰이 1시간 동안 유효하다면 권한 부여자 결과도 같은 기간 동안 캐시합니다. 캐싱은 REST API에서 사용할 수 있으며, HTTP API의 JWT 권한 부여자에는 캐싱 기능이 기본 제공됩니다.

Amazon Cognito User Pool Authorizer

Cognito User Pool Authorisers는 Lambda 함수 없이 API Gateway에서 직접 Cognito-issued JWTs를 검증합니다. 사용자가 Cognito를 통해 인증되면(Hosted UI, SDK 또는 연합 ID 공급자 사용) Cognito가 ID 토큰 또는 액세스 토큰을 발급합니다. 클라이언트는 이 토큰을 Authorization 헤더에 포함합니다. API Gateway는 Cognito User Pool을 기준으로 토큰의 서명과 만료 여부를 확인합니다. 토큰이 유효하면 요청이 진행되고, 유효하지 않으면 API Gateway가 401을 반환합니다.

aws apigateway create-authorizer \
  --rest-api-id 'abc123' \
  --name 'CognitoAuthorizer' \
  --type COGNITO_USER_POOLS \
  --provider-arns 'arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_XXXXXXX' \
  --identity-source 'method.request.header.Authorization'

HTTP API의 JWT Authorizer

HTTP API는 Lambda 없이 기본 JWT 권한 부여자를 지원합니다. JWT 발급자 URL(Cognito, Auth0, Okta)과 대상을 지정하면 API Gateway가 JWT를 자동으로 검증합니다. 이는 기본적으로 Cognito User Pool 권한 부여자와 같지만 표준을 준수하는 모든 OIDC 공급자와도 함께 사용할 수 있습니다. 토큰 검증(서명, 만료 여부, 대상)은 API Gateway 내부에서 수행되므로 Lambda 권한 부여자보다 지연 시간이 짧고 Lambda 비용이 발생하지 않습니다.

aws apigatewayv2 create-authorizer \
  --api-id 'abc123' \
  --authorizer-type JWT \
  --name 'JWTAuthorizer' \
  --identity-source '$request.header.Authorization' \
  --jwt-configuration '{
    "Issuer": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_XXXXXXX",
    "Audience": ["your-client-id"]
  }'

Cognito Identity Pools와 User Pools 비교

API 권한 부여에는 Cognito User Pools를 사용하십시오. Cognito User Pools는 사용자 인증을 관리하고 JWT를 발급합니다. Cognito Identity Pools(Federated Identities)는 이와 다르게 User Pools, 소셜 로그인 또는 SAML에서 발급된 서드 파티 토큰을 STS AssumeRoleWithWebIdentity를 통해 임시 AWS 자격 증명으로 교환합니다. 애플리케이션이 클라이언트에서 AWS 서비스(S3, DynamoDB)에 직접 액세스해야 할 때 Identity Pools를 사용합니다. API Gateway 인증에는 User Pool JWT가 적합하고, Identity Pool 자격 증명은 브라우저나 모바일에서 직접 AWS SDK를 호출할 때 사용합니다.

API Gateway의 리소스 정책

REST API는 리소스 정책을 지원합니다. 리소스 정책은 API에 연결된 JSON 정책으로, IP 주소, VPC 엔드포인트, 원본 계정 또는 ARN을 기준으로 액세스를 제어합니다. 리소스 정책을 사용하여 특정 IP 범위에서만 API를 호출하도록 허용하거나, 특정 VPC 엔드포인트를 통해 들어오는 요청(프라이빗 API)으로 액세스를 제한하거나, 계정 간 호출을 허용할 수 있습니다. 리소스 정책은 method 수준의 권한 부여자와 함께 적용되며, 요청이 성공하려면 두 정책 모두 해당 요청을 허용해야 합니다.

# Allow only specific IP range to call the API
{
  'Version': '2012-10-17',
  'Statement': [{
    'Effect': 'Allow',
    'Principal': '*',
    'Action': 'execute-api:Invoke',
    'Resource': 'arn:aws:execute-api:us-east-1:123456789012:abc123/*',
    'Condition': {'IpAddress': {'aws:SourceIp': '203.0.113.0/24'}}
  }]
}

상호 TLS 인증

상호 TLS (mTLS)에서는 TLS 핸드셰이크 중에 클라이언트와 서버가 모두 인증서를 제시해야 합니다. API Gateway는 사용자 지정 도메인 이름이 구성된 REST API와 HTTP API에서 mTLS를 지원합니다. 클라이언트는 사용자가 S3의 신뢰 저장소에 업로드한 Certificate Authority (CA)가 서명한 유효한 인증서를 제시해야 합니다. mTLS는 토큰 기반 인증을 넘어 강력한 클라이언트 신원 확인이 필요한 금융 서비스, IoT 디바이스 인증 및 B2B 통합에서 사용됩니다.

적절한 권한 부여자 유형 선택

SAA-C03 시험을 위한 권한 부여자 선택 가이드: IAM (SigV4) → 동일 계정 또는 다른 계정에서 이루어지는 AWS 서비스 간 호출; Cognito User Pool → Cognito를 통해 인증된 웹 및 모바일 애플리케이션 사용자; Lambda Authoriser → 사용자 지정 인증 로직(서드 파티 ID 공급자, 레거시 토큰 형식, OAuth 검사, IP와 토큰의 결합); JWT Authoriser (HTTP API) → 표준을 준수하는 모든 공급자의 OIDC/OAuth2 토큰을 Lambda 권한 부여자보다 낮은 비용으로 처리할 때 사용합니다. 권한 부여자가 없으면 공개 API입니다.

빠른 확인

이 레슨에서 다룬 AWS Solutions Architect (SAA-C03) 개념에 대한 이해도를 확인해 보십시오.

레슨 요약

이 레슨에서는 다음을 배웠습니다. IAM (SigV4) 권한 부여는 AWS 자격 증명을 사용하는 서비스 간 호출에 적합합니다. Cognito User Pool Authorisers는 웹 및 모바일 애플리케이션을 위해 Cognito에서 발급한 JWT를 기본적으로 검증합니다. Lambda Authorisers는 서드 파티 ID 공급자를 위한 사용자 지정 토큰 검증이나 선택적 결과 캐싱을 지원하는 복잡한 권한 부여 로직을 구현합니다. 다음 레슨에서는 API Gateway의 제한, 캐싱 및 사용량 계획을 살펴봅니다.

자주 묻는 질문

“권한 부여: IAM, Lambda 권한 부여자 및 Cognito” 강의는 무료인가요?

네 — “권한 부여: IAM, Lambda 권한 부여자 및 Cognito” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AWS Solutions Architect 강의 전체를 잠금 해제할 수 있습니다. AWS Solutions Architect 강의에는 총 4개의 강의가 포함되어 있습니다.

“권한 부여: IAM, Lambda 권한 부여자 및 Cognito”에서 뭘 배우나요?

IAM SigV4 서명, 사용자 지정 Lambda 권한 부여자 또는 Amazon Cognito 사용자 풀 권한 부여자로 API 엔드포인트를 보호합니다. 브라우저에서 직접 실행하는 실습 코드로 AWS Solutions Architect을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

AWS Solutions Architect을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 AWS Solutions Architect은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“권한 부여: IAM, Lambda 권한 부여자 및 Cognito” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 AWS Solutions Architect 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 AWS Solutions Architect 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. REST API, HTTP API 및 WebSocket API 비교
  2. 통합: Lambda, HTTP 및 모의 통합
  3. 권한 부여: IAM, Lambda 권한 부여자 및 Cognito
  4. 스로틀링, 캐싱 및 사용량 계획
← AWS Solutions Architect(으)로 돌아가기