Membuat pengautentikasi menggunakan konsol Google Cloud

Halaman ini menjelaskan cara membuat pengautentikasi kustom di Otorisasi Biner dengan menggunakan konsol Google Cloud. Atau, Anda juga dapat melakukan langkah-langkah ini menggunakan Google Cloud CLI, atau REST API. Tugas ini merupakan bagian dari menyiapkan Otorisasi Biner.

Pengguna Cloud Build: Anda dapat menggunakan pengautentikasi built-by-cloud-build untuk hanya men-deploy image yang dibuat oleh Cloud Build.

Sebelum memulai

Sebelum membuat pengautentikasi, lakukan hal berikut:

  1. Aktifkan Otorisasi Biner.

  2. Siapkan Otorisasi Biner untuk platform Anda.

Ringkasan

Pemberi pengesahan adalah resource Google Cloud yang digunakan Otorisasi Biner untuk memverifikasi pengesahan. Untuk mempelajari Otorisasi Biner lebih lanjut, lihat ringkasan Otorisasi Biner.

Untuk membuat pengautentikasi, lakukan hal berikut:

  • Siapkan pasangan kunci yang dapat digunakan untuk menandatangani image terlebih dahulu, membuat pengesahan, lalu memverifikasi image, saat di-deploy. Pasangan kunci PKIX adalah pasangan kunci yang dihasilkan oleh Cloud Key Management Service (Cloud KMS) dalam format yang kompatibel dengan PKIX.
  • Buat pengautentikasi itu sendiri di Otorisasi Biner dan kaitkan kunci publik yang Anda buat

Dalam penyiapan satu project, Anda membuat pengautentikasi di project yang sama saat mengonfigurasi kebijakan Otorisasi Biner. Dalam penyiapan multi-project, Anda kemungkinan besar memiliki project deployer tempat kebijakan Anda dikonfigurasi dan project attestor terpisah tempat attestor Anda disimpan.

Menyiapkan kunci kriptografis

Otorisasi Biner memungkinkan Anda menggunakan kunci PKIX untuk menandatangani image dengan aman, lalu memverifikasinya nanti. Hal ini memastikan bahwa hanya pihak yang terverifikasi yang dapat memberikan otorisasi pada image container. Untuk menggunakan pengesahan, Anda menyiapkan kunci asimetris, seperti kunci Infrastruktur Kunci Publik (X.509) (PKIX), untuk memverifikasi identitas penegasnya dengan aman. Saat image di-deploy, Otorisasi Biner akan memeriksa pengesahan image, yang ditandatangani dengan kunci pribadi, menggunakan kunci publik di pengesah.

Dalam panduan ini, Elliptic Curve Digital Signature Algorithm (ECDSA) yang direkomendasikan digunakan untuk menghasilkan pasangan kunci PKIX. Anda juga dapat menggunakan kunci RSA atau PGP untuk menandatangani. Lihat Tujuan utama dan algoritma untuk mengetahui informasi selengkapnya tentang algoritma penandatanganan.

Membuat pasangan kunci PKIX

Otorisasi Biner memungkinkan Anda menggunakan pasangan kunci PKIX asimetris untuk menandatangani dan memverifikasi image.

Pasangan kunci PKIX terdiri dari kunci pribadi, yang digunakan penanda tangan untuk menandatangani pengesahan secara digital, dan kunci publik, yang Anda tambahkan ke pengautentikasi. Pada waktu deployment, Otorisasi Biner menggunakan kunci publik ini untuk memverifikasi pengesahan yang ditandatangani oleh kunci pribadi.

Pasangan kunci asimetris yang dihasilkan dan disimpan di Cloud KMS mematuhi format PKIX. Untuk membuat kunci Cloud KMS yang akan digunakan dengan Otorisasi Biner, lihat Membuat Kunci Asimetris. Pastikan Anda memilih Asymmetric Sign sebagai tujuan kunci saat membuat kunci.

PKIX (Cloud KMS)

