კონტენტის ნდობა და იმიჯის ხელმოწერა

ისწავლეთ როგორ დანერგოთ Docker-ის კონტენტის ნდობა და იმიჯის ხელმოწერა უსაფრთხო პროგრამული უზრუნველყოფის მიწოდების ჯაჭვებისთვის

Docker-ის კონტენტის ნდობა და იმიჯის ხელმოწერა

Docker-ის კონტენტის ნდობა (DCT) უზრუნველყოფს კონტეინერის იმიჯების მთლიანობისა და გამომცემლის ვერიფიკაციის საშუალებას, რაც უზრუნველყოფს უსაფრთხო პროგრამული უზრუნველყოფის მიწოდების ჯაჭვებს და გარანტიას იძლევა, რომ თქვენს გარემოში მხოლოდ სანდო კონტენტი იმუშავებს. ის ახორციელებს ხელმოწერის სისტემას, რომელიც მომხმარებლებს საშუალებას აძლევს კრიპტოგრაფიულად შეამოწმონ იმიჯების ავთენტურობა მათ გადმოწერამდე ან გაშვებამდე, რაც კრიტიკულად მნიშვნელოვანია უსაფრთხოებაზე-მგრძნობიარე აპლიკაციებისა და გარემოებისთვის.

DCT ქმნის ნდობის ჯაჭვს იმიჯის გამომცემლებიდან მომხმარებლამდე, რაც უზრუნველყოფს, რომ იმიჯები არ შეცვლილა გავრცელების პროცესის არცერთ ეტაპზე. ეს მექანიზმი აგვარებს კრიტიკულ უსაფრთხოების გამოწვევებს კონტეინერების გაშვებისას, ხელს უშლის არაავტორიზებული ან შეცვლილი კონტეინერის იმიჯების გაშვებას თქვენს ინფრასტრუქტურაში.

ძირითადი კონცეფციები

Docker-ის კონტენტის ნდობა

  • ამოწმებს იმიჯის მთლიანობას ყველა ფენის კრიპტოგრაფიული ჰეშირების საშუალებით
  • ამოწმებს იმიჯის გამომცემლის იდენტობას ციფრული ხელმოწერების გამოყენებით
  • ხელს უშლის შეცვლილი იმიჯების გაშვებას ხელმოუწერელი ან არასწორად ხელმოწერილი კონტენტის უარყოფით
  • ინტეგრირდება Docker CLI-სთან შიდა ბრძანებებისა და გარემოს ცვლადების საშუალებით
  • უზრუნველყოფს ნდობის ჯაჭვს გამომცემლიდან გაშვების გარემომდე
  • უზრუნველყოფს იმიჯის გამოქვეყნების ქმედებების უარყოფის შეუძლებლობას
  • იცავს მთელ პროგრამული უზრუნველყოფის მიწოდების ჯაჭვს აგებიდან გაშვებამდე

ხელმოწერის სისტემა

  • იყენებს Notary პროექტს, ხელმოწერის სისტემის ღია კოდის იმპლემენტაციას
  • ახორციელებს The Update Framework-ს (TUF), უსაფრთხოების სპეციფიკაციას უსაფრთხო კონტენტის გავრცელებისთვის
  • მართავს root გასაღებებს (უმაღლესი ავტორიტეტი, ინახება ოფლაინ) და დელეგირების გასაღებებს (ყოველდღიური ხელმოწერისთვის)
  • ამყარებს ოფლაინ ნდობის საწყისს კრიტიკული გასაღებების გამოვლენის მინიმიზაციისთვის
  • ინახავს ონლაინ რეპოზიტორიის მეტამონაცემებს ხელმოწერის ვერიფიკაციისთვის
  • ქმნის იერარქიულ ნდობის ურთიერთობებს მოქნილი ხელმოწერის სამუშაო პროცესებისთვის
  • მოიცავს დროის ნიშნულის სერვისებს განმეორებითი შეტევების თავიდან ასაცილებლად

კონტენტის ნდობის ჩართვა

გასაღებების მართვა

# გასაღებების გენერირება და ჩატვირთვა (ხდება ავტომატურად პირველი ატვირთვისას DCT-ის ჩართვისას)
docker trust key generate my-signing-key
# ეს ქმნის ახალ ხელმოწერის გასაღების წყვილს და ინახავს მათ თქვენს ლოკალურ Docker-ის ნდობის საცავში
# პირადი გასაღები დაცულია პაროლით, რომელიც უნდა მიუთითოთ
# საჯარო გასაღები გამოიყენება ვერიფიკაციისთვის და შეიძლება გაზიარდეს

# ხელმომწერის დამატება რეპოზიტორიაში
docker trust signer add --key my-signing-key.pub alice myorg/myimage
# ეს ამატებს ახალ ავტორიზებულ ხელმომწერს (alice) რეპოზიტორიაში
# მხოლოდ დანიშნულ ხელმომწერებს შეუძლიათ შექმნან ვალიდური ხელმოწერები რეპოზიტორიისთვის
# საშუალებას იძლევა ხელმოწერის უფლებამოსილების დელეგირებას გუნდის მრავალ წევრზე
# მოითხოვს რეპოზიტორიის ადმინისტრატორის ნებართვებს

