Memindai paket Go secara manual

On-Demand Scanning API memungkinkan Anda memindai image yang disimpan secara lokal di komputer Anda, atau dari jarak jauh di Artifact Registry atau Container Registry. Anda dapat menggunakan Pemindaian On-Demand untuk memindai image di pipeline CI/CD Anda, untuk kerentanan sistem dan kerentanan paket Go sebelum memutuskan apakah akan menyimpannya di registry atau tidak. Lihat halaman Harga untuk mengetahui informasi harga.

Halaman ini menjelaskan cara memindai image container secara manual untuk menemukan kerentanan sistem dan kerentanan paket Go.

Sebelum memulai

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the On-Demand Scanning API.

    Enable the API

  5. Install the Google Cloud CLI.

  6. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  7. To initialize the gcloud CLI, run the following command:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  9. Make sure that billing is enabled for your Google Cloud project.

  10. Enable the On-Demand Scanning API.

    Enable the API

  11. Install the Google Cloud CLI.

  12. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  13. To initialize the gcloud CLI, run the following command:

    gcloud init
  14. Menambahkan komponen local-extract ke penginstalan Google Cloud CLI

    Menggunakan Pengelola Komponen Google Cloud CLI

    Pengelola komponen akan meminta Anda menginstal komponen yang diperlukan saat pertama kali Anda menjalankan perintah pemindaian.

    Menggunakan pengelola paket sistem Anda

    • Untuk Debian/Ubuntu:
      sudo apt install google-cloud-sdk-local-extract
          
    • Untuk Red Hat/Fedora/CentOS:
      sudo dnf install google-cloud-sdk-local-extract
          

      Atau, Anda dapat mengganti dnf dengan yum di perintah sebelumnya.

  15. Berikan peran IAM Admin Pemindaian Sesuai Permintaan kepada pengguna atau akun layanan yang akan Anda gunakan dengan Pemindaian Sesuai Permintaan. Jika Anda menggunakan akun pemilik project untuk menjalankan pemindaian, Anda dapat melewati langkah ini.
  16. Memindai image container

    • Pemindaian lokal:

      gcloud artifacts docker images scan IMAGE_URI \
          [--location=(us,europe,asia)] [--async]
      

      Untuk gambar lokal, gunakan salah satu format berikut untuk IMAGE_URI:

      • REPOSITORY:TAG
      • REPOSITORY
    • Pemindaian jarak jauh:

      gcloud artifacts docker images scan IMAGE_URI \
          --remote [--location=(us,europe,asia)] [--async]
      

      Untuk gambar jarak jauh, gunakan salah satu format berikut untuk IMAGE_URI:

      • HOSTNAME/PROJECT_ID/REPOSITORY_ID/IMAGE_ID@sha256:HASH
      • HOSTNAME/PROJECT_ID/REPOSITORY_ID/IMAGE_ID:HASH
      • HOSTNAME/PROJECT_ID/REPOSITORY_ID/IMAGE_ID
      • HOSTNAME/PROJECT_ID/IMAGE_ID@sha256:HASH
      • HOSTNAME/PROJECT_ID/IMAGE_ID:HASH
      • HOSTNAME/PROJECT_ID/IMAGE_ID

      Untuk image di Artifact Registry, IMAGE_URI harus menyertakan REPOSITORY_ID.

    Untuk pemindaian lokal dan jarak jauh, Anda dapat menggunakan flag opsional berikut:

    • --location adalah tanda opsional untuk memilih multi-region secara manual tempat pemindaian dilakukan. Memilih multi-region yang lebih dekat dengan lokasi fisik Anda akan meminimalkan latensi. Lokasi yang tersedia adalah: us, europe, dan asia. Lokasi defaultnya adalah us.

    • --async adalah tanda opsional untuk menjalankan proses pemindaian secara asinkron. Jika Anda menghilangkan tanda ini, terminal Anda akan diblokir hingga proses pemindaian selesai.

    Pemindaian sinkron

    Contoh berikut menunjukkan output pemindaian sinkron, tanpa tanda --async:

    $ gcloud artifacts docker images scan golang:1.17.6-alpine
    
    ✓ Scanning container image
      ✓ Locally extracting packages and versions from local container image
      ✓ Remotely initiating analysis of packages and versions
      ✓ Waiting for analysis operation to complete [projects/my-project/locations/us/operations/87d2e137-1d1c-4790-8e5e-daf6c96ae7d7]
    Done.
    done: true
    metadata:
      '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata
      createTime: '2022-01-11T16:58:11.711487Z'
      resourceUri: golang:1.16.13-alpine
    name: projects/my-project/locations/us/operations/87d2e137-1d1c-4790-8e5e-daf6c96ae7d7
    response:
      '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesResponse
      scan: projects/my-project/locations/us/scans/2fe2bfb8-f0c5-4dd6-a8c8-38961869767a
    

    Gunakan nama pemindaian untuk mengambil hasil kerentanan. Nama pemindaian adalah nilai scan di baris terakhir pesan output.

    Pemindaian asinkron

    Contoh berikut menunjukkan output dari pemindaian asinkron:

    $ gcloud artifacts docker images scan golang:1.17.6-alpine --async
    
    ✓ Scanning container image
      ✓ Locally extracting packages and versions from local container image
      ✓ Remotely initiating analysis of packages and versions
    Done.
    Check operation [projects/my-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16] for status.
    metadata:
      '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata
      createTime: '2022-01-11T16:58:11.711487Z'
      resourceUri: golang:1.16.13-alpine
    name: projects/my-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16
    

    Tindakan ini meluncurkan operasi yang berjalan lama dan menampilkan ID-nya tanpa memblokir terminal Anda. Gunakan ID operasi, nilai name di baris terakhir pesan output, untuk melakukan polling pada operasi.

    Polling operasi yang berjalan lama

    Gunakan ID operasi dari output perintah pemindaian asinkron untuk memeriksa status operasi:

    gcloud artifacts docker images get-operation LRO_ID
    

    Dengan LRO_ID adalah ID operasi yang berjalan lama.

    Melanjutkan contoh bagian pemindaian asinkron, untuk memeriksa status operasi:

    $ gcloud artifacts docker images get-operation \
      projects/my-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16
    
    done: true
    metadata:
      '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata
      createTime: '2022-01-11T16:58:11.711487Z'
      resourceUri: golang:1.16.13-alpine
    name: projects/my-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16
    response:
      '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesResponse
      scan: projects/my-project/locations/us/scans/2fe2bfb8-f0c5-4dd6-a8c8-38961869767a
    

    Jika output menyertakan baris done: true, operasi pemindaian telah selesai. Gunakan nama pemindaian untuk mengambil hasil kerentanan. Nama tersebut adalah nilai scan di baris terakhir pesan output.

    Mengambil hasil pemindaian

    Untuk mengambil hasil pemindaian setelah operasi pemindaian selesai, gunakan perintah berikut:

    gcloud artifacts docker images list-vulnerabilities SCAN_NAME [--limit=X]
    

    Dengan:

    Contoh:

    createTime: '2022-01-11T16:58:11.972043Z'
    kind: VULNERABILITY
    name: projects/my-project/locations/us/occurrences/0c607d9b-aff4-4cde-86b7-e2c0a865aadd
    noteName: projects/goog-vulnz/notes/CVE-2021-38297
    resourceUri: golang:1.16.13-alpine
    updateTime: '2022-01-11T16:58:11.972043Z'
    vulnerability:
      cvssScore: 7.5
      effectiveSeverity: CRITICAL
      longDescription: Go before 1.16.9 and 1.17.x before 1.17.2 has a Buffer Overflow
        via large arguments in a function invocation from a WASM module, when GOARCH=wasm
        GOOS=js is used.
      packageIssue:
      - affectedCpeUri: cpe:/o:alpine:alpine_linux:3.15
        affectedPackage: go
        affectedVersion:
          fullName: 1.16.13
          kind: NORMAL
          name: 1.16.13
        effectiveSeverity: CRITICAL
        fixedCpeUri: cpe:/o:alpine:alpine_linux:3.15
        fixedPackage: go
        fixedVersion:
          fullName: 1.17.2
          kind: NORMAL
          name: 1.17.2
        packageType: GO_STDLIB
      relatedUrls:
      - label: More Info
        url: https://security-tracker.debian.org/tracker/CVE-2021-38297
      - label: More Info
        url: https://access.redhat.com/security/cve/CVE-2021-38297
      - label: More Info
        url: https://nvd.nist.gov/vuln/detail/CVE-2021-38297
      severity: HIGH
      shortDescription: CVE-2021-38297
    

    Output perintah ini adalah daftar kemunculan dalam format Grafeas. Dalam hal ini, satu kerentanan tingkat tinggi yang ditemukan dalam gambar akan ditampilkan.

    Pemindaian Sesuai Permintaan mengidentifikasi dua jenis kerentanan paket Go:

    • packageType:GO_STDLIB. Kerentanan library standar Go. Hal ini menunjukkan bahwa kerentanan ditemukan di toolchain Go yang digunakan untuk membuat kode biner, atau di library standar yang disertakan dengan toolchain. Kemungkinan perbaikannya adalah mengupgrade toolchain build Anda.

    • packageType:GO. Kerentanan paket Go. Hal ini menunjukkan bahwa kerentanan ditemukan dalam paket pihak ketiga. Kemungkinan perbaikannya adalah mengupgrade modul dependen Anda.

    Hasil pemindaian tersedia selama 48 jam setelah operasi pemindaian selesai.

    Langkah berikutnya