5단계: 콘솔에서 프록시 서비스용 GCP 보안 정책 만들기

5단계: 콘솔에서 프록시 서비스용 GCP 보안 정책 만들기 (Step 5: Create a GCP security policy for the proxy service)

이전 단계에서 여러분은 올바른 Google Cloud API Gateway 엔드포인트를 아는 누구나 호출할 수 있는 Google Cloud Function을 만들었어요. 엔드포인트를 공개로 두지 않으려면 Google Cloud API Gateway에 보안 정책(security policy)을 만들어 보호해야 해요. 이 문서는 API 정의용 구성 파일에 맞춤형 securityDefinitions 섹션을 추가해서 API Gateway용 보안 정책을 만드는 방법을 안내합니다.

출처: Snowflake SQL Reference

본문

중요: Snowflake는 API Gateway에 대한 보안 정책을 만들 것을 강력히 권장해요. 이 단계를 마치면 오직 Snowflake만 API Gateway를 통해 여러분의 Cloud Function을 호출할 수 있게 됩니다.

이전 단계

4단계: Snowflake에서 GCP용 외부 함수를 만듭니다.

관련 Google 문서 링크

이 문서에서 설명하는 작업을 Google Cloud Console로 수행하는 방법에 대한 자세한 내용은 Google Cloud API Gateway 문서의 다음 항목을 참고하세요:

  • API 키로 접근 보안 유지하기 (Securing Access by Using an API Key)
  • API 키 테스트하기 (Testing Your API Key)

구성 파일 갱신하기 (Update the configuration file)

참고: 구성 파일의 이름은 추적 워크시트의 Configuration File Name 필드에 기록돼 있어요.

  • 구성 파일에 다음 securityDefinitions 섹션을 추가하거나 갱신하세요. 구성 파일의 schemes 섹션 바로 위, 같은 들여쓰기 수준에 추가합니다:
securityDefinitions:
 :
 authorizationUrl: ""
 flow: "implicit"
 type: "oauth2"
 x-google-issuer: ""
 x-google-jwks_uri: "https://www.googleapis.com/robot/v1/metadata/x509/"

섹션에서:

  • ``를 고유한 보안 정의 이름(예: snowflakeAccess01)으로 바꾸세요. 튜토리얼의 2단계(콘솔에서 프록시 서비스(Google Cloud API Gateway) 만들기)에서 임시 보안 정의를 이미 추가했다면 이미 되어 있을 거예요.
  • 또한 이 이름을 추적 워크시트의 Security Definition Name 필드에 기록하세요.
  • ``를 추적 워크시트의 API_GCP_SERVICE_ACCOUNT 필드 값으로 바꾸세요. 이 값을 구성 파일의 두 곳에 추가해야 해요:
    • x-google-issuer 필드
    • x-google-jwks_uri 필드(필드 끝에 이어 붙임)
  • 구성 파일의 post: 섹션을 갱신해서 위에서 만든 보안 정의를 참조하게 하세요. operationId 필드 아래에 다음을 추가합니다:
security:
 - : []

이것은 operationId 필드와 같은 들여쓰기 수준이어야 해요.

  • 아직 하지 않았다면 ``를 추적 워크시트의 Security Definition Name 필드 값으로 바꾸세요.
  • 위 예시처럼 보안 정의 이름 앞에 하이픈(-)과 공백을 반드시 포함하세요.
  • 콜론 뒤에 빈 대괄호([])를 반드시 포함하세요.

예를 들어:

security:
 - snowflakeAccess01: []
  • 구성 파일을 저장하세요.

갱신된 구성 파일은 대략 다음과 같아야 해요:

swagger: '2.0'
info:
 title: API Gateway config for Snowflake external function
 description: This configuration file connects the API Gateway resource to the remote service (Cloud Function).
 version: 1.0.0
securityDefinitions:
 snowflakeAccess01:
 authorizationUrl: ""
 flow: "implicit"
 type: "oauth2"
 x-google-issuer: ""
 x-google-jwks_uri: "https://www.googleapis.com/robot/v1/metadata/x509/"
schemes:
 - https
produces:
 - application/json
paths:
 /demo-func-resource:
 post:
 summary: Echo the input
 operationId: operationID
 security:
 - snowflakeAccess01: []
 x-google-backend:
 address: 
 protocol: h2
 responses:
 '200':
 description: 
 schema:
 type: string

갱신된 파일 다시 로드하기 (Reload the updated file)

구성 파일을 갱신한 뒤에는 Google Cloud Console에서 파일을 다시 로드해야 해요:

  • Gateways 페이지에서 게이트웨이 이름을 클릭하세요.
  • EDIT를 클릭하세요.
  • API Config 아래에서 Select a Config라는 제목의 상자를 클릭하세요.
  • Create new API config 옵션을 선택하세요.
  • Upload an API Spec이 있는 상자에서 BROWSE 버튼을 클릭하세요.
  • 이전에 만든 원하는 YAML 파일을 선택하세요. 확장자가 .yaml 또는 .yml인지 확인하세요.
  • 표시 이름(Display Name)을 입력하세요. 이전에 사용한 이름이 아닌 새롭고 고유한 이름을 사용하세요.
  • Select a Service Account를 요청받으면 App Engine default service account를 선택하세요. 프로덕션에서 사용할 함수를 만드는 경우(샘플이 아닌 경우) 다른 서비스 계정을 선택해도 돼요. 선택한 서비스 계정은 Google Cloud Function을 호출할 권한을 포함한 적절한 권한을 가져야 해요.
  • 이제 API 게이트웨이 페이지로 돌아와 있어야 해요. Config 필드에 이전 API 구성 파일의 표시 이름이 보인다면:
    • EDIT를 클릭하세요.
    • API Config 아래에서 Select a Config 상자를 다시 찾아 클릭하세요.
    • 새 API 구성을 선택하세요.
    • UPDATE 버튼을 클릭하세요. 그러면 API 게이트웨이 목록으로 돌아가요.

API Gateway가 갱신되는 동안 몇 분 기다려야 할 수 있어요. API 게이트웨이 이름 왼쪽에 게이트웨이가 새로고침 중임을 나타내는 아이콘이 표시될 수 있어요. 새로고침이 아직 진행 중인지 확인하려면 게이트웨이 이름 위의 REFRESH 버튼을 클릭하세요. 게이트웨이 이름 왼쪽의 아이콘이 사라지면 게이트웨이가 완전히 새로고침된 것이므로 다음 단계로 진행할 수 있어요.

외부 함수 테스트하기 (Test your external function)

새 보안 구성 파일로 외부 함수가 올바르게 동작하는지 확인하려면 외부 함수를 다시 호출해 보세요. 자세한 내용은 GCP용 외부 함수 호출하기(Calling an external function for GCP) 문서를 참고하세요.

다음 단계

없음. 이제 GCP용 외부 함수를 성공적으로 만들었어요.

더 알아보기 (Learn more)

  • 4단계: Snowflake에서 GCP용 외부 함수 만들기 (external-functions-creating-gcp-ui)
  • GCP용 외부 함수 만들기 (external-functions-creating-gcp-ui)
  • GCP용 외부 함수 문제 해결 (external-functions-creating-gcp-troubleshooting)
  • 원격 서비스 입출력 데이터 형식 (external-functions-data-format)