Menggunakan Kunci API

Halaman ini menjelaskan cara menggunakan kunci API di API Gateway.

Kunci API adalah string yang mengidentifikasi project untuk tujuan kuota, penagihan, dan pemantauan.Google Cloud Developer membuat kunci API di project di konsol Google Cloud . Kemudian, mereka menyematkan kunci tersebut di setiap panggilan ke API Anda sebagai parameter kueri atau di header permintaan.

Jika Anda menentukan persyaratan kunci API dalam konfigurasi API, API Gateway akan menggunakan kunci API untuk mencari project terkait. Google Cloud API Gateway menolak permintaan kecuali jika kunci API dibuat di project Google Cloud Anda atau dalam projectGoogle Cloud lain tempat API Anda telah diaktifkan.

Untuk membuat kunci API, atau melihat kunci API yang sudah tersedia dalam project Google Cloud Anda, buka halaman APIs & Services > Credentials.

Buka Kredensial

Menggunakan kunci API

Untuk menggunakan fitur API Gateway seperti kuota, Anda dapat meneruskan kunci API agar API Gateway dapat mengidentifikasi Google Cloud project yang terkait dengan aplikasi klien.

Mengonfigurasi autentikasi kunci API untuk API Gateway

Untuk mengamankan akses ke gateway menggunakan kunci API:

  1. Aktifkan dukungan kunci API untuk layanan Anda. Masukkan perintah berikut, dengan:
    • MANAGED_SERVICE_NAME menentukan nama layanan terkelola yang dibuat saat Anda men-deploy API. Hal ini dapat dilihat di properti Managed Service yang tercantum dengan perintah gcloud api-gateway apis describe.
    • PROJECT_ID menentukan nama project Google Cloud Anda.
    gcloud services enable MANAGED_SERVICE_NAME.apigateway.PROJECT_ID.cloud.goog
    Contoh:
    gcloud services enable my-api-123abc456def1.apigateway.my-project.cloud.goog
  2. Ubah spesifikasi OpenAPI yang digunakan untuk membuat konfigurasi API Anda agar menyertakan petunjuk untuk menerapkan kebijakan keamanan validasi kunci API pada semua traffic. Tambahkan jenis security dan securityDefinitions atau securitySchemes seperti yang ditunjukkan:

    OpenAPI 2.0

      # openapi2-functions.yaml
      swagger: '2.0'
      info:
        title: API_ID optional-string
        description: Sample API on API Gateway with a Google Cloud Functions backend
        version: 1.0.0
      schemes:
        - https
      produces:
        - application/json
      paths:
        /hello:
          get:
            summary: Greet a user
            operationId: hello
            x-google-backend:
              address: https://GCP_REGION-PROJECT_ID.cloudfunctions.net/helloGET
            security:
            - api_key: []
            responses:
              '200':
                description: A successful response
                schema:
                  type: string
      securityDefinitions:
        # This section configures basic authentication with an API key.
        api_key:
          type: "apiKey"
          name: "key"
          in: "query"

    securityDefinition mengonfigurasi API Anda agar memerlukan kunci API yang diteruskan sebagai parameter kueri bernama key saat meminta akses ke semua jalur yang ditentukan dalam spesifikasi.

    OpenAPI 3.x

    # openapi-functions.yaml
    openapi: 3.0.4
    info:
      title: API_ID optional-string
      description: Sample API on API Gateway with a Google Cloud Functions backend
      version: 1.0.0
    # Define reusable components in x-google-api-management
    x-google-api-management:
      backend:
        functions_backend:
          address: https://GATEWAY_LOCATION-PROJECT_ID.cloudfunctions.net/helloGET
          pathTranslation: APPEND_PATH_TO_ADDRESS
          protocol: "http/1.1"
    # Apply the backend configuration by referencing it by name. Set at the root so this applies to all operations unless overridden.
    x-google-backend: functions_backend
    components:
    # This section configures basic authentication with an API key.
      securitySchemes:
        google_api_key:
          type: apiKey
          name: x-api-key
          in: header
    security:
      - google_api_key: []
    paths:
      /hello:
        get:
          summary: Greet a user
          operationId: hello
          responses:
            '200':
              description: A successful response
              content:
                application/json:
                  schema:
                    type: string

    securitySchemes mengonfigurasi API Anda agar memerlukan kunci API yang diteruskan sebagai parameter kueri bernama key saat meminta akses ke semua jalur yang ditentukan dalam spesifikasi.

  3. Buat konfigurasi API baru dengan deskripsi OpenAPI yang diubah menggunakan perintah berikut:
    gcloud api-gateway api-configs create NEW_CONFIG_ID \
    --api=API_ID --openapi-spec=NEW_API_DEFINITION \
    --project=PROJECT_ID --backend-auth-service-account=SERVICE_ACCOUNT_EMAIL
    Contoh:
    gcloud api-gateway api-configs create my-config-key \
      --api=my-api --openapi-spec=openapi-functions.yaml \
      --project=my-project --backend-auth-service-account=0000000000000compute@developer.gserviceaccount.com
  4. Jalankan perintah berikut untuk mengupdate gateway yang ada dengan konfigurasi API baru:
    gcloud api-gateway gateways update GATEWAY_ID \
      --api=API_ID --api-config=NEW_CONFIG_ID \
      --location=GATEWAY_LOCATION --project=PROJECT_ID
    Contoh:
    gcloud api-gateway gateways update my-gateway \
      --api=my-api --api-config=my-config-key \
      --location=us-central1 --project=my-project

Membatasi kunci API

Secara default, kunci API tidak dibatasi, sehingga rentan terhadap penggunaan tanpa izin. Tambahkan pembatasan API jika memungkinkan. Pembatasan API menentukan API mana yang dapat dipanggil menggunakan kunci API. Semua kunci API yang digunakan oleh aplikasi produksi harus memiliki batasan API.

Untuk menambahkan pembatasan API:

  1. Temukan judul API seperti yang tercantum dalam Konfigurasi API Anda. Dalam contoh berikut, judul API adalah My Example Config:

    OpenAPI 2.0

    # openapi.yaml
    swagger: '2.0'
    info:
      title: My Example Config
      description: Sample API on API Gateway
      version: 1.0.0
    ...

    OpenAPI 3.x

    # openapi.yaml
    openapi: 3.0.4
    info:
      title: My Example Config
      description: Sample API on API Gateway
      version: 1.0.0
    ...

  2. Di konsol Google Cloud , buka halaman APIs & Services > Credentials.

    Buka Kredensial

  3. Pilih nama kunci API yang ingin Anda gunakan untuk API Anda.

  4. Di bagian API restrictions pada halaman detail kunci API, klik Restrict key.

  5. Pilih API yang akan digunakan oleh kunci API Anda dari menu drop-down daftar API yang tersedia. Misalnya, pilih My Example Config.

  6. Klik Simpan.

Pembatasan Anda akan segera berlaku.