2단계: AWS Management Console에서 프록시 서비스(Amazon API Gateway) 만들기

Snowflake는 원격 서비스에 직접 데이터(HTTP POST 요청)를 보내지 않습니다. 대신, Snowflake는 데이터를 원격 서비스(예: AWS Lambda Function)로 릴레이하고 다시 되돌려 보내는 프록시 서비스로 데이터를 보냅니다.

이 항목에서는 외부 함수에 대한 프록시 서비스로 사용할 Amazon API Gateway를 만들고 구성하기 위한 지침을 제공합니다.

Amazon API Gateway를 프록시 서비스로 구성하려면 다음을 포함한 여러 단계가 필요합니다.

  • AWS 계정에서 새 IAM(ID 및 액세스 관리) 역할 만들기.

  • Amazon API Gateway 엔드포인트 만들기 및 구성.

  • Amazon API Gateway 엔드포인트 보안.

  • Snowflake에서 API 통합 오브젝트 만들기.

  • Snowflake와 새 IAM 역할 사이의 트러스트 관계 설정.

이들을 만드는 단계가 인터리브되는 이유는 다음과 같습니다.

  • API 통합은 API Gateway에서 제공하는 정보(예: 역할의 ARN(Amazon Resource Name))가 필요합니다.

  • API Gateway는 API 통합에서 제공하는 정보(예: API_AWS_EXTERNAL_ID 및 API_AWS_IAM_USER_ARN)가 필요합니다.

이 항목의 내용:

AWS 계정에서 새 IAM 역할 만들기

Snowflake가 AWS 계정을 인증하려면 Snowflake 소유의 IAM(ID 및 액세스 관리) 사용자에게 AWS 계정에서 IAM 역할을 맡을 권한이 부여되어야 합니다.

IAM 역할을 만드는 단계는 다음과 같습니다.

  1. 새 IAM 역할을 만듭니다. AWS Console에서 IAM을 검색하고 Roles 를 클릭한 다음 Create Role 을 클릭합니다.

  2. 신뢰할 수 있는 엔터티의 유형을 선택하라는 메시지가 표시되면 Another AWS account 를 선택합니다.

  3. Specify accounts that can use this role 을 요청하는 메시지가 표시되면 이름이 Your AWS Account ID 인 워크시트 필드의 값을 붙여넣습니다.

    (Snowflake가 아닌 귀하의 AWS 계정 ID를 사용하십시오. Snowflake의 ARN은 나중에 이 IAM 역할과 연결됩니다.)

  4. Next: Permissions 를 클릭합니다.

  5. 선택적으로, 권한을 설정합니다(Attach permissions policies).

  6. Next: Tags 를 클릭합니다.

  7. 선택적으로, 태그를 추가합니다.

  8. Next: Review 를 클릭합니다.

  9. 역할 이름을 입력합니다.

    • 워크시트의 New IAM Role Name 필드에 역할 이름을 기록합니다.

  10. Create role 버튼을 클릭합니다. 역할을 만든 후 다음을 수행합니다.

    • 워크시트의 New IAM Role ARN 필드에 Role ARN 을 기록합니다.

API Gateway 엔드포인트 만들기

API Gateway를 만들고 구성하기 전에 리전 엔드포인트 또는 프라이빗 엔드포인트를 사용할지 여부를 선택합니다. 자세한 내용은 엔드포인트 유형 선택하기: 리전 엔드포인트와 프라이빗 엔드포인트 섹션을 참조하십시오.

프라이빗 엔드포인트를 사용할 계획이라면 추적 워크시트에 기록한 VPC(Virtual Private Cloud) ID가 필요합니다.

