کلید دسترسی IAM اتصال سرویس AWS را در خط لوله Azure DevOps مدیریت کنید
خلاصه
- Service Connection نشان دهنده یک سرویس اصلی در Azure DevOps است، هویتی که از احراز هویت Headless استفاده می کند.
- ما یک اتصال از Azure Pipelines برای خدمات خارجی و راه دور برای اجرای وظایف در یک کار ایجاد می کنیم. پس از برقراری اتصال، می توانید اتصال سرویس را مشاهده، ویرایش و امنیت اضافه کنید.
- برای اینکه Azure DevOps (ADO) با سرویسهای AWS کار کند، افزونه AWS Toolkit را برای Microsoft Azure DevOps نصب میکنیم که حاوی وظایفی است که میتوانید در تعاریف ساخت و انتشار در Azure DevOps برای تعامل با سرویسهای AWS استفاده کنید (مخصوصاً زمانی که عامل ADO نمونههای EC2 نباشد. می تواند نمایه نمونه را فرض کند)
- هنگامی که یک اتصال سرویس با نوع AWS در ADO ایجاد می کنیم، باید حساب AWS ایجاد کنیم و کلید Access و کلید اعتبار را برای اتصال سرویس برای دسترسی به سرویس AWS پر کنیم.
- به عنوان بهترین روش امنیتی توصیه می شود کلیدهای دسترسی IAM را به صورت دوره ای بچرخانید. در این پست وبلاگ، با نحوه ایجاد اتصال سرویس AWS با کمترین امتیاز و بهترین عملکرد امنیتی و نحوه چرخش خودکار کلید دسترسی با استفاده از سرویسهای بدون سرور AWS مانند AWS lambda، قانون Eventbridge و AWS Stepfunction آشنا خواهید شد.
فهرست مطالب
🚀 بررسی اجمالی راه حل
- کلید دسترسی IAM توسط خط لوله Azure DevOps برای مدیریت منابع توسعه AWS و همچنین برخی منابع تولید استفاده می شود، بنابراین باید به صورت هفتگی چرخانده شود. و برای کاهش تأثیر بر کارهای خط لوله، ما این عملیات را در روز یکشنبه برنامه ریزی می کنیم.
- این عملیات توسط تابع مرحله ای AWS هماهنگ شده است که توسط توابع لامبدا برای کنترل کلیدهای دسترسی چرخان، ذخیره کلید دسترسی در Secret Manager و به روز رسانی کلید دسترسی جدید به اتصال سرویس Azure DevOps (نوع AWS) جذب می شود، در نهایت، وضعیت نتیجه را به کانال شل
- این عملیات همچنین به اعتبارنامه های ADO مانند رمز دسترسی شخصی (PAT)، URL فضای کاری و شناسه پروژه نیاز دارد که در ذخیره پارامتر SSM ذخیره می شوند.
🚀 جزئیات جریان فرآیند
### 🚀 عملکرد Lambda – چرخش کلید دسترسی و بهروزرسانی به مدیر مخفی
- منبع کنترل rotate-access-key.py
- این توابع به نقش سرویس IAM نیاز دارند که دارای مجوز ایجاد/حذف کلید دسترسی IAM و قرار دادن آن در مدیر مخفی است.
### 🚀 تابع Lambda – ارسال به Slack
- منبع کنترل send-slack.py
- این تابع به نقش سرویس IAM نیاز دارد که مجوز دریافت URL webhook Slack را از ذخیره پارامتر دارد
### 🚀 عملکرد Lambda – اتصال سرویس Azure DevOps
راه حل ایجاد اتصال سرویس Azure DevOps – با استفاده از تابع لامبدا، اما دو راه برای این وجود دارد
- ساخت لایه سفارشی لامبدا که شامل ماژول Azure DevOps Python برای اجرای Azure DevOps CLI است.
- تصویر ظرف داکر لامبدا را بسازید
چالش ها
- چرا اینجا چالش داریم؟ بسته azure-cli مشکل بزرگی می تواند وزن کم کند. در زمان نوشتن این پست، نصب یا بسته بندی azure-cli بیش از 1 گیگابایت اندازه نیاز دارد که برای عملکرد لامبدا بسیار بزرگ است، به خصوص لایه لامبدا سفارشی دارای محدودیت 250 مگابایت (از حالت فشرده) برای فایل فشرده استقرار است.
- خوشبختانه، راه حلی برای کاهش اندازه تصویر داکر وجود دارد که فقط با نصب کتابخانههای Azure cli کافی
تصویر ظرف لامبدا را با استفاده از خط خطی بسازید
Dockerfile که تقریباً تصویر کانتینر را می سازد
299.41 MB
. تصویر ظرف لامبدا به صورت CLI لاجوردی برای اجرا پخش میشودazure DevOps
دستوراتبرای CI، ساخت و استقرار خودکار به تصویر ظرف داکر لامبدا، از Codepipeline با مراحل زیر استفاده میکنیم.
- کد منبع را برای commit merge to master بکشید
- کد بیلد را با buildspec.yml راه اندازی کنید
ما میتوانیم از azure-DevOps-Python-api برای نوشتن کد پایتون برای مدیریت اتصال سرویس ADO استفاده کنیم، اما استفاده از ابزار Wrapper آن مانند Azure DevOps CLI بسیار راحتتر است، بنابراین من bash script run.sh را مینویسم و از Python برای اجرای آن استفاده میکنم.
subprocess.check_call(f"export AZURE_DevOps_EXT_PAT={_pat}; ./run.sh {access_key} {cred}", shell=True)
🚀 تابع مرحله را تست کنید
- پیش نیاز: ابتدا باید پشته خط لوله را مستقر کنید، کد را به codecommit فشار دهید تا خط لوله را برای استقرار پشته ها راه اندازی کند و تصویر کانتینر ساخت/فشار/به روز رسانی را راه اندازی کند.
- بیایید نمودار کامل را بررسی کنیم
- ماشه دستی
start execution
از ماشین آلات دولتی برای آزمایش
🚀 نتیجه گیری
- ما اکنون یک روش خودکار برای چرخش هفتگی کلید دسترسی AWS در اتصال سرویس Azure DevOps داریم. هر وضعیت/مرحله ناموفق با جزئیات مربوط به مرحله ناموفق و پیام خطا نسبت به سستی هشدار داده می شود.
- باید آگاه باشید که
simflexcloud-d1-azure-devops-sfn-rotate-key-task
وظیفه شامل کلید اعتبار AWS در آن نیستOutput
به دلیل امنیت، بنابراین باید آن مقدار را از Secret Manager دریافت کند
منابع: