هیچ اسرار هارد کدگذاری نشده: چرخش اعتبار سنجی خودکار پایگاه داده با طاق ، AK و Postgres🔐

در قسمت 1 این سری ، ما طاق Hashicorp را در یک خوشه AKS با استفاده از Terraform ، پیکربندی خارجی تنظیم کردیم و نحوه واکشی اسرار از موتور KV Vault را به Kubernetes نشان دادیم.
حال ، بیایید آن را یک قدم جلوتر برداریم. اعتبار استاتیک خطرناک است.
– در این مقاله ، ما مستقر خواهیم شد PostgreSQL
در خوشه AKS ما با استفاده از HELM ، موتور اسرار پایگاه داده Vault را کاوش کنید تا اعتبارنامه های کوتاه مدت ایجاد کند. externalSecrets
وت vaultDynamicSecrets
برای همگام سازی بومی آن اعتبار در خوشه.
بیایید درست در داخل پرش کنیم! 🚀
اعتبار GIF
👉🏻 1) Setup PostgreSQL با استفاده از HELM:
ما از نمودار Helm Bitnami استفاده خواهیم کرد و به خاطر سادگی از پارامترهای پیش فرض استفاده خواهیم کرد. پارامترهای تنظیم دقیق را می توان به صورت جداگانه اضافه کرد values.yaml
پرونده و با دستور نصب اعمال شده است.
helm install my-release oci://registry-1.docker.io/bitnamicharts/postgresql --set hostNetwork=true
این کار رمزعبور پیش فرض Postgres را ایجاد می کند و آن را به عنوان یک راز در خوشه ذخیره می کند. برای واکشی رمز عبور در قالب رمزگشایی شده از دستور زیر استفاده کنید.
kubectl get secret --namespace default my-release-postgresql -o jsonpath="{.data.postgres-password}" | base64 -d
note: در صورت حذف نسخه قبلی PostgreSQL از طریق دستور HELM ، رمز ورود پیکربندی شده در نصب جدید نادیده گرفته می شود. در این حالت ، پی وی سی قدیمی یک رمز عبور قدیمی خواهد داشت و تنظیم آن از طریق HELM عملی نخواهد شد. حذف حجم مداوم (PV) مسئله را حل می کند.
بعد ، بیایید یک بی ریشه کاربر در پایگاه داده ای که ما برای همه تعامل بین postgres و طاق از آن استفاده خواهیم کرد. از آنجا که ما قصد چرخش اعتبار را داریم ، نگه داشتن کاربر root دست نخورده اطمینان می دهد که هرگز دسترسی به پایگاه داده را از دست نمی دهیم.
# execute interactive bash shell with the database statefulset
kubectl exec -it my-release-postgresql-0 -- /bin/bash
# login to the database
psql -h 127.0.0.1 -U postgres -p 5432 -W
#Create user with password
CREATE USER vault WITH PASSWORD 'vault123';
# Grant privileges
GRANT ALL PRIVILEGES ON DATABASE postgres TO vault;
ALTER USER vault WITH SUPERUSER;
ما می توانیم ببینیم کاربر طاق ایجاد شده است
👉🏻 2) موتور مخفی بانک اطلاعاتی را از UI طاق ایجاد کنید:
موتور اسرار پایگاه داده Vault به صورت پویا اعتبار پایگاه داده را بر اساس نقش های پیکربندی شده تولید می کند و نیاز به اعتبارنامه های سخت را از بین می برد. این از پایگاه داده های مختلف از طریق افزونه ها پشتیبانی می کند و هر دو نقش پویا و استاتیک را امکان پذیر می کند.
طاق مکانیزم اجاره زمان زندگی (TTL) را به اسرار و نشانه های پویا اختصاص می دهد ، و اطمینان می دهد که آنها برای یک دوره مشخص معتبر هستند. پس از اتمام TTL ، طاق می تواند راز یا نشانه را لغو کند و نیاز به تجدید اجاره نامه دوره ای توسط مشتریان برای حفظ دسترسی دارد.
به UI طاق بروید و یک موتور اسرار جدید ایجاد کنید.
یک نام مناسب ارائه دهید و در صورت لزوم اجاره نامه پیش فرض TTL و MAX LEASE TTL را تنظیم کنید.
بعد ، افزونه پایگاه داده را به عنوان انتخاب کنید PostgreSQL
و URL اتصال را عبور دهید postgresql://{{username}}:{{password}}@localhost:5432/database-name
💡here ، PostgreSQL روش اتصال ، نام کاربری و رمز عبور کاربر طاق ایجاد شده در مرحله قبل و آدرس IP سرویس Clusterip ایجاد شده در هنگام نصب Postgres و به دنبال آن پایگاه داده به عنوان postgres است.
دلیل استفاده از Clusterip خصوصی این است که این پایگاه داده همان خوشه را اجرا می کند و از طریق سرویس مرتبط با StateFulset قابل دسترسی است.
برای افزایش بیشتر امنیت ، پیکربندی TLS نیز می تواند در این مرحله اضافه شود.
🤐tlet نقش این اتصال را پیکربندی کنید. نقش های پویا برای هر درخواست خدمات ، اعتبار پایگاه داده منحصر به فرد و محدود را ایجاد می کند. در مقابل ، نقش های استاتیک نقش های طاق را به نام های کاربری موجود در پایگاه داده موجود می رساند ، و طاق چرخش خودکار رمز عبور را برای این اعتبار استاتیک مدیریت می کند.
⚠ نقش های استاتیک برای اعتبار ریشه توصیه نمی شود زیرا چرخاندن آنها دیگر احراز هویت بین طاق و postgres را حفظ نمی کند.
این قسمت اصلی است. این نقش به اتصال پایگاه داده متصل شده است و نام کاربری و رمز عبور پویا را با 10 دقیقه اعتبار (پیش فرض TTL) و حداکثر TTL 1 روز ایجاد می کند.
منبع تصویر
ما اعتبار را فقط 10 دقیقه برای تأیید چرخش حفظ کرده ایم. بر اساس حساسیت برنامه ، مدت زمان TTL قابل تنظیم است.
در اینجا creation statement
وت revocation statement
متشکل از نمایش داده های SQL است که هنگام ایجاد درخواست اعتبار جدید انجام می شود. در مثال ما ، این یک نقش پایگاه داده با رمز عبور و انقضا و کمک هزینه ایجاد می کند select
امتیازات در جدول (های) داده شده. در زمان انقضا ، تمام مجوزها را لغو می کند و کاربر را رها می کند.
همانطور که در تصویر زیر نشان داده شده است ، با کلیک روی “تولید اعتبار” از UI طاق ، اعتبارنامه های کوتاه مدت یک بار نمایش داده می شوند.
حال بیایید با این کاربر وارد شوید و تأیید کنیم که آیا مجوزهای اعطا شده اعمال شده است یا خیر. همانطور که در زیر نشان داده شده است ، این کاربران موقت را با تاریخ انقضاء خود به عنوان ویژگی ها و هر عمل دیگری از آن نشان می دهد select
کار نمی کند
خوب ، خیلی خوب اما چگونه می توان این اسرار را در خوشه به طور بومی واگذار کرد؟ 🤔🤔 وجود دارد **vaultDynamicSecrets**
در تصویر
👉🏻 3) منبع VaultDynamicsecret را پیکربندی کنید:
از آنجا که ما قبلاً داریم externalSecrets
برای دریافت اعتبار بومی از فروشگاه های مخفی خارجی مانند طاق ، ادغام این اعتبار پویا با همان ، استفاده از سایر منابع Kubernetes از طریق اسرار بومی ، انعطاف پذیرتر می شود.
به طور پیش فرض ، منبع خارجی ما از قسمت 1 فقط از موتور مخفی KV (ارزش کلید) پشتیبانی می کند. در اینجا ، ما استفاده خواهیم کرد ژنراتور که امکان تولید مقادیر از منبع داده شده را فراهم می کند. ژنراتورها را می توان به عنوان یک منبع سفارشی تعریف کرد و دوباره در خارج از کشور استفاده کرد.
ژنراتور VaultDynamicsecret به طور خاص با طاق Hashicorp برای بازیابی اسرار پویا مستقیم از موتور اسرار پایگاه داده Vault ادغام می شود.
apiVersion: generators.external-secrets.io/v1alpha1
kind: VaultDynamicSecret
metadata:
name: db-credentials
namespace: external-secrets
spec:
path: "/database/creds/dynamicrole"
method: "GET"
provider:
server: " SERVER ADDRESS>"
auth:
tokenSecretRef:
name: "vault-token"
namespace: "external-secrets"
key: "token"
این تعریف منابع ایجاد می کند VaultDynamicSecret
، که به صورت پویا اعتبار پایگاه داده را از طاق Hashicorp بازیابی می کند.
اعتبار از مسیر مشخص شده دریافت می شود (/database/creds/dynamicrole)
در طاق با استفاده از بدست آوردن روش
آدرس سرور Vault و تأیید اعتبار ارائه شده است ، با نشانه ذخیره شده در یک راز Kubernetes به نام Vault-Token در فضای سوکراس های خارجی.
این یک طرف پل است. از طرف بعدی ، بیایید ایجاد کنیم externalSecret
منبع برای ارتباط با vaultDynamicSecrets
منابع و اعتبارنامه های کوتاه مدت را به صورت بومی بدست آورید.
در اینجا ، یک راز بومی Kubernetes به نام db-credentials
با نگه داشتن فاصله تازه به 1 ساعت و ارجاع منبع داده از ژنراتوری که در آخرین مرحله ایجاد کردیم ، ایجاد می شود.
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: "dynamic-external-secret"
namespace: external-secrets
spec:
refreshInterval: "1h"
target:
name: db-credentials
dataFrom:
- sourceRef:
generatorRef:
apiVersion: generators.external-secrets.io/v1alpha1
kind: VaultDynamicSecret
name: "db-credentials"
آماده.! بیایید منابع را مستقر کنیم 🙂
اعتبار تصویر
بیایید با توصیف منبع مخفی در فضای نام ، تغییرات را تأیید کنیم external-secrets
بشر دو کلید با نام کاربری و رمز عبور موجود در آن ذخیره می شوند. این عمل توسط بیانیه ایجاد اعلام شده در نقش ضمیمه شده به موتور اسرار پایگاه داده پشتیبانی می شود.
چگونه می توانیم بدون تأیید چرخش به جلو حرکت کنیم؟ the دستورات زیر را برای واکشی مقادیر رمزگشایی اسرار در فواصل 10 دقیقه اجرا کنید و تغییرات عمل را ببینید.
# Fetch username from the secret
kubectl get secret db-credentials -n external-secrets -o jsonpath="{.data.username}" | base64 --decode; echo
# Fetch password from the secret
kubectl get secret db-credentials -n external-secrets -o jsonpath="{.data.password}" | base64 --decode; echo
اعتبار GIF
و کار کرد ما اعتبارنامه های چرخشی را با امتیازات ریز دانه ای که در هر مدت TTL منقضی می شود ، گرفتیم.
اگر هنوز در حال خواندن هستید ، از اینکه آن را به پایان رسانده اید متشکرم. ما با معرفی اعتبار پایگاه داده پویا با طاق ، مدیریت اسرار را به سطح بعدی رسانده ایم! ما به جای تکیه بر رمزهای عبور خسته کننده استاتیک و طولانی مدت ، اکنون اعتبارنامه های زودگذر داریم که اتوماتیک ، زمان محدود با چرخش داخلی و یکپارچه تزریق شده به غلافهای Kubernetes از طریق بیرونی است.! wohoooo
این بدان معناست که دیگر رمزهای عبور پایگاه داده سخت تر ، کاهش خطرات امنیتی از اعتبار نشت شده و هیچ سردرد چرخش دستی – همه چیز خودکار است! 🚀
با این کار ، بارهای کاری Kubernetes ما اکنون در کنترل داده های حساس ایمن تر ، مقیاس پذیر تر و کاملاً خودکار هستند.
💡 بیایید به هم وصل شویم!
با تشکر از خواندن! 🎉 امیدوارم این راهنما به شما در درک اسرار پویا و چرخش خودکار اعتبار در Kubernetes کمک کند. اگر بازخورد ، پیشنهادات دارید یا می خواهید بیشتر بحث کنید ، احساس راحتی کنید! 💬
مرا در LinkedIn پیدا کنید و پروژه کامل را در GitHub بررسی کنید. بیایید راه حل های ابری باهوش تر و امن تر را با هم بسازیم! 🚀