# ხელმომწერის წაშლა
docker trust signer remove alice myorg/myimage
# აუქმებს ხელმოწერის პრივილეგიებს მითითებული მომხმარებლისთვის
# ადრე ხელმოწერილი იმიჯები რჩება ვალიდური
# ამ ხელმომწერის მომავალი ხელმოწერები უარყოფილი იქნება
# სასარგებლოა, როდესაც გუნდის წევრები ტოვებენ ან პასუხისმგებლობები იცვლება

# ხელმოწერის გასაღებების ნახვა
docker trust key ls
# ჩამოთვლის მიმდინარე მომხმარებლისთვის ხელმისაწვდომ ყველა ხელმოწერის გასაღებს
# აჩვენებს გასაღების ID-ებს, ტიპებსა და მდებარეობებს
# გეხმარებათ თქვენი ხელმოწერის ინფრასტრუქტურის მართვაში
# არ აჩვენებს პირადი გასაღების მასალას

# გასაღებების როტაცია
docker trust key rotate myorg/myimage
# ანახლებს ხელმოწერის გასაღებებს რეპოზიტორიისთვის
# კრიტიკულია უსაფრთხოებისთვის პოტენციური კომპრომეტაციის შემდეგ
# ამყარებს ახალ ნდობის ჯაჭვს იმიჯზე წვდომის შენარჩუნებით
# უნდა იყოს რეგულარული უსაფრთხოების შენარჩუნების ნაწილი

Docker-ი ქმნის ორი ტიპის გასაღებს, როდესაც პირველად ჩართავთ DCT-ს:

  • Root გასაღები: თქვენი ყველაზე ღირებული გასაღები, რომელიც უნდა ინახებოდეს ოფლაინ და უსაფრთხოდ
  • რეპოზიტორიის გასაღები: გენერირდება თითოეული რეპოზიტორიისთვის, რომელშიც ტვირთავთ, გამოიყენება ყოველდღიური ხელმოწერისთვის

იმიჯების ხელმოწერა

იმიჯის ძირითადი ხელმოწერა

# DCT-ის ჩართვისას, ხელმოწერა ხდება ავტომატურად ატვირთვისას
export DOCKER_CONTENT_TRUST=1
docker push myorg/myimage:latest
# Docker-ი მოგთხოვთ თქვენი ხელმოწერის გასაღების პაროლს
# იმიჯის ფენები და მანიფესტი კრიპტოგრაფიულად ხელმოწერილია
# ხელმოწერები ინახება Notary სერვერზე (ხშირად რეესტრთან ერთად)
# ხელმოწერილი კონტენტის ვერიფიკაცია ახლა შესაძლებელია მომხმარებლების მიერ

# ადრე ატვირთული იმიჯის აშკარად ხელმოწერა
docker trust sign myorg/myimage:latest
# აწერს ხელს არსებულ იმიჯს მისი ხელახლა ატვირთვის გარეშე
# სასარგებლოა იმიჯების რეტროაქტიულად ხელმოწერისთვის
# ამატებს თქვენს ხელმოწერას ნდობის მეტამონაცემებში
# მოითხოვს, რომ იმიჯი უკვე არსებობდეს რეესტრში

ხელმოწერის ინფორმაციის ნახვა

# იმიჯის ნდობის მონაცემების შემოწმება
docker trust inspect myorg/myimage:latest
# აჩვენებს ხელმომწერებს, როლებსა და ხელმოწერის მეტამონაცემებს
# აჩვენებს ხელმოწერის დროის ნიშნულებსა და ვადის გასვლის თარიღებს
# ჩამოთვლის ხელმოწერისთვის გამოყენებულ გასაღების ID-ებს
# JSON ფორმატის გამოტანა პროგრამული დამუშავებისთვის

# შემოწმება გაფართოებული სერთიფიკატებითა და ადამიანისთვის წაკითხვადი ფორმატით
docker trust inspect --pretty myorg/myimage:latest
# უზრუნველყოფს უფრო წაკითხვად გამოტანის ფორმატს დაფორმატებული თარიღებით
# აჩვენებს დეტალურ სერთიფიკატის ინფორმაციას
# აჩვენებს იერარქიულ ნდობის ურთიერთობებს
# უკეთესია ადამიანის ანალიზისა და პრობლემების მოგვარებისთვის

როდესაც Docker-ის ნდობა ჩართულია, ყოველი იმიჯის გადმოწერის ოპერაცია შეამოწმებს ხელმოწერებს Notary სერვერთან, სანამ იმიჯის გამოყენების უფლებას მისცემს, რაც უზრუნველყოფს მუდმივ დაცვას იმიჯის შეცვლისგან.

იმიჯის ხელმოწერის ავტომატიზაცია

# GitHub Actions-ის სამუშაო პროცესის მაგალითი ხელმოწერით
name: Build and Sign Image

on:
  push:
    branches: [ main ]

jobs:
  build-and-sign:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2
      
      - name: Login to DockerHub
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      
      - name: Setup Docker Content Trust
        run: |
          mkdir -p ~/.docker/trust
          echo "${{ secrets.DCT_PRIVATE_KEY }}" > ~/.docker/trust/private.key
          echo "${{ secrets.DCT_PASSPHRASE }}" > ~/.docker/trust/passphrase
          export DOCKER_CONTENT_TRUST=1
          export DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE="$(cat ~/.docker/trust/passphrase)"
          
      - name: Build and Push
        run: |
          docker build -t myorg/myimage:${{ github.sha }} .
          docker tag myorg/myimage:${{ github.sha }} myorg/myimage:latest
          docker push myorg/myimage:${{ github.sha }}
          docker push myorg/myimage:latest

