ステップ5: プロキシサービス(Google Cloud API Gateway)のセキュリティポリシーを設定する

これらの手順は、Google Cloud API Gatewayでセキュリティポリシーを設定する方法を示しています。

前のステップでは、正しいGoogle Cloud API Gatewayエンドポイントのある人であれば誰でも呼び出すことができる、Google Cloud関数を作成します。エンドポイントを一般に公開する場合を除いて、 API 定義の構成ファイルにカスタマイズされた securityDefinitions セクションを追加してエンドポイントを保護する必要があります。

このトピックの内容:

構成ファイルを更新する

構成ファイルの名前は、ワークシートの「Configuration File Name」フィールドに記録されます。以下の手順は、構成ファイルに securityDefinitions セクションを追加する方法を示しています。これが追加、カスタマイズ、ロード、および表示された後、Snowflakeのみが API Gatewayを介してCloud Functionを呼び出すことができます。

  1. 次の securityDefinitions セクションを構成ファイルに追加します。これを構成ファイルの schemes: セクションのすぐ上に、同じインデントレベルで追加します。

    securityDefinitions:
      <security-def-name>:
        authorizationUrl: ""
        flow: "implicit"
        type: "oauth2"
        x-google-issuer: "<gmail service account>"
        x-google-jwks_uri: "https://www.googleapis.com/robot/v1/metadata/x509/<gmail service account>"
    
  2. <security-def-name> を一意のセキュリティ定義名(例: snowflakeAccess01)に置き換えます。

  3. この名前をワークシートの「Security Definition Name」フィールドに記録します。

  4. <gmail service account> をワークシートの「API_GCP_SERVICE_ACCOUNT」フィールドにある値に置き換えます。構成ファイルの2つのフィールドに変更を加えます。

    1. x-google-issuer フィールド。

    2. x-google-jwks_uri フィールドの終わり。

  5. 上記で作成したセキュリティ定義を参照するように、構成ファイルの post: セクションを更新します。

    1. operationId フィールドの下に、次を追加します。

      security:
        - <security-def-name>: []
      

      これは、 operationId フィールドと同じレベルでインデントする必要があります。

      <security-def-name> をワークシートの「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: "<API_GCP_SERVICE_ACCOUNT>"
          x-google-jwks_uri: "https://www.googleapis.com/robot/v1/metadata/x509/<API_GCP_SERVICE_ACCOUNT>"
      schemes:
        - https
      produces:
        - application/json
      paths:
        /demo-func-resource:
          post:
            summary: Echo the input
            operationId: operationID
            security:
              - snowflakeAccess01: []
            x-google-backend:
              address: <Cloud Function Trigger URL>
              protocol: h2
            responses:
              '200':
                description: <DESCRIPTION>
                schema:
                  type: string
      
  6. 構成ファイルを保存します。

更新された構成ファイルをリロードする

  1. Gateways ページで、ゲートウェイの名前をクリックします。

  2. EDIT をクリックします。

  3. API Config の下で、 Select a Config というタイトルのボックスをクリックします。

  4. オプション Create new API config を選択します。

  5. Upload an API Spec が含まれているボックスで、 BROWSE ボタンをクリックします。

  6. 前に作成した目的の YAML ファイルを選択します。拡張子が「.yaml」または「.yml」であることを確認します。

  7. Display Name を入力します。以前に使用した名前ではなく、新しい一意の名前を使用します。

  8. Select a Service Account を求められた場合は、 App Engine default service account を選択します。

    実稼働環境(サンプルとしてではなく)で使用する関数を作成している場合は、別のサービスアカウントを選択することもできます。

    選択したサービスアカウントには、Google Cloud Functionを呼び出す権限などの適切な権限が必要です。

  9. これで、 API Gatewayのページに戻るはずです。Config フィールドに古い API Configファイルの表示名が表示されている場合は、次のようにします。

    1. EDIT をクリックします。

    2. API Config の下で、もう一度 Select a Config ボックスを見つけて、ボックスをクリックします。

    3. 新しい API Configを選択します。

    4. UPDATE ボタンをクリックします。

      これにより、 API Gatewayのリストに戻ります。

    5. API Gatewayが更新されるまでに数分を必要とする場合があります。

      API Gateway名の左側に、Gatewayが更新されていることを示すアイコンが表示される場合があります。

      Gateway名の上にある REFRESH ボタンをクリックして、更新がまだ進行中であるかどうかを確認できます。Gateway名の左側にあるアイコンが消えたら、

      Gatewayを包括的に更新する必要があります。そうすると、次のステップに進むことができます。

  10. 外部関数が新しいセキュリティ構成ファイルで正しく機能することを確認するには、外部関数を再度呼び出します。詳細については、 GCP 用の外部関数の呼び出し をご参照ください。