API Gateway 엔드포인트를 만드는 단계는 아래와 같습니다.

  1. AWS Management Console에서 API Gateway 를 선택합니다.

  2. Create API 를 선택합니다.

  3. 엔드포인트의 유형(리전 또는 프라이빗)을 선택합니다.

    • 리전 엔드포인트를 원할 경우 다음을 수행하십시오.

      • REST API 를 찾아 Build 버튼을 클릭합니다.

    • 프라이빗 엔드포인트를 원할 경우 다음을 수행하십시오.

      • REST API private 을 찾아 Build 버튼을 클릭합니다.

    중요

    REST API 또는 REST API private 을 선택해야 합니다. HTTP API 또는 다른 옵션을 선택하지 마십시오.

  4. New API 옵션을 선택합니다.

  5. 새 API의 이름을 입력합니다.

    워크시트의 New API Name 필드에 이 이름을 기록합니다.

  6. Endpoint Type 을 선택하라는 메시지가 표시되면 Regional 또는 Private 을 선택합니다.

  7. VPC Endpoint IDs 필드를 비워 둡니다.

  8. Create API 버튼을 클릭합니다.

  9. 리소스를 만들려면 Actions 를 클릭한 다음 Create Resource 를 클릭합니다.

    워크시트의 API Gateway Resource Name 필드에 리소스 이름을 기록합니다.

    Create Resource 버튼을 클릭합니다. 화면에 No methods defined for the resource. 가 표시됩니다.

  10. 새 메서드를 만들려면 Actions 를 클릭하고 Create Method 를 선택하십시오.

    리소스 이름 아래의 작은 드롭다운 메뉴 상자에서 POST 를 선택한 다음 그 옆에 있는 회색 확인 표시를 클릭합니다.

  11. Integration typeLambda Function 이어야 합니다. 아직 선택하지 않았다면 선택하십시오.

  12. Use Lambda Proxy integration 확인란을 선택합니다.

    Lambda 프록시 통합이 없는 JSON은 Lambda 프록시 통합이 있는 JSON과 다르므로 Lambda 프록시 통합을 선택하는 것이 중요합니다. Lambda 프록시 통합에 대한 자세한 내용은 다음에 대한 AWS 설명서를 참조하십시오.

  13. Lambda Function 필드에서 워크시트에 기록한 Lambda Function Name 을 붙여넣습니다.

  14. Save 버튼을 클릭합니다.

  15. Actions 버튼을 클릭하고 Deploy API 작업을 선택합니다.

  16. 스테이지를 선택하거나 만듭니다. Deploy 를 클릭합니다.

  17. 리소스 이름 아래에 POST 가 표시되어야 합니다.

    이 항목이 보이지 않으면 리소스 이름 왼쪽에 있는 삼각형을 클릭하여 리소스 트리를 확장해야 할 수도 있습니다.

  18. POST 를 클릭한 후 워크시트의 Resource Invocation URL 필드에 POST 요청의 Invoke URL 을 기록합니다.

    호출 URL에 자신이 만든 리소스의 이름이 포함되어 있는지 확인하고, 그렇지 않은 경우 리소스가 아닌 스테이지에 대한 호출 URL을 클릭했을 수 있습니다.

  19. Save Changes 를 클릭합니다.

API Gateway 테스트하기

API Gateway가 Lambda Function을 호출할 수 있는지 확인합니다.

  1. AWS 테스트 지침 을 따릅니다.

  2. AWS 지침의 알맞은 단계에서 다음 텍스트를 Request Body 에 붙여넣습니다.

    {
        "data":
            [
                [0, 43, "page"],
                [1, 42, "life, the universe, and everything"]
            ]
    }
    
    Copy

테스트를 실행하면 Request, Status, Latency, and Response Body 가 오른쪽에 나타나는 것이 보일 것입니다(스크롤해야 보일 수도 있음).

반환된 상태가 200이면 API Gateway가 올바른 Lambda 함수를 호출한 것입니다.

(이 확인 단계에서는 인증을 건너뛰므로, 권한 문제가 드러나지 않습니다.)

Amazon API 게이트웨어 엔드포인트 보호하기

Amazon API Gateway 엔드포인트와 같은 프록시 서비스 엔드포인트의 보안에 대한 개요는 프록시 서비스 보호하기 를 참조하십시오.