Untuk membuat pasangan kunci di Cloud KMS, lakukan hal berikut:

  1. Siapkan variabel lingkungan yang diperlukan untuk membuat pasangan kunci.

    KMS_KEY_PROJECT_ID=${PROJECT_ID}
    KMS_KEYRING_NAME=my-binauthz-keyring
    KMS_KEY_NAME=my-binauthz-kms-key-name
    KMS_KEY_LOCATION=global
    KMS_KEY_PURPOSE=asymmetric-signing
    KMS_KEY_ALGORITHM=ec-sign-p256-sha256
    KMS_PROTECTION_LEVEL=software
    KMS_KEY_VERSION=1
    
  2. Buat keyring.

    gcloud kms keyrings create ${KMS_KEYRING_NAME} \
      --location ${KMS_KEY_LOCATION}
    
  3. Buat kunci:

    gcloud kms keys create ${KMS_KEY_NAME} \
      --location ${KMS_KEY_LOCATION} \
      --keyring ${KMS_KEYRING_NAME}  \
      --purpose ${KMS_KEY_PURPOSE} \
      --default-algorithm ${KMS_KEY_ALGORITHM} \
      --protection-level ${KMS_PROTECTION_LEVEL}
    

PKIX (kunci lokal)

Untuk membuat pasangan kunci PKIX asimetris lokal baru dan menyimpannya dalam file, lakukan hal berikut:

  1. Buat kunci:

    PRIVATE_KEY_FILE="/tmp/ec_private.pem"
    openssl ecparam -genkey -name prime256v1 -noout -out ${PRIVATE_KEY_FILE}
    
  2. Karena file ini berisi kunci publik dan pribadi secara bersamaan, Anda perlu mengekstrak kunci publik ke dalam file terpisah agar dapat menambahkannya ke penanda tangan:

    PUBLIC_KEY_FILE="/tmp/ec_public.pem"
    openssl ec -in ${PRIVATE_KEY_FILE} -pubout -out ${PUBLIC_KEY_FILE}
    

Membuat attestor

Langkah berikutnya adalah membuat pengautentikasi itu sendiri dan mengaitkan catatan Analisis Artefak dan kunci publik.

Otorisasi Biner menggunakan Analisis Artefak untuk menyimpan metadata tepercaya yang digunakan dalam proses otorisasi. Untuk setiap pengautentikasi yang Anda buat, Anda harus membuat satu catatan Analisis Artefak. Setiap pernyataan disimpan sebagai kemunculan catatan ini.

Untuk membuat attestor:

  1. Buka halaman Otorisasi Biner untuk project pengesahan.

    Buka Otorisasi Biner

  2. Di tab Attestors, klik Create.

  3. Klik Create New Attestor.

  4. Di Nama Pengesah, masukkan nama untuk pengesah (misalnya, build-secure atau prod-qa).

  5. Untuk menambahkan kunci publik ke attestor, lakukan tindakan berikut:

    PKIX (kunci lokal)

    1. Klik Tambahkan Kunci PKIX.
    2. Klik Impor dari file.
    3. Buka dan pilih file kunci PKIX yang telah Anda simpan sebelumnya. Catatan: Anda juga dapat menempelkan kunci publik dalam format PEM.
    4. Pilih Signature algorithm. Contoh kunci dalam panduan ini dibuat dengan algoritma Elliptic Curve P256 - SHA Digest.

    PKIX (Cloud KMS)

    1. Klik Tambahkan Kunci PKIX.
    2. Klik Impor dari Cloud KMS.
    3. Masukkan ID resource untuk versi kunci di jendela yang terbuka. Format untuk ID resource adalah:

      projects/KMS_KEY_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/KMS_KEYRING_NAME/cryptoKeys/KMS_KEY_NAME/cryptoKeyVersions/KMS_KEY_VERSION
      

      dengan:

      • KMS_KEY_PROJECT_ID adalah ID project tempat kunci disimpan
      • KMS_KEY_LOCATION adalah lokasi kunci (global adalah default)
      • KMS_KEYRING_NAME adalah nama key ring
      • KMS_KEY_NAME adalah nama kunci
      • KMS_KEY_VERSION adalah versi kunci

      Jika Anda membuat pasangan kunci Cloud KMS menggunakan contoh variabel lingkungan di halaman ini, Anda dapat melihat ID resource dengan perintah berikut:

      echo projects/${KMS_KEY_PROJECT_ID}/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME}/cryptoKeyVersions/${KMS_KEY_VERSION}
      
    4. Klik Kirim.

  6. Jika Anda ingin menggunakan catatan yang sudah ada dan sebelumnya Anda buat, luaskan bagian Setelan Lanjutan.

    1. Batalkan pilihan Buat catatan Analisis Artefak secara otomatis.

    2. Masukkan nama yang sepenuhnya memenuhi syarat di kolom Artifact Analysis Note ID. Nama tersebut memiliki format projects/PROJECT_ID/notes/NOTE_ID.

  7. Klik Create.

