Halaman ini menjelaskan cara membuat attestor di Otorisasi Biner menggunakan Google Cloud CLI. Sebagai alternatif, Anda dapat melakukan langkah-langkah ini menggunakan Google Cloud console atau REST API. Tugas ini adalah bagian dari menyiapkan Otorisasi Biner.
Sebagai pengguna Cloud Build, Anda dapat menggunakan attestor built-by-cloud-build untuk men-deploy hanya image yang dibuat oleh Cloud Build.
Attestor adalah resourceGoogle Cloud yang digunakan Otorisasi Biner untuk memverifikasi pengesahan. Untuk mempelajari lebih lanjut pengesahan, lihat Ringkasan Otorisasi Biner.
Untuk membuat attestor, lakukan hal berikut:
- Buat catatan di Artifact Analysis untuk menyimpan metadata tepercaya yang digunakan dalam proses pengesahan.
- Siapkan pasangan kunci Public-Key Infrastructure (X.509) (PKIX) yang dapat digunakan untuk memverifikasi identitas attestor. (Pasangan kunci asimetris yang dihasilkan oleh Cloud Key Management Service (Cloud KMS) dalam format yang kompatibel dengan PKIX.)
- Buat attestor itu sendiri di Otorisasi Biner, lalu kaitkan catatan dan kunci publik yang Anda buat.
Dalam penyiapan satu project, Anda membuat attestor di project Google Cloud yang sama tempat Anda mengonfigurasi kebijakan Otorisasi Biner. Untuk tutorial menyeluruh dan satu project yang mencakup langkah-langkah ini, lihat Mulai menggunakan Google Cloud CLI atau Mulai menggunakan konsol Google Cloud .
Dalam penyiapan multi-project, sebaiknya Anda memiliki project terpisah: project deployer, tempat kebijakan Anda dikonfigurasi; project attestor, tempat attestor Anda disimpan; dan project pengesahan untuk pengesahan. Untuk tutorial multi-project menyeluruh yang mencakup langkah-langkah ini, lihat penyiapan multi-project.
Sebelum memulai
Sebelum membuat attestor, lakukan hal berikut:
Menyiapkan lingkungan project
Di bagian ini, Anda akan menyiapkan variabel lingkungan.
Siapkan variabel lingkungan untuk menyimpan nama dan nomor project Anda. Jika project attestor dan deployer Anda adalah project yang sama, gunakan project ID yang sama untuk kedua variabel.
DEPLOYER_PROJECT_ID=DEPLOYER_PROJECT_ID=
DEPLOYER_PROJECT_NUMBER="$(
gcloud projects describe "${DEPLOYER_PROJECT_ID}" \
--format="value(projectNumber)"
)"
ATTESTOR_PROJECT_ID=ATTESTOR_PROJECT_ID
ATTESTOR_PROJECT_NUMBER="$(
gcloud projects describe "${ATTESTOR_PROJECT_ID}" \
--format="value(projectNumber)"
)"
Anda juga harus mendapatkan nama akun layanan untuk project:
DEPLOYER_SERVICE_ACCOUNT="service-${DEPLOYER_PROJECT_NUMBER}@gcp-sa-binaryauthorization."
ATTESTOR_SERVICE_ACCOUNT="service-${ATTESTOR_PROJECT_NUMBER}@gcp-sa-binaryauthorization."
Membuat catatan Artifact Analysis
Otorisasi Biner menggunakan Artifact Analysis untuk menyimpan metadata tepercaya yang digunakan dalam proses otorisasi. Untuk setiap attestor yang Anda buat, Anda harus membuat satu catatan Artifact Analysis. Setiap pengesahan disimpan sebagai kemunculan catatan ini.
Untuk membuat catatan, ikuti langkah-langkah berikut:
Siapkan variabel lingkungan untuk menyimpan ID catatan dan deskripsi yang dapat dibaca manusia:
NOTE_ID=NOTE_ID NOTE_URI="projects/${ATTESTOR_PROJECT_ID}/notes/${NOTE_ID}" DESCRIPTION=DESCRIPTIONGanti kode berikut:
NOTE_ID: nama internal catatan dalam karakter alfanumerik tanpa spasi—misalnya,test-attestor-noteNOTE_URI: jalur yang sepenuhnya memenuhi syarat ke resource catatanDESCRIPTION: nama tampilan yang dapat dibaca manusia untuk catatan—misalnya,Test Attestor Note
Buat file JSON yang mendeskripsikan catatan:
cat > /tmp/note_payload.json << EOF { "name": "${NOTE_URI}", "attestation": { "hint": { "human_readable_name": "${DESCRIPTION}" } } } EOFBuat catatan dengan mengirimkan permintaan HTTP ke REST API Artifact Analysis:
curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: ${ATTESTOR_PROJECT_ID}" \ --data-binary @/tmp/note_payload.json \ "https://containeranalysis.googleapis.com/v1/projects/${ATTESTOR_PROJECT_ID}/notes/?noteId=${NOTE_ID}"Untuk memverifikasi bahwa catatan berhasil dibuat, jalankan perintah berikut:
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: ${ATTESTOR_PROJECT_ID}" \ "https://containeranalysis.googleapis.com/v1/projects/${ATTESTOR_PROJECT_ID}/notes/"
Menetapkan izin IAM pada catatan
Anda harus memberikan peran Identity and Access Management (IAM) ke
akun layanan project attestor pada resource catatan
Artifact Analysis. Anda dapat melakukannya dengan menambahkan akun layanan project attestor ke peran containeranalysis.notes.occurrences.viewer dalam kebijakan IAM catatan.
Untuk menambahkan peran, lakukan hal berikut:
Buat file JSON yang berisi informasi yang diperlukan untuk menetapkan peran IAM pada catatan Anda:
cat > /tmp/iam_request.json << EOM { "resource": "${NOTE_URI}", "policy": { "bindings": [ { "role": "roles/containeranalysis.notes.occurrences.viewer", "members": [ "serviceAccount:${ATTESTOR_SERVICE_ACCOUNT}" ] } ] } } EOMTambahkan akun layanan dan peran akses yang diminta ke kebijakan IAM untuk catatan yang Anda buat:
curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: ${ATTESTOR_PROJECT_ID}" \ --data-binary @/tmp/iam_request.json \ "https://containeranalysis.googleapis.com/v1/projects/${ATTESTOR_PROJECT_ID}/notes/${NOTE_ID}:setIamPolicy"
Jika Anda menerima error service account not found saat memberikan peran IAM, Anda mungkin perlu membuat agen layanan secara manual.
Penggunaan multi-project
Jika Anda menyimpan attestor dalam satu project dan men-deploy dalam project terpisah,
Anda harus memberikan peran roles/binaryauthorization.attestorsVerifier ke
akun layanan yang terkait dengan project deployer pada attestor.
Menyiapkan kunci kriptografis
Otorisasi Biner memungkinkan Anda menggunakan kunci PKIX atau kunci post-quantum cryptography (PQC) untuk memverifikasi pengesahan. Anda hanya perlu menyiapkan satu jenis kunci menggunakan salah satu metode berikut:
- Membuat kunci post-quantum cryptography (PQC): Buat kunci PQC yang dikelola oleh Cloud Key Management Service untuk membantu mengatasi ancaman dari komputer kuantum di masa mendatang.
- Membuat pasangan kunci: Buat pasangan kunci PKIX standar menggunakan Cloud KMS atau alat lokal.
Membuat kunci post-quantum cryptography (PQC)
Untuk memberikan keamanan jangka panjang dan mengatasi ancaman dari komputer kuantum di masa mendatang, Otorisasi Biner mendukung kunci yang menggunakan algoritma post-quantum cryptography (PQC). Algoritma ini distandardisasi agar tahan terhadap serangan dari komputer klasik dan kuantum.
- Algoritma yang didukung: Otorisasi Biner mendukung algoritma tanda tangan PQC, seperti ML-DSA-65 (Dilithium3), untuk membuat dan memverifikasi pengesahan.
- Pengelolaan kunci: Sebaiknya kelola kunci PQC Anda menggunakan Cloud Key Management Service. Cloud KMS menyediakan penyimpanan dan pengelolaan yang aman untuk kunci kriptografis ini.
Membuat pasangan kunci PQC
Untuk membuat pasangan kunci di Cloud KMS, lakukan hal berikut:
Untuk menyiapkan variabel lingkungan yang diperlukan untuk membuat pasangan kunci, jalankan perintah berikut:
KMS_KEY_PROJECT_ID=KMS_KEY_PROJECT_IDKMS_KEY_LOCATION=KMS_KEY_LOCATIONKMS_KEYRING_NAME=KMS_KEYRING_NAMEKMS_KEY_NAME=KMS_KEY_NAMEKMS_KEY_VERSION=KMS_KEY_VERSIONKMS_KEY_PURPOSE=asymmetric-signing KMS_KEY_ALGORITHM=KMS_KEY_ALGORITHMKMS_PROTECTION_LEVEL=KMS_PROTECTION_LEVELGanti kode berikut:
KMS_KEY_PROJECT_ID: ID project tempat kunci disimpanKMS_KEY_LOCATION: lokasi kunciKMS_KEYRING_NAME: nama key ringKMS_KEY_NAME: nama kunciKMS_KEY_VERSION: versi kunciKMS_KEY_ALGORITHM: algoritma;ml-dsa-65KMS_PROTECTION_LEVEL: tingkat perlindungan—misalnya,software
Untuk membuat key ring, jalankan perintah berikut:
gcloud kms keyrings create ${KMS_KEYRING_NAME} \ --location ${KMS_KEY_LOCATION}Untuk membuat kunci, jalankan perintah berikut:
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}
Membuat pasangan kunci
Dalam panduan ini, Anda akan menggunakan Algoritma Tanda Tangan Digital Kurva Eliptik (ECDSA) yang direkomendasikan untuk membuat pasangan kunci PKIX. Anda juga dapat menggunakan pasangan kunci RSA atau PGP. Lihat Tujuan utama dan algoritma untuk mengetahui informasi selengkapnya tentang algoritma penandatanganan.
Pasangan kunci PKIX terdiri dari kunci pribadi yang digunakan penanda tangan untuk menandatangani pengesahan, dan kunci publik yang Anda tambahkan ke attestor. Pada waktu deployment, Otorisasi Biner menggunakan kunci publik ini untuk memverifikasi pengesahan.
PKIX (Cloud KMS)
Untuk membuat pasangan kunci di Cloud KMS, lakukan hal berikut:
Untuk menyiapkan variabel lingkungan yang diperlukan untuk membuat pasangan kunci, jalankan perintah berikut:
KMS_KEY_PROJECT_ID=
KMS_KEY_PROJECT_IDKMS_KEY_LOCATION=KMS_KEY_LOCATIONKMS_KEYRING_NAME=KMS_KEYRING_NAMEKMS_KEY_NAME=KMS_KEY_NAMEKMS_KEY_VERSION=KMS_KEY_VERSIONKMS_KEY_PURPOSE=asymmetric-signing KMS_KEY_ALGORITHM=KMS_KEY_ALGORITHMKMS_PROTECTION_LEVEL=KMS_PROTECTION_LEVELGanti kode berikut:
KMS_KEY_PROJECT_ID: ID project tempat kunci disimpanKMS_KEY_LOCATION: lokasi kunciKMS_KEYRING_NAME: nama key ringKMS_KEY_NAME: nama kunciKMS_KEY_VERSION: versi kunciKMS_KEY_ALGORITHM: algoritma;ec-sign-p256-sha256direkomendasikanKMS_PROTECTION_LEVEL: tingkat perlindungan—misalnya,software
Untuk membuat key ring, jalankan perintah berikut:
gcloud kms keyrings create ${KMS_KEYRING_NAME} \ --location ${KMS_KEY_LOCATION}Untuk membuat kunci, jalankan perintah berikut:
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}Ganti kode berikut:
KMS_KEY_NAME: nama kunciKMS_KEY_LOCATION: lokasi kunciKMS_KEYRING_NAME: nama key ringKMS_KEY_PURPOSE: tujuan kunci, ditetapkan keASYMMETRIC_SIGNKMS_KEY_ALGORITHM: algoritma,ec-sign-p256-sha256direkomendasikanKMS_PROTECTION_LEVEL: tingkat perlindungan—misalnya,software
PKIX (kunci lokal)
Untuk membuat pasangan kunci PKIX asimetris lokal baru dan menyimpannya dalam file, lakukan hal berikut:
Buat kunci pribadi:
PRIVATE_KEY_FILE adalah nama file yang berisi kunci pribadi yang digunakan untuk menandatangani payload pengesahan.
PRIVATE_KEY_FILE="/tmp/ec_private.pem" openssl ecparam -genkey -name prime256v1 -noout -out ${PRIVATE_KEY_FILE}Ekstrak kunci publik dari kunci pribadi dan simpan dalam file:
PUBLIC_KEY_FILE adalah nama file yang berisi kunci publik yang disimpan di attestor.
PUBLIC_KEY_FILE="/tmp/ec_public.pem" openssl ec -in ${PRIVATE_KEY_FILE} -pubout -out ${PUBLIC_KEY_FILE}
Membuat attestor
Untuk membuat attestor, ikuti langkah-langkah berikut:
Siapkan variabel lingkungan untuk menyimpan nama attestor seperti yang ditentukan dalam Otorisasi Biner:
ATTESTOR_NAME=ATTESTOR_NAME
Ganti ATTESTOR_NAME dengan nama attestor yang ingin Anda buat (misalnya,
build-secureatauprod-qa).Buat resource attestor di Otorisasi Biner:
gcloud --project="${ATTESTOR_PROJECT_ID}" \ container binauthz attestors create "${ATTESTOR_NAME}" \ --attestation-authority-note="${NOTE_ID}" \ --attestation-authority-note-project="${ATTESTOR_PROJECT_ID}"Tambahkan binding peran IAM untuk project deployer ke attestor. Ini digunakan oleh Otorisasi Biner saat mengevaluasi kebijakan untuk menentukan apakah project memiliki izin untuk mengakses pengesahan terkait.
gcloud container binauthz attestors add-iam-policy-binding \ "projects/${ATTESTOR_PROJECT_ID}/attestors/${ATTESTOR_NAME}" \ --member="serviceAccount:${DEPLOYER_SERVICE_ACCOUNT}" \ --role=roles/binaryauthorization.attestorsVerifierUntuk menambahkan kunci publik ke attestor, lakukan hal berikut:
PKIX (Cloud KMS)
Untuk menambahkan kunci publik dari pasangan kunci Cloud KMS ke attestor, jalankan perintah berikut:
gcloud --project="${ATTESTOR_PROJECT_ID}" \ container binauthz attestors public-keys add \ --attestor="${ATTESTOR_NAME}" \ --keyversion-project="${KMS_KEY_PROJECT_ID}" \ --keyversion-location="${KMS_KEY_LOCATION}" \ --keyversion-keyring="${KMS_KEYRING_NAME}" \ --keyversion-key="${KMS_KEY_NAME}" \ --keyversion="${KMS_KEY_VERSION}"PKIX (kunci lokal)
Untuk menambahkan kunci publik PKIX yang disimpan secara lokal ke attestor, jalankan perintah berikut:
gcloud --project="${ATTESTOR_PROJECT_ID}" \ container binauthz attestors public-keys add \ --attestor="${ATTESTOR_NAME}" \ --pkix-public-key-file=${PUBLIC_KEY_FILE} \ --pkix-public-key-algorithm=ecdsa-p256-sha256Jika Anda menambahkan kunci publik ke attestor dan tidak menentukan ID kunci (yang dapat berupa string apa pun), ID kunci akan otomatis diberikan dalam format RFC 6920:
ni:///sha-256;..., dengan...adalah hash yang dienkode dari kunci publik. Nilai ini ditampilkan di kolomidpada output perintah. ID yang ditampilkan dapat disimpan diPUBLIC_KEY_IDdan digunakan untuk membuat pengesahan.
Simpan ID kunci publik
Untuk membuat pengesahan, Anda memerlukan ID kunci publik.
Untuk menyimpan ID kunci publik, Anda dapat menyalinnya dari output perintah binauthz attestors public-keys add sebelumnya.
Atau, Anda dapat melihat ID kunci publik attestor kapan saja menggunakan perintah berikut:
gcloud container binauthz attestors describe ${ATTESTOR_NAME}.
Untuk menyimpan ID kunci publik Anda dalam variabel lingkungan, masukkan perintah berikut:
PUBLIC_KEY_ID=$(gcloud container binauthz attestors describe ${ATTESTOR_NAME} \
--format='value(userOwnedGrafeasNote.publicKeys[0].id)')
Memverifikasi bahwa attestor telah dibuat
Untuk memverifikasi bahwa attestor telah dibuat, jalankan perintah berikut:
gcloud container binauthz attestors list \
--project="${ATTESTOR_PROJECT_ID}"
Langkah berikutnya
- Pelajari cara membuat pengesahan untuk attestor Anda.
- Perbarui kebijakan Otorisasi Biner Anda untuk mewajibkan pengesahan menggunakan Google Cloud konsol, Google Cloud CLI, dan REST API.