ساختن ایمیج های داکری به کمک BuildKit - بخش دوم
خب با یک فاصله طولانی از بخش اول میرسیم به بخش دوم ساختن ایمیج های داکری به کمک BuildKit
در این قسمت قراره درباره امنیت و در واقع امن کردن داکرفایل یا ایمج هامون صحبت کنیم.وقتی که نیاز داریم مثلا به یک مخزن خصوصی وصل بشیم یا یک فایل رو از یک سایت خاص💪 مثلا sonaops.ir دانلود کنیم یا ... و مجبوریم یک سری اطلاعات شخصی (نام کاربری رمز عبور و...) رو وارد کنیم در صورت رعایت نکردن یکسری اصول امنیتی ایمیج ما مستعد خرابکاری میشه و...
تا قبل از BuildKit یک روش استفاده از ARG داخل داکر فایل و مقداردهی اون هنگام build به کمک build-arg بود (و هست) مشکل این روش اینه که از طریق خواندن تاریخچه ساخت یک ایمیج این اطلاعات درز میکنه و البته از اون بدتر اگه این اطلاعات رو به نوعی داخل ایمیج ذخیره کرده باشید به راحتی قابل دسترسی هست (حتی اگه تو یک مرحله اونو پاک کرده باشید)
سرچ زیر تو گوگل احتمالا نتیجه های جالبی رو برگردونه
inurl:Dockerfile site:github.com intext:"ARG password" OR intext:"ARG secret" OR intext:"ARG pass"
و در ادامه در صورت دستیابی به ایمیج مربوطه
docker history --no-trunc image-name
اگر (مثل من) به عمق فاجعه پی بردید ورود شما رو به باشگاه «انکس که نداند و بداند که نداند» ها تبریک میگویم 😎
It is not recommended to use build-time variables for passing secrets like github keys, user credentials etc. Build-time variable values are visible to any user of the image with the
docker history
command.
داکرفایل زیر رو در نظر بگیرید
ARG username
ARG password
RUN curl -O -u $username:$password http://www.sonaops.ir/secretfile || true
و ساخت ایمیج از اون
dcr build --build-arg username=mohammad --build-arg password=saheb -t secret:1 .
در ادامه دیدن تاریخچه ساخت ایمیج
با استفاده از BuildKit (سینتکس جدید) میتونیم این مشکل رو برطرف کنیم
داکر فایل
FROM alpine
RUN --mount=type=secret,id=userpass curl -O -u $(cat /run/secrets/userpass) http://www.sonaops.ir/secretfile || true
و در ادامه
DOCKER_BUILDKIT=1 dcr build -t secret:2 --secret id=userpass,src=usrpass.txt .
نکته : usrpass.txt یک فایل متنی در مسیر جاری شامل نام کاربری و رمزعبور است در اینجا mohammad:saheb
نکته: به صورت پیش فرض فایلی که در قسمن src وارد میکنیم در مسیری به فرمت زیر در درسترس است در اینجا run/secrets/userpass/ میشود
/run/secrets/
+ id
در ادامه دیدن تاریخچه ساخت ایمیج
نکته : با استفاده از دستور cat حتی بدون BuildKit هم اطلاعات از طریق خواندن تاریخچه ساخت ایمیج درز نمیکند ولی لازمه آن کپی کردن فایل به داخل ایمیج است که باز از نظر امنیتی مشکل ساز است ولی در روش BuildKit فایل usrpass.txt داخل ایمیج کپی نمیشود.
ادامه دارد...
نظرات
ارسال یک نظر