به راحتی اسرار Kubernetes را در Base64 رمزگذاری / رمزگشایی کنید

Summarize this content to 400 words in Persian Lang
کاری که ما باید همیشه هنگام دستکاری اشیاء Secrets در Kubernetes انجام دهیم این است که “اسرار” موجود در Secret خود را به صورت متنی ساده نمایش دهیم (یا رمزگذاری آنها).
برای کسانی که نمیدانند، Secrets در Kubernetes متأسفانه خیلی محرمانه نیستند، زیرا چیزی بیشتر یا کمتر از رشتههای کدگذاری شده base64 (که در نتیجه چیزی اما امن هستند) نیستند. راستش را بگویم، من حتی تعجب می کنم که چرا اصلاً آنها را رمزگذاری می کنم. تنها امنیتی که ما در مقایسه با ConfigMaps اضافه می کنیم این است که این رشته توسط انسانی که سر خود را روی شانه شما بگذارد قابل خواندن نیست.
به هر حال، احتمالاً مجبور خواهید بود رشته ها را در base64 رمزگذاری یا رمزگشایی کنید و گاهی اوقات کمی دردناک است. روش رایج پذیرفته شده این است که به سادگی از echo لینوکس و باینری base64 استفاده کنید.
echo “ma string” | base64
bWEgc3RyaW5nCg==
echo bWEgc3RyaW5nCg== | base64 -d
my string
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
تایپ کردن سخت است، اما نسبتاً پیش پا افتاده است.
این یک تله است!
جز اینکه تله وجود دارد!
اولین موردی که هنگام رمزگذاری دریافت خواهید کرد. در مثال اول من، رشته بسیار کوتاه است. و گاهی اوقات، اندازه مهم است.
echo “my long string” | base64
bWEgc3RyaW5nIHRyw6hzIGxvbmd1ZSBzdHJpbmcgcG91ciBtb250cmVyIHF1ZSDDp2EgdmEgcGFz
IGxlIGZhaXJlCg==
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
در اینجا ما با یک شکست خط در رشته خروجی خود مواجه می شویم. اما، اگر این را در Kubernetes YAML خود کپی و جایگذاری کنید، با یک خطای نحوی بزرگ مواجه خواهید شد.
YAML تنها زمانی معتبر خواهد بود که کل رشته را روی یک خط قرار دهید.
echo “my long string” | base64 -w0
bWEgc3RyaW5nIHRyw6hzIGxvbmd1ZSBzdHJpbmcgcG91ciBtb250cmVyIHF1ZSDDp2EgdmEgcGFzIGxlIGZhaXJlCg==
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
و تمام نشده است!
تله 2 دوباره یک مسئله شکست خط است، اما این بار در رشته base64.
در واقع، این فوق العاده خائنانه است زیرا در ابتدا آن را روی صفحه نمی بینید، اما باید بدانید که اکو یک شکست خط در انتهای رشته شما اضافه می کند. بنابراین بازگشتی که در base64 دریافت کردید شامل یک شکست خط است که تقریباً به طور سیستماتیک هنگام مدیریت Secrets ناخواسته خواهد بود.
بنابراین دستور صحیح echo نیست بلکه echo -n است!
echo “my string” | base64
bWEgc3RyaW5nCg==
echo -n “my string” | base64 -w0
bWEgc3RyaW5n
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
خوب این شروع به آزاردهنده شدن کرده است…
رمزگشایی خوشبختانه ساده تر است. دستور داده شده در ابتدا کافی است، حتی اگر اضافه کردن “-n” به اکو ایمن تر باشد:
echo -n bWEgc3RyaW5n | base64 -d
my string
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
چند شخصیت به دست آورید
از آنجایی که تنبل هستم، دنبال ترفندی گشتم تا چند کاراکتر را برای تایپ ذخیره کنم. راه حلی وجود دارد، اما متأسفانه فقط برای رمزگشایی کار می کند، زیرا در مورد رمزگذاری، خطر اضافه کردن یک شکست خط ناخواسته را داریم:
echo bWEgc3RyaW5n | base64 -d
base64 -d bWEgc3RyaW5n
my string
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
ما فقط 3 کاراکتر را ذخیره کردیم، به خصوص یک “|”، که انجام آن در صفحه کلید استاندارد qwerty بسیار دشوارتر از 3 ” است.
کمی ساده تر
در اینجا یک اسکریپت کوچک برای آسان کردن زندگی ما آمده است:
~$ cat > b64 EOF
> #!/bin/bash
> echo -e “Base64 encoding.. \n”
> for arg in “\$@”; do
> echo “\$arg :”
> echo -n “\$arg” | base64
> echo
> done
> EOF
~$ cat > b64d #!/bin/bash
> echo -e “Base64 decoding.. \n”
> for arg in “\$@”; do
> echo “\$arg :”
> echo -n “\$arg” | base64 -d
> echo
> done
> EOF
~$ sudo cp b64* /usr/local/bin/
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
اکنون میتوانید مستقیماً b64 و سپس هر تعداد رشته را فراخوانی کنید تا مقدار آنها رمزگذاری شود، یا b64d به دنبال هر تعداد رشته برای رمزگشایی آنها.
کاری که ما باید همیشه هنگام دستکاری اشیاء Secrets در Kubernetes انجام دهیم این است که “اسرار” موجود در Secret خود را به صورت متنی ساده نمایش دهیم (یا رمزگذاری آنها).
برای کسانی که نمیدانند، Secrets در Kubernetes متأسفانه خیلی محرمانه نیستند، زیرا چیزی بیشتر یا کمتر از رشتههای کدگذاری شده base64 (که در نتیجه چیزی اما امن هستند) نیستند. راستش را بگویم، من حتی تعجب می کنم که چرا اصلاً آنها را رمزگذاری می کنم. تنها امنیتی که ما در مقایسه با ConfigMaps اضافه می کنیم این است که این رشته توسط انسانی که سر خود را روی شانه شما بگذارد قابل خواندن نیست.
به هر حال، احتمالاً مجبور خواهید بود رشته ها را در base64 رمزگذاری یا رمزگشایی کنید و گاهی اوقات کمی دردناک است. روش رایج پذیرفته شده این است که به سادگی از echo لینوکس و باینری base64 استفاده کنید.
echo "ma string" | base64
bWEgc3RyaW5nCg==
echo bWEgc3RyaW5nCg== | base64 -d
my string
تایپ کردن سخت است، اما نسبتاً پیش پا افتاده است.
این یک تله است!
جز اینکه تله وجود دارد!
اولین موردی که هنگام رمزگذاری دریافت خواهید کرد. در مثال اول من، رشته بسیار کوتاه است. و گاهی اوقات، اندازه مهم است.
echo "my long string" | base64
bWEgc3RyaW5nIHRyw6hzIGxvbmd1ZSBzdHJpbmcgcG91ciBtb250cmVyIHF1ZSDDp2EgdmEgcGFz
IGxlIGZhaXJlCg==
در اینجا ما با یک شکست خط در رشته خروجی خود مواجه می شویم. اما، اگر این را در Kubernetes YAML خود کپی و جایگذاری کنید، با یک خطای نحوی بزرگ مواجه خواهید شد.
YAML تنها زمانی معتبر خواهد بود که کل رشته را روی یک خط قرار دهید.
echo "my long string" | base64 -w0
bWEgc3RyaW5nIHRyw6hzIGxvbmd1ZSBzdHJpbmcgcG91ciBtb250cmVyIHF1ZSDDp2EgdmEgcGFzIGxlIGZhaXJlCg==
و تمام نشده است!
تله 2 دوباره یک مسئله شکست خط است، اما این بار در رشته base64.
در واقع، این فوق العاده خائنانه است زیرا در ابتدا آن را روی صفحه نمی بینید، اما باید بدانید که اکو یک شکست خط در انتهای رشته شما اضافه می کند. بنابراین بازگشتی که در base64 دریافت کردید شامل یک شکست خط است که تقریباً به طور سیستماتیک هنگام مدیریت Secrets ناخواسته خواهد بود.
بنابراین دستور صحیح echo نیست بلکه echo -n است!
echo "my string" | base64
bWEgc3RyaW5nCg==
echo -n "my string" | base64 -w0
bWEgc3RyaW5n
خوب این شروع به آزاردهنده شدن کرده است…
رمزگشایی خوشبختانه ساده تر است. دستور داده شده در ابتدا کافی است، حتی اگر اضافه کردن “-n” به اکو ایمن تر باشد:
echo -n bWEgc3RyaW5n | base64 -d
my string
چند شخصیت به دست آورید
از آنجایی که تنبل هستم، دنبال ترفندی گشتم تا چند کاراکتر را برای تایپ ذخیره کنم. راه حلی وجود دارد، اما متأسفانه فقط برای رمزگشایی کار می کند، زیرا در مورد رمزگذاری، خطر اضافه کردن یک شکست خط ناخواسته را داریم:
echo bWEgc3RyaW5n | base64 -d
base64 -d bWEgc3RyaW5n
my string
ما فقط 3 کاراکتر را ذخیره کردیم، به خصوص یک “|”، که انجام آن در صفحه کلید استاندارد qwerty بسیار دشوارتر از 3 ” است.
کمی ساده تر
در اینجا یک اسکریپت کوچک برای آسان کردن زندگی ما آمده است:
~$ cat > b64 EOF
> #!/bin/bash
> echo -e "Base64 encoding.. \n"
> for arg in "\$@"; do
> echo "\$arg :"
> echo -n "\$arg" | base64
> echo
> done
> EOF
~$ cat > b64d #!/bin/bash
> echo -e "Base64 decoding.. \n"
> for arg in "\$@"; do
> echo "\$arg :"
> echo -n "\$arg" | base64 -d
> echo
> done
> EOF
~$ sudo cp b64* /usr/local/bin/
اکنون میتوانید مستقیماً b64 و سپس هر تعداد رشته را فراخوانی کنید تا مقدار آنها رمزگذاری شود، یا b64d به دنبال هر تعداد رشته برای رمزگشایی آنها.