Halaman ini menjelaskan cara membuat pengautentikasi kustom di Otorisasi Biner dengan menggunakan REST API.
Sebagai alternatif, Anda juga dapat melakukan langkah-langkah ini menggunakan Google Cloud CLI, atau konsol Google Cloud. Tugas ini adalah 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.
Ringkasan
Pemberi pengesahan adalah resource Google Cloud yang digunakan Otorisasi Biner untuk memverifikasi pengesahan. Untuk mempelajari pengesahan lebih lanjut, lihat Ringkasan Otorisasi Biner.
Untuk membuat pengautentikasi, Anda harus melakukan hal berikut:
- Buat catatan di Analisis Artefak untuk menyimpan metadata tepercaya yang digunakan dalam proses pengesahan.
- Siapkan pasangan kunci Infrastruktur Kunci Publik (X.509) (PKIX) yang dapat digunakan untuk memverifikasi identitas pengautentikasi. (Pasangan kunci asimetris yang dihasilkan oleh Cloud Key Management Service (Cloud KMS) dalam format yang kompatibel dengan PKIX.) Anda juga dapat menggunakan pasangan kunci PGP, bukan kunci PKIX.
- Buat pengesah itu sendiri di Otorisasi Biner, dan kaitkan catatan serta kunci publik yang Anda buat.
Dalam penyiapan satu project, Anda membuat pengautentikasi di project Google Cloud yang sama tempat Anda 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.
Sebelum memulai
Menetapkan project default
Tetapkan project Google Cloud default jika Anda belum melakukannya:
PROJECT_ID=PROJECT_ID gcloud config set project ${PROJECT_ID}
Menyiapkan lingkungan
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)" )" ATTESTOR_PROJECT_ID=${PROJECT_ID} ATTESTOR_PROJECT_NUMBER="$( gcloud projects describe "${ATTESTOR_PROJECT_ID}" \ --format="value(projectNumber)" )"
Jika project attestor dan deployer Anda adalah project yang sama, gunakan project ID yang sama untuk kedua variabel.
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 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 catatan Artifact Analysis:
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=DESCRIPTION
Ganti kode berikut:
- NOTE_ID adalah nama internal catatan dalam karakter alfanumerik
tanpa spasi (misalnya,
test-attestor-note
) - NOTE_URI adalah jalur yang sepenuhnya memenuhi syarat ke resource catatan
- DESCRIPTION adalah nama tampilan yang dapat dibaca manusia untuk catatan
(misalnya,
Test Attestor Note
)
- NOTE_ID adalah nama internal catatan dalam karakter alfanumerik
tanpa spasi (misalnya,
Di editor teks, buat file JSON di
/tmp/note_payload.json
yang menjelaskan catatan Analisis Artefak:cat > /tmp/note_payload.json << EOM { "name": "${NOTE_URI}", "attestation": { "hint": { "human_readable_name": "${DESCRIPTION}" } } } EOM
Buat catatan dengan mengirim permintaan HTTP ke REST API Analisis Artefak:
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 pada catatan
Anda juga harus menetapkan izin pada catatan Analisis Artefak yang Anda
buat agar dapat diakses oleh akun layanan project pengonfirmasi. Anda
melakukannya dengan memperbarui kebijakan IAM untuk catatan guna menetapkan
peran containeranalysis.notes.occurrences.viewer
ke akun.
Untuk menetapkan izin:
Buat file JSON yang berisi informasi yang diperlukan untuk menetapkan kebijakan IAM di catatan Anda:
cat > /tmp/iam_request.json << EOM { 'resource': '${NOTE_URI}', 'policy': { 'bindings': [ { 'role': 'roles/containeranalysis.notes.occurrences.viewer', 'members': [ 'serviceAccount:${ATTESTOR_SERVICE_ACCOUNT}' ] } ] } } EOM
Tambahkan 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"
Menyiapkan kunci kriptografis
Otorisasi Biner memungkinkan Anda menggunakan kunci PKIX untuk memverifikasi identitas penanda tangan yang membuat pengesahan dengan aman. Hal ini memastikan bahwa hanya pihak yang terverifikasi yang dapat memberikan otorisasi pada image container. Sebagai alternatif PKIX, Anda juga dapat menggunakan kunci PGP.
Membuat pasangan kunci PKIX
Otorisasi Biner memungkinkan Anda menggunakan pasangan kunci PKIX asimetris untuk memverifikasi pengesahan. Pasangan kunci terdiri dari kunci pribadi, yang digunakan oleh penanda tangan untuk menandatangani pengesahan secara digital, dan kunci publik, yang Anda tambahkan ke pengautentikasi. Kemudian, penegak Otorisasi Biner menggunakan kunci publik di pengautentikasi untuk memverifikasi bahwa pengesahan dibuat oleh penanda tangan.
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.
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:
Untuk menyiapkan variabel lingkungan yang diperlukan untuk membuat pasangan kunci, jalankan perintah berikut:
KMS_KEY_PROJECT_ID=
KMS_KEY_PROJECT_ID
KMS_KEY_LOCATION=KMS_KEY_LOCATION
KMS_KEYRING_NAME=KMS_KEYRING_NAME
KMS_KEY_NAME=KMS_KEY_NAME
KMS_KEY_VERSION=KMS_KEY_VERSION
KMS_KEY_PURPOSE=asymmetric-signing KMS_KEY_ALGORITHM=KMS_KEY_ALGORITHM
KMS_PROTECTION_LEVEL=KMS_PROTECTION_LEVEL
Ganti kode berikut:
KMS_KEY_PROJECT_ID
: ID project tempat kunci disimpan.KMS_KEY_LOCATION
: lokasi kunciKMS_KEYRING_NAME
: nama key ringKMS_KEY_NAME
: nama kunciKMS_KEY_VERSION
: versi kunciKMS_KEY_ALGORITHM
: algoritma;ec-sign-p256-sha256
direkomendasikanKMS_PROTECTION_LEVEL
: tingkat perlindungan—misalnya,software
Untuk membuat ring kunci, 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}
PKIX (kunci lokal)
Untuk membuat pasangan kunci PKIX asimetris lokal baru dan menyimpannya dalam file:
Buat kunci:
PRIVATE_KEY_FILE="/tmp/ec_private.pem" openssl ecparam -genkey -name prime256v1 -noout -out ${PRIVATE_KEY_FILE}
Karena file ini berisi kunci publik dan pribadi, Anda perlu mengekstrak kunci publik ke dalam file terpisah sehingga Anda 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 attestor itu sendiri di Otorisasi Biner dengan catatan Analisis Artefak terkait. Anda juga harus menambahkan kunci publik kriptografis.
Untuk membuat attestor:
Siapkan variabel lingkungan untuk menyimpan nama pengautentikasi seperti yang ditentukan dalam Otorisasi Biner:
ATTESTOR_NAME=ATTESTOR_NAME
dengan ATTESTOR_NAME adalah nama pengautentikasi yang ingin Anda buat (misalnya,
build-secure
atauprod-qa
).Buat attestor dan lampirkan kunci keamanan publik:
PKIX (Cloud KMS)
Siapkan variabel lingkungan tambahan untuk menyimpan informasi tentang pasangan kunci Cloud KMS untuk panggilan ke Binary Authorization API.
KMS_CRYPTO_KEY_URI="projects/${KMS_KEY_PROJECT_ID}/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME}" KMS_CRYPTO_KEY_VERSION_URI="${KMS_CRYPTO_KEY_URI}/cryptoKeyVersions/${KMS_KEY_VERSION}" KMS_KEY_ID="//cloudkms.googleapis.com/v1/${KMS_CRYPTO_KEY_VERSION_URI}"
Download file kunci publik dari Cloud KMS dan simpan ke file bernama
/tmp/kms_public_key.pem
di sistem lokal Anda.Buat file JSON yang berisi informasi yang diperlukan untuk membuat penanda tangan:
cat > /tmp/attestor.json << EOM { "userOwnedDrydockNote": { "noteReference": "${NOTE_URI}", "publicKeys": { "id": "${KMS_KEY_ID}", "pkixPublicKey": { "signatureAlgorithm": "${KMS_KEY_ALGORITHM}", "publicKeyPem": $( \ python < /tmp/kms_public_key.pem \ -c 'import json, sys; print(json.dumps(sys.stdin.read()))' \ ) } } } } EOM
Buat attestor:
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/attestor.json \ "https://binaryauthorization.googleapis.com/v1/projects/${ATTESTOR_PROJECT_ID}/attestors?attestorId=${ATTESTOR_NAME}"
PKIX (kunci lokal)
Buat file JSON yang berisi informasi yang diperlukan untuk membuat pengautentikasi:
cat > /tmp/attestor.json << EOM { "userOwnedGrafeasNote": { "noteReference": "${NOTE_URI}", "publicKeys": { "pkixPublicKey": { "signatureAlgorithm": "ecdsa_p256_sha256", "publicKeyPem": $( \ python < ${PUBLIC_KEY_FILE} \ -c 'import json, sys; print(json.dumps(sys.stdin.read()))' \ ) } } } } EOM
Buat attestor:
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/attestor.json \ "https://binaryauthorization.googleapis.com/v1/projects/${ATTESTOR_PROJECT_ID}/attestors?attestorId=${ATTESTOR_NAME}"
Tambahkan binding peran IAM untuk project deployer ke pengautentikasi. Ini digunakan oleh Binary Authorization saat mengevaluasi kebijakan untuk menentukan apakah project memiliki izin untuk mengakses atestor yang dirujuk.
Buat file JSON yang berisi informasi yang diperlukan untuk menetapkan kebijakan IAM di pengautentikasi Anda:
cat > /tmp/iam_request.json << EOM { 'resource': 'projects/${ATTESTOR_PROJECT_ID}/attestors/${ATTESTOR_NAME}', 'policy': { 'bindings': [ { 'role': 'roles/binaryauthorization.attestorsVerifier', 'members': [ 'serviceAccount:${DEPLOYER_SERVICE_ACCOUNT}' ] } ] } } EOM
Tambahkan 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://binaryauthorization.googleapis.com/v1beta1/projects/${ATTESTOR_PROJECT_ID}/attestors/${ATTESTOR_NAME}:setIamPolicy"
Memverifikasi bahwa attestor telah dibuat
Untuk memverifikasi bahwa pengautentikasi telah dibuat, jalankan perintah berikut:
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: ${ATTESTOR_PROJECT_ID}" \ "https://binaryauthorization.googleapis.com/v1/projects/${ATTESTOR_PROJECT_ID}/attestors/"
Langkah selanjutnya
- Pelajari cara membuat pengesahan untuk pengautentikasi Anda.
- Perbarui kebijakan Otorisasi Biner Anda untuk mewajibkan pengesahan menggunakan konsol Google Cloud, Google Cloud CLI, dan REST API.