Amazon API Gateway 엔드포인트를 보호하는 방법은 다음과 같습니다.

  1. 현재, API Gateway 정보를 표시하는 화면상에 있어야 하며 리소스와 POST 메서드가 보여야 합니다.

    아직 이 화면으로 이동하지 않았다면 다음을 수행하십시오.

    1. AWS Management Console에서 API Gateway 페이지로 이동합니다.

    2. API Gateway를 선택합니다.

    3. 왼쪽 창에서 Resources 를 클릭합니다.

    4. POST 메서드를 클릭합니다. (이 메서드가 보이지 않으면 보통 왼쪽에서 두 번째 창인 Resources 창에서 리소스의 왼쪽에 있는 삼각형을 클릭하여 리소스 트리를 확장하십시오.)

  2. Method Request 상자에서 워크시트의 Method Request ARN 필드로 Method Request ARN 을 복사합니다.

  3. Method Request 라는 제목을 클릭합니다.

  4. Authorization 옆에 있는 편집 기호를 클릭하고 AWS_IAM 을 선택하여 메서드 요청에서 AWS_IAM 인증이 요구하도록 지정합니다.

    메뉴 옆에 있는 작은 확인 표시를 클릭하여 선택을 확인합니다.

  5. 게이트웨이 엔드포인트를 호출할 권한이 있는 자를 지정하기 위해 API Gateway에 대한 리소스 정책을 설정하려면 API용 윈도우의 왼쪽 열에서 Resource Policy 를 클릭하십시오.

    • 리전 엔드포인트:

      아래에 있는 JSON 형식의 리소스 정책 템플릿을 리소스 정책 편집기에 붙여넣은 다음, 아래에 설명한 대로 자리 표시자를 워크시트의 알맞은 값으로 바꿉니다.

      {
          "Version": "2012-10-17",
          "Statement":
          [
              {
              "Effect": "Allow",
              "Principal":
                  {
                  "AWS": "arn:aws:sts::<12-digit-number>:assumed-role/<external_function_role>/snowflake"
                  },
              "Action": "execute-api:Invoke",
              "Resource": "<method_request_ARN>"
              }
          ]
      }
      
      Copy

      리소스 정책의 다음 부분을 바꿉니다.

      • <12자리 숫자> 를 워크시트에 기록한 Your AWS Account ID 필드의 값으로 바꿉니다.

      • <외부_함수_역할> 을 워크시트에 있는 New IAM Role Name 필드의 역할 이름으로 바꿉니다.

        예를 들어, AWS 역할 이름이 다음과 같은 경우

        arn:aws:iam::987654321098:role/MyNewIAMRole
        
        Copy

        결과는 다음과 같아야 합니다.

        "AWS": "arn:aws:sts::987654321098:assumed-role/MyNewIAMRole/snowflake"
        
        Copy
      • <메서드_요청_ARN> 을 워크시트의 Method Request ARN 필드에 있는 값으로 바꿉니다. 이것은 리소스 POST 메서드의 ARN입니다.

        참고

        리소스를 메서드 요청 ARN으로 설정하면 API Gateway가 지정된 리소스에 대해서만 호출을 허용해야 하는 것으로 지정됩니다. 메서드 요청 ARN의 서브세트를 접두사로 지정할 수 있으므로, 똑같은 API Gateway에서 여러 리소스를 호출할 수 있습니다.

        예를 들어, 메서드 요청 ARN이 다음과 같은 경우에는

        arn:aws:execute-api:us-west-1:123456789012:a1b2c3d4e5/*/POST/MyResource
        
        Copy

        다음 접두사만 지정할 수 있습니다.

        arn:aws:execute-api:us-west-1:123456789012:a1b2c3d4e5/*
        
        Copy
      • 미국 정부 GovCloud 사용자만 해당:

        • aws-us-gov 를 사용하도록 메서드 요청 ARN을 업데이트합니다. 예:

          arn:aws-us-gov:execute-api:us-gov-west-1:123456789012:a1b2c3d4e5/*
          
          Copy
        • GovCloud 리전을 사용 중인지 확인합니다. 예: us-gov-west-1.

    • 프라이빗 엔드포인트:

      아래에 있는 리소스 정책 템플릿을 리소스 정책 편집기에 붙여넣은 다음, 아래에 설명한 대로 자리 표시자를 워크시트의 알맞은 값으로 바꿉니다.

      {
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:sts::<12-digit-number>:assumed-role/<external_function_role>/snowflake"
                  },
                  "Action": "execute-api:Invoke",
                  "Resource": "<method_request_ARN>",
                  "Condition": {
                      "StringEquals": {
                          "aws:sourceVpc": "<VPC_ID>"
                      }
                  }
              }
          ]
      }
      
      Copy

      리소스 정책의 다음 부분을 바꿉니다.

      • 리전 엔드포인트에 대해 위에서 설명한 대로 <12-digit-number>, <external_function_role>, <method_request_ARN> 을 바꿉니다.

      • <VPC_ID> 를 사용자 리전에 대한 Snowflake VPC ID로 바꾸고, 이를 워크시트의 Snowflake VPC ID 필드에 기록합니다.

      • 미국 정부 GovCloud 사용자만 해당:

        • aws-us-gov 를 사용하도록 메서드 요청 ARN을 업데이트합니다. 예:

          arn:aws-us-gov:execute-api:us-gov-west-1:123456789012:a1b2c3d4e5/*
          
          Copy
        • GovCloud 리전을 사용 중인지 확인합니다. 예: us-gov-west-1.

  6. Save 를 클릭하여 리소스 정책을 저장합니다.

  7. 업데이트된.API를 배포합니다. 이렇게 하려면 페이지 상단의 이동 경로에서 API 이름을 클릭하십시오. Actions 를 클릭한 다음 Deploy API 를 클릭합니다. 배포 스테이지를 선택하고 Deploy 를 클릭합니다.

다음 단계에서는 Snowflake API 통합 오브젝트를 만듭니다. 나중에 다시 돌아와야 하므로, 지금 AWS Management Console 윈도우를 닫지 마십시오.