Hướng dẫn này sẽ hướng dẫn bạn cách thiết lập Witness để theo dõi quá trình xây dựng, sau đó sử dụng SBOMit để tạo ra tệp SBOM được bổ sung thông tin từ tệp attestation thu được.
Điều kiện tiên quyết
Phần 1: Witness
Witness bao bọc quy trình xây dựng của bạn và ghi lại các tệp bản dựng đã được ký (attestations), một bản ghi kiểm toán mật mã.
1. Cài đặt Witness
bash <(curl -s https://raw.githubusercontent.com/in-toto/witness/main/install-witness.sh)
Hoặc tải xuống tệp nhị phân từ trang phát hành của Witness.
2. Tạo cặp khóa ký
Witness ký từng tệp attestation bằng khóa riêng. Để thực hiện một thử nghiệm nhanh tại máy cục bộ:
openssl genpkey -algorithm ed25519 -outform PEM -out testkey.pem
openssl pkey -in testkey.pem -pubout > testpub.pem
> Mẹo: Witness cũng hỗ trợ ký không cần khóa thông qua SPIRE/SPIFFE và > Sigstore Fulcio cho các môi trường CI/CD.
3. Cấu hình tệp Witness
Tạo một tệp .Witness.yaml trong thư mục gốc của dự án. Tệp này thường được đưa vào kho lưu trữ cùng với
khóa công khai của bạn:
# .witness.yaml
run:
signer-file-key-path: testkey.pem
trace: false
verify:
attestations:
- "attestation.json"
policy: policy-signed.json
publickey: testpub.pem
Các tham số dòng lệnh sẽ ghi đè lên các giá trị trong tệp cấu hình. Chạy lệnh Witness help để xem tất cả các tùy chọn.
4. Hoàn tất quá trình xây dựng
Hãy thêm tiền tố Witness run vào đầu lệnh biên dịch để tạo ra tệp attestation:
witness run --step build -o attestation.json -- <your-build-command>
Dự án Go:
witness run --step build -o attestation.json -- go build -o myapp .
Dự án Python:
witness run --step build -o attestation.json -- pip install -r requirements.txt
Witness luôn chạy một bộ cơ bản các
bộ xác thực — xem Witness attestors list để xem danh sách đầy đủ.
> Mẹo: Đối với các bản dựng tạo ra nhiều tệp (ví dụ: node_modules), hãy sử dụng
> --dirhash-glob node_modules/* để tính băm nội dung thư mục thay vì tính băm từng tệp riêng lẻ.
5. Kiểm tra bộ lọc khí nạp (attestation)
Tệp attestation là một bao bì DSSE đã được ký.
Để xem nội dung:
cat attestation.json | jq -r .payload | base64 -d | jq
Bạn sẽ thấy một bộ sưu tập attestation chứa các attestations đã được gán kiểu: material, command-run,
product, environment và tùy chọn network-trace. Đây là dữ liệu mà SBOMit sử dụng.
Phần 2: SBOMit
Khi có tệp attestation, SBOMit sẽ tạo ra tệp SBOM đã được bổ sung thông tin bằng cách chạy các
trình giải quyết gói dành riêng cho từng ngôn ngữ trên dữ liệu xây dựng Witness đã thu thập được.
1. Cài đặt SBOMit
go install github.com/sbomit/sbomit@latest
2. Tạo một tệp SBOM được bổ sung thông tin
# SPDX 2.3 (default)
sbomit generate attestation.json
# SPDX 2.2
sbomit generate attestation.json -f spdx22
# CycloneDX 1.5
sbomit generate attestation.json -f cdx15
# CycloneDX 1.4
sbomit generate attestation.json -f cdx14
3. (Tùy chọn) –catalog để ghi lại cây phụ thuộc
SBOMit có thể gọi Syft làm nguồn danh mục bổ sung, đồng thời hợp nhất kết quả đầu ra của nó với dữ liệu được trích xuất từ attestation:
sbomit generate attestation.json --catalog syft --project-dir /path/to/project
SBOMit(hiện tại) tạo ra một danh sách phẳng các phụ thuộc; nó biết những gì đã được cài đặt và sử dụng, nhưng không tái tạo lại toàn bộ cây phụ thuộc. Syft, đối với các hệ sinh thái mà nó có thể xác định được cấu trúc cây (ví dụ: Go modules, npm), sẽ giữ nguyên mối quan hệ cha-con đó trong kết quả đầu ra của mình.
Khi truyền tham số --catalog syft, SBOMit sẽ sử dụng cây phụ thuộc của Syft làm nền tảng và
sau đó bổ sung vào đó tất cả những gì Syft không thể nhận diện được: các phiên bản thực tế đã được cài đặt tại thời điểm xây dựng,
các thư viện gốc, các tệp không được bất kỳ trình quản lý gói nào theo dõi, và nguồn gốc của các cuộc gọi mạng được ghi lại
bởi Witness.