Notary-ის არქიტექტურა

Notary-ის კომპონენტები

  • Notary სერვერი: ინახავს და ემსახურება ხელმოწერილ მეტამონაცემებს რეპოზიტორიებისთვის
    • მოქმედებს როგორც ხელმოწერის ვერიფიკაციის მონაცემების სანდო წყარო
    • უზრუნველყოფს ყველა ხელმოწერის მეტამონაცემების უსაფრთხო შენახვას
    • ახორციელებს TUF პროტოკოლს უსაფრთხო განახლებისთვის
    • აჩენს API-ს კლიენტებისთვის ნდობის მონაცემების მისაღებად და განახლებისთვის
  • Notary ხელმომწერი: უსაფრთხოდ ამუშავებს ხელმოწერის ოპერაციებს
    • მართავს პირად გასაღებებს ხელმოწერის ოპერაციებისთვის
    • უზრუნველყოფს იზოლირებულ გარემოს კრიპტოგრაფიული ოპერაციებისთვის
    • გთავაზობთ აპარატურული უსაფრთხოების მოდულის (HSM) ინტეგრაციას
    • ინარჩუნებს საზრუნავების გამოყოფას მეტამონაცემების შენახვისგან
  • Notary კლიენტი: CLI ხელსაწყო კონტენტის ნდობის სამართავად
    • ურთიერთქმედებს როგორც სერვერთან, ისე ხელმომწერთან
    • უზრუნველყოფს მომხმარებლის ინტერფეისს ნდობის ოპერაციებისთვის
    • მართავს ლოკალურ გასაღების შენახვასა და ხელმოწერის მოთხოვნებს
    • ამოწმებს და ანახლებს ნდობის მეტამონაცემებს
  • TUF მეტამონაცემები: ხელმოწერილი მეტამონაცემების ფაილების მრავალი ფენა
    • ახორციელებს The Update Framework-ის სპეციფიკაციას
    • უზრუნველყოფს სიღრმისეულ დაცვას იერარქიული ნდობის საშუალებით
    • იცავს სხვადასხვა შეტევებისგან, მათ შორის გაყინვის, დაბრუნებისა და შერევისგან
    • უზრუნველყოფს უსაფრთხო მეტამონაცემების განახლებას არასანდო არხებითაც კი

ნდობის მეტამონაცემები

  • Root: უმაღლესი დონის გასაღები, ჩვეულებრივ ოფლაინ
    • უმაღლესი ავტორიტეტი ნდობის იერარქიაში
    • აწერს ხელს და ავტორიზაციას უკეთებს ყველა სხვა უმაღლესი დონის გასაღებს
    • ინახება ოფლაინ უსაფრთხოების მაქსიმიზაციისთვის
    • ხანგრძლივი ვადის გასვლის დრო (ჩვეულებრივ 1+ წელი)
    • გამოიყენება იშვიათად, ძირითადად გასაღების როტაციისთვის
  • Targets: აკონტროლებს კონტენტის ჰეშებს
    • შეიცავს ფაქტობრივი კონტეინერის იმიჯების ჰეშებს
    • ამყარებს კავშირს იმიჯის ტეგებსა და მათ კრიპტოგრაფიულ დაიჯესტებს შორის
    • ხელმოწერილია targets გასაღებით ან დელეგირების გასაღებებით
    • განსაზღვრავს კონტენტს, რომელიც ოფიციალურად დამტკიცებულია
    • შეიძლება გაფართოვდეს მორგებული მეტამონაცემებით
  • Snapshot: იწერს მეტამონაცემების მიმდინარე კოლექციას
    • ხელს უშლის შერევის შეტევებს
    • შეიცავს მითითებებს ყველა მიმდინარე მეტამონაცემების ვერსიაზე
    • უზრუნველყოფს თანმიმდევრულობას ყველა ნდობის ინფორმაციაში
    • განახლდება, როდესაც რომელიმე მეტამონაცემი იცვლება
    • უზრუნველყოფს რეპოზიტორიის მდგომარეობის თანმიმდევრულ ხედს
  • Timestamp: მიუთითებს რეპოზიტორიის სიახლეზე
    • ხელს უშლის განმეორებით შეტევებს ვადაგასული მეტამონაცემებით
    • განახლდება ხშირად (ჩვეულებრივ ყოველდღიურად)
    • აქვს ყველა მეტამონაცემიდან უმოკლესი ვადის გასვლის დრო
    • ხელმოწერილია ონლაინ გასაღებებით ავტომატიზაციისთვის
    • ადასტურებს, რომ რეპოზიტორია აქტიურად შენარჩუნებულია
  • Delegations: დამატებითი ხელმოწერის უფლებამოსილებები
    • უზრუნველყოფს განაწილებული ნდობის მოდელს
    • საშუალებას იძლევა მრავალი ხელმომწერის სხვადასხვა გზისთვის
    • აქვს გუნდზე დაფუძნებული ხელმოწერის სამუშაო პროცესების მხარდაჭერა
    • შეუძლია შექმნას იერარქიული ხელმოწერის პასუხისმგებლობები
    • უზრუნველყოფს დეტალურ წვდომის კონტროლს ხელმოწერისთვის

გაფართოებული ხელმოწერა Notary-ით

