Halaman ini menjelaskan cara membuat pengautentikasi di Otorisasi Biner menggunakan Google Cloud CLI. Atau, Anda dapat melakukan langkah-langkah ini menggunakan konsol Google Cloud 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.
Penanda tangan adalah resource Google Cloud yang digunakan Otorisasi Biner untuk memverifikasi pernyataan. Untuk mempelajari pengesahan lebih lanjut, lihat Ringkasan Otorisasi Biner.
Untuk membuat pengautentikasi, lakukan 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.)
- 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 dengan tempat Anda mengonfigurasi kebijakan Otorisasi Biner. Untuk tutorial project tunggal menyeluruh yang menyertakan langkah-langkah ini, lihat Memulai penggunaan Google Cloud CLI atau Memulai penggunaan 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 menyertakan langkah-langkah ini, lihat penyiapan multi-project.
Sebelum memulai
Sebelum membuat pengautentikasi, 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 penanda tangan 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.iam.gserviceaccount.com" ATTESTOR_SERVICE_ACCOUNT="service-${ATTESTOR_PROJECT_NUMBER}@gcp-sa-binaryauthorization.iam.gserviceaccount.com"
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 kejadian 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=DESCRIPTION
Ganti kode berikut:
NOTE_ID
: nama internal catatan dalam karakter alfanumerik tanpa spasi—misalnya,test-attestor-note
NOTE_URI
: jalur yang sepenuhnya memenuhi syarat ke resource catatanDESCRIPTION
: nama tampilan yang dapat dibaca manusia untuk catatan—misalnya,Test Attestor Note
Di editor teks, buat file JSON yang menjelaskan catatan:
cat > /tmp/note_payload.json << EOM { "name": "${NOTE_URI}", "attestation": { "hint": { "human_readable_name": "${DESCRIPTION}" } } } EOM
Buat catatan dengan mengirim permintaan HTTP ke Artifact Analysis REST API:
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 pengesah pada resource catatan Analisis Artefak. Anda melakukannya dengan menambahkan akun layanan project pengautentikasi ke peran containeranalysis.notes.occurrences.viewer
dalam kebijakan IAM catatan.
Untuk menambahkan peran, lakukan langkah-langkah berikut:
Buat file JSON yang berisi informasi yang diperlukan untuk menetapkan peran 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"
Penggunaan multi-project
Jika Anda menyimpan pengautentikasi di satu project dan men-deploy di project terpisah,
Anda harus memberikan peran roles/binaryauthorization.attestorsVerifier
ke
akun layanan yang terkait dengan project deployer di pengautentikasi.
Menyiapkan kunci kriptografis
Otorisasi Biner memungkinkan Anda menggunakan kunci PKIX untuk memverifikasi pengesahan.
Membuat pasangan kunci
Dalam panduan ini, Anda menggunakan Elliptic Curve Digital Signature Algorithm (ECDSA) yang direkomendasikan untuk menghasilkan 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 atestasi.
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 disimpanKMS_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}
Ganti kode berikut:
KMS_KEY_NAME
: nama kunciKMS_KEY_LOCATION
: lokasi kunciKMS_KEYRING_NAME
: nama key ringKMS_KEY_PURPOSE
: tujuan kunci, ditetapkan keASYMMETRIC_SIGN
KMS_KEY_ALGORITHM
: algoritma,ec-sign-p256-sha256
direkomendasikanKMS_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 pengautentikasi.
PUBLIC_KEY_FILE="/tmp/ec_public.pem" openssl ec -in ${PRIVATE_KEY_FILE} -pubout -out ${PUBLIC_KEY_FILE}
Membuat attestor
Untuk membuat pengautentikasi, ikuti langkah-langkah berikut:
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 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 pengautentikasi. Ini digunakan oleh Binary Authorization 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.attestorsVerifier
Untuk menambahkan kunci publik ke attestor, lakukan tindakan 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 pengautentikasi, 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-sha256
Jika Anda menambahkan kunci publik ke attestor dan tidak menentukan ID kunci (yang dapat berupa string apa pun), ID akan otomatis diberikan dalam format RFC 6920:
ni:///sha-256;...
, dengan...
adalah hash terenkode dari kunci publik. Nilai ini ditampilkan di kolomid
output perintah. ID yang ditampilkan dapat disimpan diPUBLIC_KEY_ID
dan digunakan untuk membuat pengesahan.
Menyimpan 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
, di atas.
Atau, Anda dapat melihat ID kunci publik pengautentikasi kapan saja menggunakan perintah berikut:
gcloud container binauthz attestors describe ${ATTESTOR}
.
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 pengautentikasi telah dibuat, jalankan perintah berikut:
gcloud container binauthz attestors list \ --project="${ATTESTOR_PROJECT_ID}"
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.