Ali Baghery
Ali Baghery
خواندن ۲ دقیقه·۲ سال پیش

امنیت پایپلاین CICDبا Kyvernoو sigstore

امروزه بیش از پیش نرم افزارها بر روی محیط کانتینر در حال Deployشدن هستند در نتیجه نیازهای امنیتی جدیدی نیز با خود به همراه خواهند آورد. اولین رکن در محیط های کانتینر بیس ایمیج های ساخته شده است و اطمینان از اینکه این ایمیج ها سالم و بدون تغییر هستند.

متاسفانه در محیط های ماکروسرویس تعییرات به سرعت صورت میگیرد در بعضی محیط ها شاید هر ۱۰ دقیقه یک Deploy صورت بپذیرد درنتیجه این بررسی ها و امضاها باید به صورت خودکار صورت پذیرد.

یکی از بهترین ابزارها برای Policy as Code در محیط کوبرنتیز Kyvernoاست. شما با استفاده از این ابزار میتوانید هر نوع تغییر و یا ایجاد Resource در کوبرنتیز خود را مدیریت نمایید.در نسخه 1.9.0 شامل چند فیچر هست که Validation, Mutate, Generate, Cleanup, Verify Image است. که ما در این قسمت با Verify Image اون کار داریم. بریم داخل کار :)

Pipeline Example With Cosign and kyverno
Pipeline Example With Cosign and kyverno

خب اول باید Cosignرو نصب کنید حالا روی هر محیطی که مدنظرتون هست که مطابق این لینک نصب کنید.

یک جفت کلید باید اول ایجاد کنید.

cosign generate-key-pair

این دستور ۲ تا کلید cosign.keyو cosign.pub رو ایجاد میکنه که باید به صورت امن جایی نگهداری کنید به نظرم بهتره از یه Key Managmentمثل hashicorp vaultاستفاده کنید . بعد از اینکه ایمیج رو ساختین باید توی Repoاون رو آپلود کنید. برای امضا کردن ایمیج از دستور زیر استفاده کنید.

cosign sign --key cosign.key --allow-insecure-registry <IMAGE_PRIVATE>

ما الان نیاز داریم که مطمین بشیم فقط و فقط ایمیج هایی که Sign شده اند بتونند در کلاسترمون Deploy بشن. اینجا ما از kyvernoاستفاده میکنیم. یک پالیسی به صورت زیر توی Kyverno می سازیم.

apiVersion: kyverno.io/v1 kind: ClusterPolicy metadata: name: check-image spec: validationFailureAction: Enforce background: false webhookTimeoutSeconds: 30 failurePolicy: Fail rules: - name: check-image match: any: - resources: kinds: - Pod verifyImages: - image: <IMAGE_PRIVATE> key: |- <اینجا پابلیک کی خودتون رو قرار بدین>

این پالیسی رو ما به صورت ClusterPolicyنوشتیم که بر روی کل کلاستر اعمال میشه شما میتونید فقط روی NameSpaceهای خاصی اعمالش کنید مشکلی نداره

kubernetesdevopsdevsecopssecurity
شاید از این پست‌ها خوشتان بیاید