# Notary რეპოზიტორიის ინიციალიზაცია
notary init example.com/myorg/myimage
# ქმნის ახალ სანდო კოლექციას თქვენი იმიჯისთვის
# აგენერირებს საწყის root, targets, snapshot და timestamp მეტამონაცემებს
# ამყარებს ნდობის იერარქიას რეპოზიტორიისთვის
# თქვენ უნდა მიუთითოთ პაროლი root და რეპოზიტორიის გასაღებებისთვის

# დელეგირების გასაღების დამატება
notary delegation add example.com/myorg/myimage targets/releases alice.crt --all-paths
# ქმნის დელეგირების როლს სახელად "releases" targets როლის ქვეშ
# ამატებს ალისის სერთიფიკატს როგორც ავტორიზებულ ხელმომწერს ამ დელეგირებისთვის
# --all-paths ფლაგი საშუალებას იძლევა რეპოზიტორიის ნებისმიერი გზის ხელმოწერას
# უფრო დეტალური კონტროლისთვის, მიუთითეთ გზები, როგორიცაა "path:v1*"

# ცვლილებების გამოქვეყნება
notary publish example.com/myorg/myimage
# ატვირთავს ლოკალურად შეცვლილ ნდობის მეტამონაცემებს Notary სერვერზე
# ხდის თქვენს ცვლილებებს ხილულს რეპოზიტორიის სხვა მომხმარებლებისთვის
# ანახლებს snapshot და timestamp მეტამონაცემებს მიმდინარე მდგომარეობით
# მოითხოვს ავთენტიფიკაციას Notary სერვერთან

# გასაღებების სია Notary-ში
notary key list
# აჩვენებს ყველა გასაღებს თქვენს ლოკალურ Notary-ის ნდობის საცავში
# აჩვენებს გასაღების ID-ებს, მდებარეობებს, როლებსა და გასაღების ტიპებს
# გეხმარებათ თქვენი ხელმოწერის შესაძლებლობების ინვენტარიზაციაში
# არ აჩვენებს პირადი გასაღების მასალას ან პაროლებს

# გასაღების როტაცია
notary key rotate example.com/myorg/myimage targets/releases
# ცვლის არსებულ გასაღებს ახლით მითითებული როლისთვის
# ინარჩუნებს ნდობის ჯაჭვს გასაღების გადასვლისას
# კრიტიკულია უსაფრთხოებისთვის საეჭვო კომპრომეტაციის შემდეგ
# ანახლებს დელეგირების მეტამონაცემებს ახალი გასაღების გამოსაყენებლად
# ყველა ადრე ხელმოწერილი კონტენტი რჩება ვალიდური

Notary CLI უზრუნველყოფს უფრო პირდაპირ და დეტალურ ინტერფეისს ნდობის სისტემასთან, ვიდრე Docker-ის trust ბრძანებები, რაც მას ღირებულს ხდის გაფართოებული ნდობის მართვის სცენარებისა და ავტომატიზაციისთვის.

Cosign-ის ინტეგრაცია

პოლიტიკის აღსრულება

მიღების კონტროლერები

  • Kubernetes-ის ვალიდაციის ვებჰუკები, რომლებიც იჭერენ და ამოწმებენ მოთხოვნებს
    • მუშაობენ როგორც დამოუკიდებელი სერვისები თქვენს Kubernetes კლასტერში
    • იღებენ მიღების მოთხოვნებს ობიექტების შენახვამდე
    • შეუძლიათ შემომავალი რესურსების დამტკიცება, უარყოფა ან შეცვლა
    • მუშაობენ ასინქრონულად წარმადობის ზემოქმედების მინიმიზაციისთვის
  • ხელმოწერის ვერიფიკაციის აღსრულება გაშვების დროს
    • შეამოწმეთ იმიჯის ხელმოწერები პოდების გაშვების დაშვებამდე
    • შეამოწმეთ ხელმოწერები სანდო საჯარო გასაღებებთან
    • მრავალი ვერიფიკაციის პროვაიდერის მხარდაჭერა (DCT, Cosign და ა.შ.)
    • დანერგეთ კონფიგურირებადი ვერიფიკაციის პოლიტიკა
  • ხელმოუწერელი ან არასანდო იმიჯების გაშვების დაბლოკვა
    • უარყავით გაშვებები დაუდასტურებელი იმიჯებით
    • მიაწოდეთ დეტალური უარყოფის მიზეზები შეცდომის შეტყობინებებში
    • შექმენით გამონაკლისები კონკრეტული სახელების სივრცეებისთვის ან წყაროებისთვის
    • საგანგებო გვერდის ავლის მექანიზმების მხარდაჭერა სათანადო ავტორიზაციით
  • ორგანიზაციის პოლიტიკის დანერგვა იმიჯის ნდობისთვის
    • განსაზღვრეთ დაშვებული ხელმომწერები სხვადასხვა გარემოსთვის
    • დააყენეთ მინიმალური ხელმოწერის მოთხოვნები სახელების სივრცის მიხედვით
    • შექმენით იარუსიანი ნდობის პოლიტიკა (dev, staging, production)
    • აღასრულეთ მიწოდების ჯაჭვის უსაფრთხოების მოთხოვნები
  • აუდიტი და შესაბამისობის ანგარიშგება უსაფრთხოების მმართველობისთვის
    • დაალოგინეთ ყველა ვერიფიკაციის გადაწყვეტილება დეტალური მეტამონაცემებით
    • შექმენით ანგარიშები ხელმოწერის შესაბამისობაზე
    • თვალყური ადევნეთ პოლიტიკის გამონაკლისებსა და გვერდის ავლის მოვლენებს
    • მიაწოდეთ მტკიცებულებები უსაფრთხოების აუდიტებისა და სერტიფიცირებისთვის
    • ინტეგრაცია უსაფრთხოების ინფორმაციისა და მოვლენების მართვის (SIEM) სისტემებთან