Memverifikasi bahwa attestor telah dibuat

Untuk memverifikasi bahwa attestor telah dibuat:

  1. Kembali ke halaman Otorisasi Biner di konsol Google Cloud.

  2. Buka tab Attesters.

Penyiapan multi-project

Jika Anda menggunakan penyiapan multi-project, dengan project deployer dan project attestor terpisah, ada izin tambahan yang perlu ditetapkan pada resource attestor agar project deployer dapat menggunakan pengesahan yang dibuat olehnya selama deployment.

Menambahkan binding peran IAM untuk project deployer

Anda harus menambahkan binding peran IAM untuk akun layanan project deployer ke penanda tangan. Ini digunakan oleh Otorisasi Biner saat mengevaluasi kebijakan untuk menentukan apakah akun memiliki izin untuk mengakses pengesah.

Anda harus menambahkan binding peran IAM dari command line, karena langkah ini tidak didukung di konsol Google Cloud.

Untuk menambahkan binding peran IAM:

  1. Siapkan variabel lingkungan untuk menyimpan nama dan nomor project Anda.

    DEPLOYER_PROJECT_ID=PROJECT_ID
    DEPLOYER_PROJECT_NUMBER="$(
        gcloud projects describe "${DEPLOYER_PROJECT_ID}" \
          --format="value(projectNumber)"
    )"
    
  2. Siapkan variabel lingkungan untuk menyimpan nama akun layanan untuk project:

    DEPLOYER_SERVICE_ACCOUNT="service-${DEPLOYER_PROJECT_NUMBER}@gcp-sa-binaryauthorization."
    
  3. Tambahkan binding peran IAM:

    gcloud --project ATTESTOR_PROJECT_ID \
        beta container binauthz attestors add-iam-policy-binding \
        "projects/ATTESTOR_PROJECT_ID/attestors/ATTESTOR" \
        --member="serviceAccount:${DEPLOYER_SERVICE_ACCOUNT}" \
        --role=roles/binaryauthorization.attestorsVerifier
    

Menambahkan binding peran IAM untuk pengguna yang menyiapkan Otorisasi Biner

Anda harus menambahkan binding peran IAM untuk pengguna yang menambahkan pengautentikasi ke kebijakan Otorisasi Biner di project deployer, karena pengguna harus memiliki izin untuk melihat pengautentikasi yang akan ditambahkan. Jika diinginkan, izin ini dapat dicabut dengan aman setelah pengautentikasi ditambahkan.

Anda juga harus menambahkan binding peran IAM dari command line, karena langkah ini tidak didukung di konsol Google Cloud.

Untuk menambahkan binding peran IAM:

gcloud --project ATTESTOR_PROJECT_ID \
    beta container binauthz attestors add-iam-policy-binding \
    "projects/ATTESTOR_PROJECT_ID/attestors/ATTESTOR" \
    --member=ADMIN_EMAIL_ACCOUNT \
    --role=roles/binaryauthorization.attestorsViewer

Untuk menghapus binding peran IAM setelah pengautentikasi ditambahkan:

gcloud --project ATTESTOR_PROJECT_ID \
    beta container binauthz attestors remove-iam-policy-binding \
    "projects/ATTESTOR_PROJECT_ID/attestors/ATTESTOR" \
    --member=ADMIN_EMAIL_ACCOUNT \
    --role=roles/binaryauthorization.attestorsViewer

Langkah selanjutnya