

# API Gateway Lambda 권한 부여자 구성
<a name="configure-api-gateway-lambda-authorization"></a>

Lambda 함수를 생성한 후 Lambda 함수를 API의 권한 부여자로 구성합니다. 그런 다음 Lambda 권한 부여자를 간접적으로 호출하도록 메서드를 구성하여 호출자가 메서드를 간접적으로 호출할 수 있는지 확인합니다. API를 생성한 계정과 동일한 계정이나 다른 계정에서 Lambda 함수를 생성할 수 있습니다.

API Gateway 콘솔에 기본으로 제공되는 도구를 사용하거나 [Postman](https://www.postman.com/)을 사용하여 Lambda 권한 부여자를 테스트할 수 있습니다. Postman을 사용하여 Lambda 권한 부여 함수를 테스트하는 방법에 대한 지침은 [API Gateway Lambda 권한 부여자를 사용한 API 직접 호출](call-api-with-api-gateway-lambda-authorization.md) 섹션을 참조하세요.

## Lambda 권한 부여자 구성(콘솔)
<a name="configure-api-gateway-lambda-authorization-with-console"></a>

 다음 절차는 API Gateway REST API 콘솔에서 Lambda 권한 부여자를 생성하는 방법을 보여줍니다. 다른 Lambda 권한 부여자 유형에 대해 자세히 알아보려면 [Lambda 권한 부여자 유형 선택](apigateway-use-lambda-authorizer.md#api-gateway-lambda-authorizer-choose) 섹션을 참조하세요.

------
#### [ REQUEST authorizer ]

**`REQUEST` Lambda 권한 부여자를 구성하려면**

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)에서 API Gateway 콘솔에 로그인합니다.

1. API를 선택한 다음 **권한 부여자**를 선택합니다.

1. **권한 부여자 생성**을 선택합니다.

1. **권한 부여자 이름**에 권한 부여자의 이름을 입력합니다.

1. **권한 부여자 유형**으로 **Lambda**를 선택합니다.

1. **Lambda 함수** 함수에서 Lambda 권한 부여자 함수를 생성한 AWS 리전을 선택하고 함수 이름을 입력합니다.

1. API Gateway REST API 콘솔이 리소스 기반 정책을 설정하도록 **Lambda 호출 역할**을 비워 둡니다. 이 정책은 API Gateway에 Lambda 권한 부여자 함수를 간접적으로 호출할 권한을 부여합니다. API Gateway가 Lambda 권한 부여자 함수를 간접적으로 호출하도록 허용하는 IAM 역할의 이름을 입력할 수도 있습니다. 예시 역할은 [맡을 수 있는 IAM 역할 생성](integrating-api-with-aws-services-lambda.md#api-as-lambda-proxy-setup-iam-role-policies) 섹션을 참조하세요.

1. **Lambda 이벤트 페이로드**로 **요청**을 선택합니다.

1. **자격 증명 소스 유형**에서 파리미터 유형을 선택합니다. 지원되는 파라미터 유형은 `Header`, `Query string`, `Stage variable` 및 `Context`입니다. 자격 증명 소스를 더 추가하려면 **파라미터 추가**를 선택합니다.

1. 권한 부여자에 의해 생성된 권한 부여 정책을 캐싱하려면 **권한 부여 캐싱**을 설정해 둡니다. 정책 캐싱을 활성화한 경우 **TTL** 값을 수정할 수 있습니다. **TTL**을 0으로 설정하면 정책 캐싱이 비활성화됩니다.

   캐싱을 활성화하는 경우 권한 부여자가 API 전체의 모든 메서드에 적용 가능한 정책을 반환해야 합니다. 메서드별 정책을 적용하려면 컨텍스트 변수 `$context.path` 및 `$context.httpMethod`를 사용하세요.

1. **권한 부여자 생성**을 선택합니다.

------
#### [ TOKEN authorizer ]

**`TOKEN` Lambda 권한 부여자를 구성하려면**

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)에서 API Gateway 콘솔에 로그인합니다.

1. API를 선택한 다음 **권한 부여자**를 선택합니다.

1. **권한 부여자 생성**을 선택합니다.

1. **권한 부여자 이름**에 권한 부여자의 이름을 입력합니다.

1. **권한 부여자 유형**으로 **Lambda**를 선택합니다.

1. **Lambda 함수** 함수에서 Lambda 권한 부여자 함수를 생성한 AWS 리전을 선택하고 함수 이름을 입력합니다.

1. API Gateway REST API 콘솔이 리소스 기반 정책을 설정하도록 **Lambda 호출 역할**을 비워 둡니다. 이 정책은 API Gateway에 Lambda 권한 부여자 함수를 간접적으로 호출할 권한을 부여합니다. API Gateway가 Lambda 권한 부여자 함수를 간접적으로 호출하도록 허용하는 IAM 역할의 이름을 입력할 수도 있습니다. 예시 역할은 [맡을 수 있는 IAM 역할 생성](integrating-api-with-aws-services-lambda.md#api-as-lambda-proxy-setup-iam-role-policies) 섹션을 참조하세요.

1. **Lambda 이벤트 페이로드**로 **토큰**을 선택합니다.

1. **토큰 소스**에 인증 토큰이 포함된 헤더 이름을 입력합니다. 호출자는 권한 부여 토큰을 Lambda 권한 부여자에게 전송하기 위해 이 이름의 헤더를 포함해야 합니다.

1. (선택 사항) **토큰 검증**에 정규 표현식 문을 입력합니다. API Gateway는 이 표현식에 대해 입력 토큰의 초기 확인을 수행하고 확인이 성공할 경우 권한 부여자를 호출합니다.

1. 권한 부여자에 의해 생성된 권한 부여 정책을 캐싱하려면 **권한 부여 캐싱**을 설정해 둡니다. 정책 캐싱을 비활성화한 경우 **토큰 소스**에 지정된 헤더 이름이 캐시 키가 됩니다. 정책 캐싱을 활성화한 경우 **TTL** 값을 수정할 수 있습니다. **TTL**을 0으로 설정하면 정책 캐싱이 비활성화됩니다.

   캐싱을 활성화하는 경우 권한 부여자가 API 전체의 모든 메서드에 적용 가능한 정책을 반환해야 합니다. 메서드별 정책을 적용하려는 경우 **권한 부여자 캐싱**을 끌 수 있습니다.

1. **권한 부여자 생성**을 선택합니다.

------

Lambda 권한 부여자를 생성한 후 테스트할 수 있습니다. 다음 절차는 Lambda 권한 부여자를 테스트하는 방법을 보여줍니다.

------
#### [ REQUEST authorizer ]

**`REQUEST` Lambda 권한 부여자를 테스트하려면**

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)에서 API Gateway 콘솔에 로그인합니다.

1. 권한 부여자의 이름을 선택합니다.

1. **테스트 권한 부여자**에 자격 증명 소스의 값을 입력합니다.

   [`REQUEST` 권한 부여자 Lambda 함수 예제](apigateway-use-lambda-authorizer.md#api-gateway-lambda-authorizer-request-lambda-function-create)를 사용하는 경우 다음과 같이 합니다.

   1. **헤더**를 선택하고 **headerValue1**을 입력한 다음 **파라미터 추가**를 선택합니다.

   1. **자격 증명 소스 유형**에서 **쿼리 문자열**을 선택한 다음 **queryValue1**을 입력하고 **파라미터 추가**를 선택합니다.

   1. **자격 증명 소스 유형**에서 **스테이지 변수**를 선택하고 **stageValue1**을 입력합니다.

   테스트 간접 호출을 위한 컨텍스트 변수는 수정할 수 없지만 Lambda 함수의 **API Gateway 권한 부여자** 테스트 이벤트 템플릿은 수정할 수 있습니다. 그런 다음 수정된 컨텍스트 변수를 사용하여 Lambda 권한 부여자 함수를 테스트할 수 있습니다. 자세한 내용은 AWS Lambda 개발자 안내서의 [콘솔에서 Lambda 함수 테스팅](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html)을 참조하세요.**

1. **테스트 권한 부여자**를 선택합니다.

------
#### [ TOKEN authorizer ]

**`TOKEN` Lambda 권한 부여자를 테스트하려면**

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)에서 API Gateway 콘솔에 로그인합니다.

1. 권한 부여자의 이름을 선택합니다.

1. **테스트 권한 부여자**에 토큰 값을 입력합니다.

   [`TOKEN` 권한 부여자 Lambda 함수 예제](apigateway-use-lambda-authorizer.md#api-gateway-lambda-authorizer-token-lambda-function-create)를 사용하는 경우 다음과 같이 합니다.

   1. **authorizationToken**에 **allow**를 입력합니다.

1. **테스트 권한 부여자**를 선택합니다.

    Lambda 권한 부여자가 테스트 환경에서 요청을 성공적으로 거부하면 테스트는 `200 OK` HTTP 응답으로 응답합니다. 그러나 테스트 환경 밖에서는 API Gateway가 `403 Forbidden` HTTP 응답을 반환하고 메서드 요청이 실패합니다.

------

## Lambda 권한 부여자 구성(AWS CLI)
<a name="configure-api-gateway-lambda-authorization-cli"></a>

다음 [create-authorizer](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-authorizer.html) 명령은 AWS CLI를 사용하여 Lambda 권한 부여자를 생성하는 방법을 보여줍니다.

------
#### [ REQUEST authorizer ]

다음 [create-authorizer](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-authorizer.html) 명령은 `REQUEST` 권한 부여자를 생성하고 `Authorizer` 헤더와 `accountId` 컨텍스트 변수를 자격 증명 소스로 사용합니다.

```
aws apigateway create-authorizer \
    --rest-api-id 1234123412 \
    --name 'First_Request_Custom_Authorizer' \
    --type REQUEST \
    --authorizer-uri 'arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:123412341234:function:customAuthFunction/invocations' \
    --identity-source 'method.request.header.Authorization,context.accountId' \
    --authorizer-result-ttl-in-seconds 300
```

------
#### [ TOKEN authorizer ]

다음 [create-authorizer](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-authorizer.html) 명령은 `TOKEN` 권한 부여자를 생성하고 `Authorization` 헤더를 자격 증명 소스로 사용합니다.

```
aws apigateway create-authorizer \
    --rest-api-id 1234123412 \
    --name 'First_Token_Custom_Authorizer' \
    --type TOKEN \
    --authorizer-uri 'arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:123412341234:function:customAuthFunction/invocations' \
    --identity-source 'method.request.header.Authorization' \
    --authorizer-result-ttl-in-seconds 300
```

------

Lambda 권한 부여자를 생성한 후 테스트할 수 있습니다. 다음 [test-invoke-authorizer](https://docs.aws.amazon.com/cli/latest/reference/apigateway/test-invoke-authorizer.html) 명령은 Lambda 권한 부여자를 테스트합니다.

```
aws apigateway test-invoke-authorizer --rest-api-id 1234123412 \
   --authorizer-id efg1234 \
   --headers Authorization='Value'
```

## Lambda 권한 부여자를 사용하도록 메서드 구성(콘솔)
<a name="configure-api-gateway-lambda-authorization-method-console"></a>

Lambda 권한 부여자를 구성한 후 API에 대한 메서드에 연결해야 합니다. 권한 부여자가 권한 부여 캐싱을 사용하는 경우 정책을 업데이트하여 추가 메서드에 대한 액세스를 제어해야 합니다.

**Lambda 권한 부여자를 사용하도록 API 메서드를 구성하려면**

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)에서 API Gateway 콘솔에 로그인합니다.

1. API를 선택합니다.

1. **리소스**를 선택한 다음 새 메서드를 선택하거나 기존 메서드를 선택합니다.

1. **메서드 요청** 탭의 **메서드 요청 설정**에서 **편집**을 선택합니다.

1. **권한 부여자**의 경우 드롭다운 메뉴에서 방금 생성한 Lambda 권한 부여자를 선택합니다.

1.  (선택 사항) 권한 부여 토큰을 백엔드로 전달하려면 **HTTP 요청 헤더**를 선택합니다. **헤더 추가**를 선택한 다음 인증 헤더의 이름을 추가합니다. **이름**에서, API에 대한 Lambda 권한 부여자를 생성할 때 지정한 **토큰 소스** 이름과 일치하는 헤더 이름을 입력합니다. `REQUEST` 권한 부여자에는 이 단계가 적용되지 않습니다.

1. **저장**을 선택합니다.

1. **Deploy API(API 배포)**를 선택하여 단계에 API를 배포합니다. 스테이지 변수를 사용하는 `REQUEST` 권한 부여자의 경우 **스테이지** 페이지가 열려 있는 동안 필요한 스테이지 변수를 지정하고 값을 지정해야 합니다.

## Lambda 권한 부여자를 사용하도록 메서드 구성(AWS CLI)
<a name="configure-api-gateway-lambda-authorization-method-cli"></a>

Lambda 권한 부여자를 구성한 후 API에 대한 메서드에 연결해야 합니다. 새 메서드를 생성하거나 패치 작업을 사용하여 권한 부여자를 기존 메서드에 연결할 수 있습니다. 권한 부여자가 권한 부여 캐싱을 사용하는 경우 정책을 업데이트하여 추가 메서드에 대한 액세스를 제어해야 합니다.

다음 [put-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-method.html) 명령은 Lambda 권한 부여자를 사용하는 새 메서드를 생성합니다.

```
aws apigateway put-method --rest-api-id 1234123412 \
  --resource-id a1b2c3 \
  --http-method PUT \
  --authorization-type CUSTOM \
  --authorizer-id efg1234
```

다음 [update-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-method.html) 명령은 Lambda 권한 부여자를 사용하도록 기존 메서드를 업데이트합니다.

```
aws apigateway update-method \
    --rest-api-id 1234123412 \
    --resource-id a1b2c3 \
    --http-method PUT \
    --patch-operations op="replace",path="/authorizationType",value="CUSTOM" op="replace",path="/authorizerId",value="efg1234"
```