მიღების პოლიტიკის მაგალითი

apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  name: image-signature-webhook
webhooks:
- name: image-verify.example.com
  clientConfig:
    service:
      namespace: image-verify
      name: image-verify-webhook
      path: "/validate"
  rules:
  - operations: ["CREATE", "UPDATE"]
    apiGroups: [""]
    apiVersions: ["v1"]
    resources: ["pods"]
  failurePolicy: Fail
  sideEffects: None
  admissionReviewVersions: ["v1"]

პროგრამული უზრუნველყოფის მიწოდების ჯაჭვის უსაფრთხოება

graph TD
    A[დეველოპერი აკომიტებს კოდს] --> B[CI/CD პაიპლაინი]
    B --> C[კონტეინერის იმიჯის აგება]
    C --> D[იმიჯის ხელმოწერა]
    D --> E[რეესტრში ატვირთვა]
    E --> F[იმიჯის სკანირება]
    F --> G[Kubernetes-ში გაშვება]
    H[მიღების კონტროლერი] --> |ხელმოწერის ვერიფიკაცია| G
    I[გასაღების მართვა] --> D
    J[უსაფრთხოების პოლიტიკა] --> H

კერძო რეესტრების დაცვა

მოწყვლადობის მართვა

სკანირებასთან ინტეგრაცია

  • მოაწერეთ ხელი იმიჯებს უსაფრთხოების სკანირების შემდეგ მათი უსაფრთხოების სტატუსის დასადასტურებლად
    • გაუშვით სრული მოწყვლადობის სკანირება ხელმოწერამდე
    • მოაწერეთ ხელი მხოლოდ იმ იმიჯებს, რომლებიც აკმაყოფილებენ უსაფრთხოების ზღურბლებს
    • ჩართეთ სკანირების შედეგები როგორც დადასტურებები ხელმოწერებთან
    • შექმენით უსაფრთხო პაიპლაინის ეტაპები სკანირება-შემდეგ-ხელმოწერის სამუშაო პროცესისთვის
    • დაადოკუმენტირეთ უსაფრთხოების საბაზისო დონე თითოეული ხელმოწერილი იმიჯისთვის
  • გააუქმეთ ხელმოწერები მოწყვლადი იმიჯებისთვის, როდესაც ახალი საფრთხეები გამოჩნდება
    • აკონტროლეთ CVE მონაცემთა ბაზები ახალი მოწყვლადობებისთვის
    • დანერგეთ ხელმოწერის ავტომატური გაუქმება კრიტიკული საკითხებისთვის
    • შეატყობინეთ გუნდებს, როდესაც ხელმოწერები გაუქმდება
    • მიაწოდეთ ნათელი გზები გამოსწორებისთვის
    • თვალყური ადევნეთ მოწყვლადობიდან-გაუქმებამდე დროის ჩარჩოებს
  • დანერგეთ ხელახალი ხელმოწერა პატჩის შემდეგ სანდო სტატუსის შესანარჩუნებლად
    • შეამოწმეთ პატჩის ეფექტურობა ხელახლა ხელმოწერამდე
    • განაახლეთ დადასტურებები ახალი უსაფრთხოების ინფორმაციით
    • შეინარჩუნეთ ხელმოწერის ცვლილებების ვერსიების ისტორია
    • დაადოკუმენტირეთ თითოეული ხელახალი ხელმოწერის მოვლენის დასაბუთება
    • დანერგეთ სათანადო დამტკიცების სამუშაო პროცესები ხელახალი ხელმოწერისთვის
  • ავტომატიზირებული უსაფრთხოების განახლების სამუშაო პროცესი მუდმივი დაცვისთვის
    • ავტომატურად აღმოაჩინეთ მოწყვლადი კომპონენტები
    • ააგეთ, შეამოწმეთ და მოაწერეთ ხელი დაპატჩულ იმიჯებს
    • გაუშვით განახლებები მინიმალური ადამიანური ჩარევით
    • შეამოწმეთ განახლების წარმატებული გაშვება
    • ავტომატურად დააბრუნეთ, თუ ვერიფიკაცია ვერ მოხერხდა
  • პოლიტიკაზე დაფუძნებული ხელმოწერის აღსრულება, რომელიც დაკავშირებულია უსაფრთხოების მოთხოვნებთან
    • განსაზღვრეთ უსაფრთხოების დონეები, რომლებიც საჭიროა სხვადასხვა გარემოსთვის
    • დანერგეთ უფრო მკაცრი პოლიტიკა პროდაქშენის დატვირთვებისთვის
    • შექმენით გამონაკლისების პროცესები საგანგებო სიტუაციებისთვის
    • გადახედეთ და განაახლეთ პოლიტიკა საფრთხის ლანდშაფტის მიხედვით
    • შეუსაბამეთ პოლიტიკა მარეგულირებელ მოთხოვნებს

