actions/attest-build-provenance
สร้างการรับรองแหล่งที่มาของบิลด์ที่ลงนามแล้วสำหรับอาร์ติแฟกต์ของเวิร์กโฟลว์ ขับเคลื่อนภายในโดยแพ็คเกจ @actions/attest
การรับรองจะผูกบางเรื่อง (สิ่งประดิษฐ์ที่มีชื่อพร้อมกับการแยกย่อย) กับเพรดิเคตแหล่งที่มาของ SLSA โดยใช้รูปแบบ in-toto
ลายเซ็นที่ตรวจสอบได้จะถูกสร้างขึ้นสำหรับการรับรองโดยใช้ใบรับรองการลงนามที่ออกโดย Sigstore ที่มีอายุสั้น หากพื้นที่เก็บข้อมูลที่เริ่มต้นเวิร์กโฟลว์ GitHub Actions เป็นแบบสาธารณะ ระบบจะใช้อินสแตนซ์เพื่อสาธารณะของ Sigstore เพื่อสร้างลายเซ็นรับรอง หากที่เก็บเป็นแบบส่วนตัว/ภายใน จะใช้อินสแตนซ์ Sigstore ส่วนตัวของ GitHub
เมื่อสร้างและลงนามเอกสารรับรองแล้ว เอกสารดังกล่าวจะถูกอัปโหลดไปยัง API การรับรอง GH และเชื่อมโยงกับพื้นที่เก็บข้อมูลซึ่งเป็นต้นทางของเวิร์กโฟลว์
สามารถตรวจสอบการยืนยันได้โดยใช้คำสั่ง attestation
ใน GitHub CLI
ดูการใช้การรับรองสิ่งประดิษฐ์เพื่อสร้างแหล่งที่มาสำหรับบิวด์สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการรับรองสิ่งประดิษฐ์
ภายในเวิร์กโฟลว์ GitHub Actions ซึ่งสร้างสิ่งประดิษฐ์บางอย่างที่คุณต้องการยืนยัน:
ตรวจสอบให้แน่ใจว่าได้ตั้งค่าการอนุญาตต่อไปนี้:
permissions :
id-token : write
attestations : write
สิทธิ์ id-token
ช่วยให้ดำเนินการสร้างโทเค็น OIDC ที่จำเป็นในการขอใบรับรองการลงนาม Sigstore ได้ จำเป็นต้องได้รับอนุญาต attestations
เพื่อยืนยันการรับรอง
เพิ่มสิ่งต่อไปนี้ลงในเวิร์กโฟลว์ของคุณหลังจากสร้างสิ่งประดิษฐ์ของคุณแล้ว:
- uses : actions/attest-build-provenance@v1
with :
subject-path : ' '
พารามิเตอร์ subject-path
ควรระบุส่วนที่คุณต้องการสร้างการรับรอง
ดูที่ action.yml
- uses : actions/attest-build-provenance@v1
with :
# Path to the artifact serving as the subject of the attestation. Must
# specify exactly one of "subject-path" or "subject-digest". May contain a
# glob pattern or list of paths (total subject count cannot exceed 2500).
subject-path :
# SHA256 digest of the subject for the attestation. Must be in the form
# "sha256:hex_digest" (e.g. "sha256:abc123..."). Must specify exactly one
# of "subject-path" or "subject-digest".
subject-digest :
# Subject name as it should appear in the attestation. Required unless
# "subject-path" is specified, in which case it will be inferred from the
# path.
subject-name :
# Whether to push the attestation to the image registry. Requires that the
# "subject-name" parameter specify the fully-qualified image name and that
# the "subject-digest" parameter be specified. Defaults to false.
push-to-registry :
# Whether to attach a list of generated attestations to the workflow run
# summary page. Defaults to true.
show-summary :
# The GitHub token used to make authenticated API requests. Default is
# ${{ github.token }}
github-token :
ชื่อ | คำอธิบาย | ตัวอย่าง |
---|---|---|
bundle-path | เส้นทางที่แน่นอนไปยังไฟล์ที่มีเอกสารรับรองที่สร้างขึ้น | /tmp/attestation.jsonl |
การรับรองจะถูกบันทึกในรูปแบบบันเดิล Sigstore ที่เป็นอนุกรม JSON
หากมีการรับรองหลายวิชาในเวลาเดียวกัน เอกสารรับรองแต่ละรายการจะถูกเขียนลงในไฟล์เอาต์พุตในบรรทัดแยกกัน (โดยใช้รูปแบบ JSON Lines)
สามารถเข้าร่วมได้ไม่เกิน 2,500 วิชาในเวลาเดียวกัน หัวข้อต่างๆ จะได้รับการประมวลผลเป็นชุด 50 หลังจากกลุ่มเริ่มแรกที่มี 50 กลุ่ม แต่ละชุดต่อมาจะมีความล่าช้าเพิ่มขึ้นแบบทวีคูณ (ต่อยอดที่ความล่าช้า 1 นาทีต่อชุด) เพื่อหลีกเลี่ยงไม่ให้ API การรับรองล้นหลาม
สำหรับกรณีการใช้งานพื้นฐาน เพียงเพิ่มการดำเนินการ attest-build-provenance
ลงในเวิร์กโฟลว์ของคุณและระบุเส้นทางไปยังอาร์ติแฟกต์ที่คุณต้องการสร้างการยืนยัน
name : build-attest
on :
workflow_dispatch :
jobs :
build :
permissions :
id-token : write
contents : read
attestations : write
steps :
- name : Checkout
uses : actions/checkout@v4
- name : Build artifact
run : make my-app
- name : Attest
uses : actions/attest-build-provenance@v1
with :
subject-path : ' ${{ github.workspace }}/my-app '
หากคุณกำลังสร้างอาร์ติแฟกต์หลายรายการ คุณสามารถสร้างการรับรองที่มาสำหรับแต่ละรายการได้โดยใช้ไวด์การ์ดในอินพุต subject-path
- uses : actions/attest-build-provenance@v1
with :
subject-path : ' dist/**/my-bin-* '
สำหรับไวด์การ์ดที่รองรับพร้อมกับลักษณะการทำงานและเอกสาร โปรดดูที่ @actions/glob ซึ่งใช้ภายในเพื่อค้นหาไฟล์
หรือคุณสามารถแสดงรายการหลายหัวข้อได้อย่างชัดเจนโดยใช้รายการคั่นด้วยเครื่องหมายจุลภาคหรือขึ้นบรรทัดใหม่:
- uses : actions/attest-build-provenance@v1
with :
subject-path : ' dist/foo, dist/bar '
- uses : actions/attest-build-provenance@v1
with :
subject-path : |
dist/foo
dist/bar
เมื่อทำงานกับคอนเทนเนอร์อิมเมจ คุณสามารถเรียกใช้การดำเนินการด้วยอินพุต subject-name
และ subject-digest
หากคุณต้องการเผยแพร่เอกสารรับรองไปยังรีจีสทรีคอนเทนเนอร์ด้วยตัวเลือก push-to-registry
สิ่งสำคัญคือ subject-name
ต้องระบุชื่อรูปภาพที่มีคุณสมบัติครบถ้วน (เช่น "ghcr.io/user/app" หรือ "acme. azurecr.io/user/app") อย่ารวมแท็กเป็นส่วนหนึ่งของชื่อรูปภาพ -- รูปภาพเฉพาะที่ได้รับการรับรองจะถูกระบุโดยข้อมูลสรุปที่ให้มา
บันเดิลการรับรองจะถูกจัดเก็บไว้ในรีจิสทรี OCI ตามข้อกำหนด Cosign Bundle
หมายเหตุ : เมื่อกดไปที่ Docker Hub โปรดใช้ "index.docker.io" เป็นส่วนรีจิสตรีของชื่อรูปภาพ
name : build-attested-image
on :
push :
branches : [main]
jobs :
build :
runs-on : ubuntu-latest
permissions :
id-token : write
packages : write
contents : read
attestations : write
env :
REGISTRY : ghcr.io
IMAGE_NAME : ${{ github.repository }}
steps :
- name : Checkout
uses : actions/checkout@v4
- name : Login to GitHub Container Registry
uses : docker/login-action@v3
with :
registry : ${{ env.REGISTRY }}
username : ${{ github.actor }}
password : ${{ secrets.GITHUB_TOKEN }}
- name : Build and push image
id : push
uses : docker/[email protected]
with :
context : .
push : true
tags : ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
- name : Attest
uses : actions/attest-build-provenance@v1
id : attest
with :
subject-name : ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
subject-digest : ${{ steps.push.outputs.digest }}
push-to-registry : true