فایل Compose مربوط به VPN را به اشتراک میگذارید؟ اسرار را از نسخهٔ رندرشده پاک کنید
یک کلید خصوصی میتواند در YAML، در یک مقدار محیطی یا در خروجی حلشدهای باشد که کسی به آن نگاه نکرده است. همان نسخهای را بررسی کنید که واقعاً پیوست میکنید.
هر بار که یک فایل Compose را به اشتراک میگذارید، دو اثر وجود دارد: نسخهای که نوشتهاید و نسخهای که ابزار پس از جایگزینی متغیرها میسازد. دومی معمولاً حساسیت بیشتری از اولی دارد و همان است که مردم بدون خواندن در گزارش مشکل میچسبانند. اگر فقط فایل منبع را مرور کنید، سند اشتباه را مرور کردهاید.
پیش از تصمیم دربارهٔ اینکه چه چیزی را حذف کنید، مقایسه کنید هر نسخه چه چیزی میتواند داشته باشد.
مدل رندرشده سند دیگری است
Compose متغیرهای محیطی را حل میکند، فایلهای بازنویسی را ادغام میکند و پیکربندی مؤثری میسازد که خواننده دیگر نمیتواند آن را از مقادیر دستنویس تشخیص دهد. ارجاعی مانند نام یک متغیر در منبع، در خروجی به خودِ نشانهٔ حساب تبدیل میشود. ساختاری که فایل را برای عیبیابی مفید میکند از این تبدیل جان سالم به در میبرد؛ هر چیزی هم که هرگز نباید در آن میبود، باقی میماند.
پیش از پیوست کردن، خودتان فایل را رندر کنید و آن خروجی را بهعنوان اثری که مرور میکنید در نظر بگیرید. اگر نمیتوانید آن را رندر کنید، نمیتوانید بدانید چه چیزی را منتشر میکنید.
اسرار در جاهای بیشتری از فیلد کلید قرار دارند
با چیزهای واضح شروع کنید: کلیدهای خصوصی، کلیدهای از پیش بهاشتراکگذاشته، نشانهها، گذرواژهها و نشانیهای اتصالی که اعتبارنامه در خود دارند. سپس به هر چیزی که فایل به آن اشاره میکند نگاه کنید، چون ارجاع به معنای پاکسازی نیست. فایل محیطی که در سرویس سوار میشود، فایل پیکربندی که از میزبان متصل میشود، برچسبی که نشانهای حمل میکند و آرگومان فرمانی که گذرواژه دارد، همه حتی وقتی YAML تمیز به نظر میرسد با استقرار سفر میکنند. کلیدی که در متغیری با نام آرامکننده چسبانده شده باشد هنوز کلید است.
مسیرهای میزبان و نام سرویسها نوع دومی از اطلاعات را لو میدهند. نام پوشهٔ خانه، نام میزبان داخلی یا محدودهٔ شبکه میتواند یک شخص یا سازمان را بدون داشتن حتی یک اعتبارنامه شناسایی کند، و این زمینه هم به همان دلیل ارزش حذف دارد.
اعلام یک راز، خود راز نیست
اشیای راز Compose اعلام را از مواد جدا میکنند: سرویس یک مسیر یا هدف میگیرد و محتوا جای دیگری زندگی میکند. نگه داشتن اعلام همراه با جایگزینی مواد معمولاً معاملهٔ درستی است، چون بازبین باید ببیند رازی وجود دارد و چگونه سوار شده است. آنچه نباید باقی بماند خود محتواست.
برچسبها و نظرها نیز همین برخورد را شایستهاند. نظری که میگوید کدام مسیر گنجه کلید تولید را نگه میدارد، به مهاجم میگوید کجا را نگاه کند، حتی اگر هیچ کلیدی نداشته باشد.
شکل را نگه دارید تا فایل همچنان عیبیابی کند
پاکسازیای که حالت شبکه، نسخهٔ ایمیج یا تنظیمات قابلیت را برمیدارد، فایلی میسازد که هیچکس نمیتواند با آن عیبیابی کند. مقادیر حساس را جایگزین کنید و روابط را نگه دارید: کدام سرویس چه چیزی را سوار میکند، به کدام شبکه میپیوندد، به کدام دستگاه نیاز دارد. این همان بخشی است که خواننده از آن استفاده میکند برای توضیح یک مسیر گمشده یا دستگاهی که در دسترس نیست. همچنین همان نسخهای است که همکاری میتواند با استقرار کارآمد خود مقایسه کند.
docker compose -f compose.yaml config > rendered.yaml
grep -nE 'PRIVATE_KEY|PASSWORD|TOKEN|PSK|PrivateKey|passphrase' rendered.yaml
wc -l rendered.yaml
نسخهٔ پاکسازیشده را طوری مستقر نکنید که گویی نسخهٔ اصلی کارآمد است. این یک توصیف است، و توصیفی که برای ایمن به نظر رسیدن ویرایش شده باشد، به شکلهایی شکست میخورد که شبیه خطاهای پیکربندی است.
اگر مواد افشا شده است، آن را جایگزین کنید
برداشتن پیوست، نسخههایی را که دیگران قبلاً ساختهاند برنمیدارد، و آینهها و حافظههای نهان نسخههای خودشان را نگه میدارند. برای هر چیزی که نشت کرده از فرایند ابطال و جایگزینی صادرکننده استفاده کنید، سپس استقرار را بهروزرسانی کنید. ترتیب مهم است، چون جایگزینی اول و ابطال بعد پنجرهای با دو اعتبارنامهٔ معتبر باقی میگذارد.
در رشتههای پشتیبانی، با خطای دقیق، نسخهٔ ایمیج، حالت شبکه و همان یک تنظیم غیررازی که اهمیت دارد شروع کنید. این ترکیب، گم شدن دستگاه یا شکستن مسیر را بسیار بیشتر از کلید توضیح میدهد.