უწყვეტი ვალიდაცია

  • გაშვებული იმიჯების რეგულარული ვერიფიკაცია საწყისი გაშვების შემდეგ
    • გაშვებული კონტეინერების პერიოდული ხელმოწერის ვალიდაცია
    • გაშვებული იმიჯების შედარება სანდო ხელმოწერებთან
    • კონტეინერის დრიფტის ან შეცვლის აღმოჩენა
    • დანერგეთ ვერიფიკაცია როგორც ჯანმრთელობის შემოწმების ნაწილი
    • შექმენით შერიგების ციკლები უწყვეტი შესაბამისობისთვის
  • კომპრომეტირებული ხელმოწერებისა და ნდობის საკითხების მონიტორინგი
    • თვალყური ადევნეთ გაუქმებულ სერთიფიკატებს ან კომპრომეტირებულ გასაღებებს
    • შეატყობინეთ მოულოდნელ ხელმოწერის ცვლილებებზე
    • დანერგეთ მკვდარი კაცის გადამრთველი დროის ნიშნულის ვალიდაციისთვის
    • თვალყური ადევნეთ ხელმოწერის ვადის გასვლას ნდობის ხარვეზების თავიდან ასაცილებლად
    • აკონტროლეთ Notary სერვერის ჯანმრთელობა და უსაფრთხოება
  • პოლიტიკის დარღვევების ავტომატური გამოსწორება
    • განსაზღვრეთ ნათელი სამოქმედო გეგმები სხვადასხვა დარღვევის ტიპებისთვის
    • დანერგეთ გრადუირებული რეაგირება სიმძიმის მიხედვით
    • შექმენით ავტომატური კარანტინის პროცედურები საეჭვო კონტეინერებისთვის
    • შექმენით თვით-აღდგენის შესაძლებლობები ნდობის დარღვევებისთვის
    • დაადოკუმენტირეთ გამოსწორების ქმედებები შესაბამისობისთვის
  • იმიჯის წარმოშობის აუდიტის კვალი მთელი სასიცოცხლო ციკლის განმავლობაში
    • ჩაიწერეთ ყველა ხელმოწერის მოვლენა სრული მეტამონაცემებით
    • თვალყური ადევნეთ იმიჯის ისტორიას აგებიდან პენსიაზე გასვლამდე
    • დანერგეთ უცვლელი ლოგირება ხელმოწერის ოპერაციებისთვის
    • შექმენით ვერიფიცირებადი მტკიცებულებების ჯაჭვები სასამართლო ანალიზისთვის
    • შეინარჩუნეთ ისტორიული ჩანაწერები შესაბამისობის მოთხოვნებისთვის
  • მიწოდების ჯაჭვის გამჭვირვალობა ყველა დაინტერესებული მხარისთვის
    • მიაწოდეთ ხილვადობა ხელმოწერის უფლებამოსილებებსა და პროცესებში
    • დაადოკუმენტირეთ ნდობის ურთიერთობები ადამიანისთვის წაკითხვად ფორმატში
    • შექმენით დაფები, რომლებიც აჩვენებენ იმიჯის ნდობის სტატუსს
    • უზრუნველყავით მიწოდების ჯაჭვის მთლიანობის ვერიფიკაცია
    • მესამე მხარის აუდიტების მხარდაჭერა ნდობის ინფრასტრუქტურაში

საუკეთესო პრაქტიკები

გასაღების მართვა

  • შეინახეთ root გასაღებები ოფლაინ (აპარატურული ტოკენები)
    • გამოიყენეთ აპარატურული უსაფრთხოების მოდულები (HSM) ან სმარტ ბარათები
    • შეინახეთ root გასაღებები ჰაერით-იზოლირებულ სისტემებში
    • დანერგეთ ფიზიკური უსაფრთხოების კონტროლი ოფლაინ გასაღებებისთვის
    • განიხილეთ შეცვლის-აშკარა საცავი კრიტიკული გასაღებებისთვის
    • შექმენით ცერემონიები root გასაღების ოპერაციებისთვის
  • გამოიყენეთ ცალკე გასაღებები სხვადასხვა გარემოსთვის
    • შეინარჩუნეთ მკაცრი გამიჯვნა დეველოპმენტისა და პროდაქშენის გასაღებებს შორის
    • შექმენით გარემოს-სპეციფიკური ნდობის იერარქიები
    • დანერგეთ სხვადასხვა უსაფრთხოების დონეები სხვადასხვა გასაღების ტიპებისთვის
    • გამოიყენეთ ცალკე დელეგაციები სხვადასხვა გუნდებისთვის ან სერვისებისთვის
    • არასოდეს გააზიაროთ გასაღებები უსაფრთხოების საზღვრებს შორის
  • დანერგეთ უსაფრთხო გასაღების როტაციის პროცედურები
    • დაგეგმეთ რეგულარული როტაცია გასაღების მგრძნობელობის მიხედვით
    • შექმენით ნათელი პროცედურები დაგეგმილი და საგანგებო როტაციებისთვის
    • შეამოწმეთ როტაციის პროცედურები დანერგვამდე
    • შეინარჩუნეთ უკუთავსებადობა გადასვლის პერიოდში
    • დაადოკუმენტირეთ თითოეული როტაციის მოვლენა აუდიტისთვის
  • განსაზღვრეთ ნათელი გასაღების მფლობელის პასუხისმგებლობები
    • მიანიჭეთ კონკრეტული როლები გასაღების მართვისთვის
    • დანერგეთ მოვალეობების გამიჯვნა კრიტიკული ოპერაციებისთვის
    • შექმენით სარეზერვო მფლობელის დავალებები
    • გაწვრთნეთ მფლობელები უსაფრთხოების პროცედურებში
    • დანერგეთ მრავალ-პიროვნული კონტროლი უმაღლესი ღირებულების გასაღებებისთვის
  • დაადოკუმენტირეთ გასაღების აღდგენის პროცესები
    • შექმენით დეტალური აღდგენის პროცედურები გასაღების დაკარგვის სცენარებისთვის
    • რეგულარულად შეამოწმეთ აღდგენის პროცესები
    • შეინახეთ აღდგენის მასალები უსაფრთხოდ შესაბამისი წვდომის კონტროლით
    • დანერგეთ საგანგებო წვდომის პროცედურები
    • განიხილეთ აღდგენის სამართლებრივი და შესაბამისობის შედეგები

ოპერაციული უსაფრთხოება

  • აღასრულეთ კონტენტის ნდობა პროდაქშენის გარემოში
    • გახადეთ ხელმოწერის ვერიფიკაცია სავალდებულო პროდაქშენის დატვირთვებისთვის
    • დანერგეთ ტექნიკური კონტროლი გვერდის ავლის თავიდან ასაცილებლად
    • შექმენით ნათელი გამონაკლისების პროცესები საგანგებო სცენარებისთვის
    • რეგულარულად შეამოწმეთ აღსრულების მექანიზმები
    • დაადოკუმენტირეთ ნდობის მოთხოვნებთან შესაბამისობა
  • გაწვრთნეთ დეველოპერები ხელმოწერის სამუშაო პროცესსა და უსაფრთხოების შედეგებზე
    • შექმენით საგანმანათლებლო მასალები კონტენტის ნდობის კონცეფციებზე
    • მიაწოდეთ პრაქტიკული ტრენინგი ხელმოწერის პროცედურებზე
    • ჩართეთ კონტენტის ნდობა უსაფრთხოების ცნობიერების ამაღლების პროგრამებში
    • გაწვრთნეთ ინციდენტებზე რეაგირების ჯგუფები ნდობასთან დაკავშირებულ საკითხებზე
    • გახადეთ უსაფრთხოება გაზიარებული პასუხისმგებლობა გუნდებში
  • ავტომატიზირეთ ხელმოწერა CI/CD პაიპლაინებში თანმიმდევრულობისთვის
    • დააპროექტეთ უსაფრთხო ხელმოწერის ეტაპები ბილდის პაიპლაინებში
    • დანერგეთ სათანადო საიდუმლოების მართვა ხელმოწერის გასაღებებისთვის
    • შექმენით დამტკიცების კარიბჭეები ხელმოწერის ოპერაციებამდე
    • დაალოგინეთ და აკონტროლეთ ყველა ავტომატიზირებული ხელმოწერის აქტივობა
    • რეგულარულად შეამოწმეთ ხელმოწერის ავტომატიზაცია
  • რეგულარულად შეამოწმეთ ხელმოწერის პოლიტიკა და იმპლემენტაცია
    • ჩაატარეთ ნდობის კონფიგურაციის პერიოდული მიმოხილვები
    • შეამოწმეთ ხელმოწერის პოლიტიკასთან შესაბამისობა
    • შეამოწმეთ ხელმოწერის ვერიფიკაცია შემთხვევით ნიმუშებზე
    • განაახლეთ პოლიტიკა ახალი საფრთხეების მიხედვით
    • ჩართეთ ნდობის სისტემები უსაფრთხოების შეფასებებში
  • აკონტროლეთ არაავტორიზებული იმიჯის გამოყენება ან ნდობის დარღვევები
    • დანერგეთ რეალურ დროში შეტყობინებები ნდობის შეცდომებზე
    • შექმენით დაფები ნდობის სტატუსისთვის გარემოებში
    • გამოიყენეთ ანომალიების აღმოჩენა უჩვეულო ხელმოწერის შაბლონებისთვის
    • თვალყური ადევნეთ ხელმოუწერელი იმიჯების გამოყენების მცდელობებს
    • ჩართეთ ნდობის დარღვევები უსაფრთხოების ინციდენტების პროცედურებში

პრობლემების მოგვარება

თანამედროვე მიდგომები და ხელსაწყოები

Sigstore და Cosign

  • გასაღების გარეშე ხელმოწერის ოპციები, რომლებიც აქრობენ პირადი გასაღების მართვის საჭიროებას
    • იყენებს ხანმოკლე სერთიფიკატებს, რომლებიც დაკავშირებულია იდენტობასთან
    • იყენებს OpenID Connect-ს (OIDC) ავთენტიფიკაციისთვის
    • უზრუნველყოფს უარყოფის შეუძლებლობას გასაღების შენახვის საზრუნავის გარეშე
    • გასცემს ეფემერულ სერთიფიკატებს Fulcio CA-დან
    • ამცირებს გასაღების კომპრომეტაციის რისკს
  • გამჭვირვალობის ლოგები საჯარო ვერიფიკაციისა და აუდიტირებადობისთვის
    • იწერს ყველა ხელმოწერას შეცვლის-აშკარა ლოგში (Rekor)
    • საშუალებას იძლევა მესამე მხარის მიერ ხელმოწერის მოვლენების ვერიფიკაციას
    • ქმნის ხელმოწერის აქტივობების უცვლელ აუდიტის კვალს
    • აქვს ჩართვის მტკიცებულებების მხარდაჭერა ხელმოწერის ვერიფიკაციისთვის
    • ხდის მიწოდების ჯაჭვის აქტივობებს საჯაროდ ვერიფიცირებადს
  • OIDC იდენტობის ინტეგრაცია ადამიანისა და სამუშაო დატვირთვის ავთენტიფიკაციისთვის
    • იყენებს არსებულ იდენტობის პროვაიდერებს (GitHub, Google და ა.შ.)
    • აქვს როგორც ადამიანის, ისე სერვისის ანგარიშის იდენტობების მხარდაჭერა
    • აკავშირებს ხელმოწერებს პირდაპირ ავთენტიფიცირებულ იდენტობებთან
    • უზრუნველყოფს იდენტობაზე დაფუძნებული ვერიფიკაციის პოლიტიკას
    • ამარტივებს წვდომის მართვას ხელმოწერის ოპერაციებისთვის
  • გამარტივებული დეველოპერის გამოცდილება თანამედროვე ხელსაწყოებით
    • ამცირებს სირთულეს ტრადიციულ PKI-სთან შედარებით
    • უზრუნველყოფს ნათელ, მომხმარებელზე-მეგობრულ ბრძანებებსა და ინტერფეისებს
    • ინტეგრირდება არსებულ დეველოპმენტის სამუშაო პროცესებთან
    • აქვს მრავალი ხელმოწერის ფორმატისა და ვერიფიკაციის მეთოდის მხარდაჭერა
    • ამცირებს ხახუნს მიწოდების ჯაჭვის უსაფრთხოების დანერგვისას
  • Kubernetes-ის ინტეგრაცია მიღების კონტროლერებისა და პოლიტიკის საშუალებით
    • მუშაობს Policy Controller-თან და OPA Gatekeeper-თან
    • უზრუნველყოფს CRD-ებს Kubernetes-მშობლიური პოლიტიკის განსაზღვრისთვის
    • ინტეგრირდება Kubernetes RBAC-თან ავტორიზაციისთვის
    • აქვს სახელების სივრცის დონის პოლიტიკის კონფიგურაციის მხარდაჭერა
    • უზრუნველყოფს კლასტერის მასშტაბით ხელმოწერის აღსრულებას

In-toto დადასტურებები

  • აღბეჭდეთ მთელი ბილდის წარმოშობა დეტალური მეტამონაცემებით
    • იწერს ყველა ნაბიჯს ბილდისა და გამოშვების პროცესში
    • ადოკუმენტირებს შეყვანებს, გამოტანებსა და გარემოს თითოეული ნაბიჯისთვის
    • ქმნის ბილდის პროცესის მთლიანობის ვერიფიცირებად მტკიცებულებას
    • აქვს განმეორებადი ბილდების ვერიფიკაციის მხარდაჭერა
    • უზრუნველყოფს პროგრამული უზრუნველყოფის მასალების სრული სიის გენერირებას
  • დააკავშირეთ ნაბიჯები ბილდის პროცესში კრიპტოგრაფიული გარანტიებით
    • ქმნის ოპერაციების ვერიფიცირებად ჯაჭვს
    • უზრუნველყოფს, რომ თითოეული ნაბიჯი შესრულდა როგორც მოსალოდნელი იყო
    • აღმოაჩენს შეცვლას ან არაავტორიზებულ მოდიფიკაციებს
    • უზრუნველყოფს ტრანზიტულ ნდობას პაიპლაინის მასშტაბით
    • აღასრულებს წესრიგსა და დამოკიდებულებებს ნაბიჯებს შორის
  • შეამოწმეთ სრული მიწოდების ჯაჭვი წყაროდან გაშვებამდე
    • ამოწმებს ყველა ტრანსფორმაციას პროგრამული უზრუნველყოფის სასიცოცხლო ციკლში
    • უზრუნველყოფს, რომ არაავტორიზებული ნაბიჯები არ დამატებულა
    • ამოწმებს, რომ ყველა კომპონენტი აკმაყოფილებს უსაფრთხოების მოთხოვნებს
    • ქმნის პროგრამული უზრუნველყოფის წარმოშობის თავიდან ბოლომდე ვერიფიკაციას
    • აქვს რთული მიწოდების ჯაჭვის ტოპოლოგიების მხარდაჭერა
  • დამატებითი მეტამონაცემები ხელმოწერების მიღმა მდიდარი ვერიფიკაციისთვის
    • მოიცავს მოწყვლადობის სკანირების შედეგებს
    • ადოკუმენტირებს პოლიტიკის შესაბამისობის სტატუსს
    • იწერს ბილდის გარემოს კონფიგურაციას
    • აღბეჭდავს ტესტის შედეგებსა და ხარისხის მეტრიკებს
    • უზრუნველყოფს ლიცენზირებისა და შესაბამისობის ინფორმაციას
  • ფრეიმვორქი მორგებული დადასტურებებისთვის, რომლებიც მორგებულია კონკრეტულ საჭიროებებზე
    • აქვს დომენ-სპეციფიკური დადასტურების ტიპების მხარდაჭერა
    • საშუალებას იძლევა მორგებული ვერიფიკაციის წესების შექმნას
    • საშუალებას იძლევა გაფართოებას ორგანიზაცია-სპეციფიკური მოთხოვნებისთვის
    • უზრუნველყოფს სტანდარტიზებულ ფორმატს მრავალფეროვანი მეტამონაცემებისთვის
    • ინტეგრირდება არსებულ უსაფრთხოებისა და შესაბამისობის სისტემებთან

მომავალი მიმართულებები