آنچه در این مقاله میخوانید
آموزش مدیریت امنیت با HashiCorp Vault در اوبونتو 24.04
۲۷ اردیبهشت ۱۴۰۴
Vault یک ابزار متنباز است که قابلیت ذخیره، توزیع امن و قابل اعتماد اطلاعات مهم مانند کلیدهای API، توکنهای دسترسی و گذرواژهها را برای کاربران خود فراهم میکند. ابزارهایی مانند Vault هنگام استقرار برنامههایی که نیاز به استفاده از اطلاعات حساس دارند، اهمیت ویژهای پیدا میکنند.
با سرور ابونتو لیارا، بدون دردسر سرور خود را تنها با چند کلیک مدیریت کنید.
✅ منابع کاملاً اختصاصی و پایدار✅ سرعت بالا و ترافیک نامحدود✅ امنیت پیشرفته و پشتیبانی 24/7
خرید و راهاندازی سرور اوبونتو ساعتی لیارا
آنچه در ادامه خواهید خواند:
- الزامات پیش از شروع فرآیند آموزش
- آموزش نصب Vault
- پیکربندی Vault
- راه اندازی اولیه Vault
- ذخیره و بازیابی اطلاعات محرمانه در Vault
- ساخت سیاست دسترسی در Vault
- سوالات متداول
- جمع بندی

در این مطلبی از لیارا موارد زیر را اعمال خواهیم کرد.
- نصب Vault و پیکربندی آن به عنوان یک سرویس سیستمی
- راهاندازی یک فضای ذخیرهسازی داده رمزگذاریشده روی دیسک
- ذخیره و بازیابی مطمئن یک مقدار حساس از طریق TLS
اوبونتو Ubuntu چیست؟ (معرفی کامل کاربردها + ویژگیها)
اوبونتو Ubuntu
الزامات پیش از شروع فرآیند آموزش
قبل از آنکه آموزش را شروع کنید، به موارد زیر نیاز خواهید داشت.
- یک سرور اوبونتو 24.04 که مطابق با تنظیمات اولیه اوبونتو 24.04 باشد و یک یوزر یا کاربر غیر روت (non-root) با دسترسی های sudo را در اختیار داشته باشید.
- از یک گواهی TLS برای ایمن سازی API های مبتنی بر HTTP در Vault استفاده کنید.
توجه: در زمان نصب اولیه Vault، یک گواهی TLS خود امضا ساخته میشود. اگر دامنه یا گواهی TLS را در اختیار خود نداشتهاید اما قصد انجام این آموزش را داشته اید، میتوانید با اضافه کردن گزینه -tls-skip-verify
به دستورات یا تعریف متغیر محیطی VAULT_SKIP_VERIFY
، اعتبارسنجی TLS را غیرفعال کنید.
این گزینه تنها برای تست و آزمایش مناسب است و نباید در محیط های تولیدی یا پروداکشن (Production) استفاده شود.
آموزش نصب Vault
شرکت HashiCorp نرمافزار Vault را به صورت یک پکیج استاندارد Debian/Ubuntu ارائه کرده است. در ادامه مراحل اضافه کردن مخزن رسمی Vault به منابع پکیج های سرور شرح داده خواهیم داد.
ابتدا کلید GPG مربوط به HashiCorp را به مدیر بسته اضافه کنید تا سیستم به مخازن آنها را به رسمیت بشناسد. برای اینکار از دستور زیر استفاده کنید.
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
بعد از آن مخزن Vault را به لیست منابع پکیجهای خود اضافه کنید تا در بهروز رسانیهای سیستم نیز بررسی شود.
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
در این قسمت باید Vault را نصب کنید.
sudo apt install vault
دیگر میتوانید از دستور vault
استفاده کنید. برای اینکه مطمئن شوید که به درستی نصب شده است از دستور زیر استفاده کنید.
vault --version
خروجی که به شما نشان خواهد داد به صورت زیر خواهد بود.
Vault v1.8.5 (647eccfe0bd5817bdd8628f3c3171402dfc8a8fc)
دیگر فایل اجرایی Vault بر روی سیستم نصب شده است. در مرحله بعدی باید Vault را به روشی پیکربندی کنید که به عنوان یک سرویس سیستمی اجرا شود.
آموزش نصب و راهاندازی فایروال UFW در سرور مجازی اوبونتو به زبان ساده
نصب و راهاندازی فایروال UFW در سرور مجازی اوبونتو
پیکربندی Vault
با نصب کردن پکیجهای Vault، به صورت خودکار کاربر سیستمی به نام vault
ساخته میشود و یک سرویس سیستمی نیز برای اجرای Vault در پس زمینه تنظیم خواهد شد. در این قسمت باید چند تغییر اساسی را در پیکربندی پیش فرض را بسازید تا از گواهیهای HTTPS که توسط Let’s Encrypt تولید شدهاند استفاده شود.
نکته قابل توجه: در این مطلب ما به صورت پیش فرض، Vault از فایل سیستم برای ذخیره اطلاعات رمزگذاریشده روی دیسک محلی در مسیر /opt/vault
استفاده میکند. این روش برای استقرارهای محلی یا تکسرور مناسب است که نیاز به تکرار داده ندارند.
پیکربندی پیشفرض Vault در فایل /etc/vault.d/vault.hcl
قرار دارد. این فایل برای کنترل تنظیمات مختلفی مانند محل ذخیره اطلاعات رمزگذاریشده استفاده میکند.
فایل vault.hcl
را با استفاده از ویرایشگر مورد نظر خود باز کنید.
sudo nano /etc/vault.d/vault.hcl
بخش listener "tcp"
را که مربوط به پیکربندی HTTPS است پیدا کنید. اگر از nano استفاده میکنید، با فشار دادن Ctrl+W
و جستجوی عبارت listener "tcp"
سریعتر به آن قسمت میرسید.
به عنوان مثال:
...
# HTTPS listener
...
listener "tcp" {
address = "0.0.0.0:8200"
tls_cert_file = "/opt/vault/tls/tls.crt"
tls_key_file = "/opt/vault/tls/tls.key"
...
}
فایل های tls_cert_file
و tls_key_file
را ویرایش کنید تا به گواهی و کلید خصوصی صادر شده توسط Let’s Encrypt اشاره کنند.
اسم دامنه خود را جایگزین your_domain
نمایید.
listener "tcp" {
...
tls_cert_file = "/etc/letsencrypt/live/your_domain/fullchain.pem"
tls_key_file = "/etc/letsencrypt/live/your_domain/privkey.pem"
}
نکته قابل توجه: address = "0.0.0.0:8200"
را به address = "127.0.0.1:8200"
تغییر دهید تا از اتصالهای خارجی جلوگیری کند. آدرس 127.0.0.1
فقط برای localhost قابل دسترسی است و این اقدام از در معرض قرار گرفتن سرویس Vault از ایمنسازی کامل جلوگیری میکند. در آینده میتوانید این مقدار را مطابق نیاز تغییر دهید.
بعد از انجام تغییرات، فایل را ذخیره کرده و ببندید. اگر از nano استفاده میکنید، کلیدهای Ctrl+X
سپس Y
و در نهایت Enter
را فشار دهید.
دیگر دسترسیهای کاربر Vault به گواهیهای TLS فراهم شده است. به صورت پیش فرض، تنها کاربر روت (root) میتواند به این فایلها دسترسی داشته باشد. برای این کار از دستور زیر استفاده کنید.
برای این کار ابتدا باید یک گروه با نام pki
را بسازید.
sudo groupadd pki
بعد از آن تمامی مالکیتهای گروهی دایرکتوریهای مربوط به گواهیها را تغییر دهید.
sudo chgrp -R pki /etc/letsencrypt/archive
sudo chgrp -R pki /etc/letsencrypt/live
و بعد از آن مجوزهای دسترسی گروهی را برای این دایرکتوریها تنظیم کنید.
sudo chmod -R g+rx /etc/letsencrypt/archive
sudo chmod -R g+rx /etc/letsencrypt/live
باید کاربر ر Vault را به گروه pki
اضافه کنید.
sudo usermod -a -G pki vault
برای اینکه فرآیند شما با راحت ترین حالت ممکن انجام شود، یک ورودی را در فایل /etc/hosts
خود اضافه کنید تا درخواستها به دامنه Vault مستقیماً به localhost هدایت شوند. نام دامنه واقعی خود را با آن نام جایگزین کنید.
echo 127.0.0.1 your_domain.com | sudo tee -a /etc/hosts
این دستور باعث میشود که درخواستهایی که روی سرور به your_domain.com
ارسال میشوند، بدون استفاده از DNS مستقیماً به آدرس localhost بروند.
چطور یک برنامهی Node.js را برای محیط تولید روی سرور مجازی اوبونتو Ubuntu راهاندازی کنیم؟
Node.js برای محیط تولید در اوبونتو
راه اندازی اولیه Vault
بعد از آنکه Vault را نصب کردید، در ابتدا این سرویس غیرفعال و آماده ذخیرهسازی دادهها نیست. در این مرحله، سرور Vault راهاندازی شده و بعد از آن با مجموعهای از کلیدهای مخفی اولیه که برای بازگشایی (Unseal) مخزن اسرار استفاده میشوند، مقداردهی اولیه را انجام خواهید داد.
زمانی که Vault برای اولین بار راهاندازی میشود، پایگاه داده رمزگذاریشده آن نیز بدون مقداردهی اولیه خواهد بود. بنابراین ابتدا باید سرویس Vault را فعال کنید.
sudo systemctl start vault.service
برای اینکه مطمئن شوید اجزای صحیح سرویس اجرا میشوند، وضعیت آن را بررسی کنید.
sudo systemctl status vault.service
خروجی مشابه زیر را دریافت خواهید داشت.
● vault.service - "HashiCorp Vault - A tool for managing secrets"
Loaded: loaded (/lib/systemd/system/vault.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2021-11-16 21:55:13 UTC; 22s ago
Docs: https://www.vaultproject.io/docs/
Main PID: 104207 (vault)
Tasks: 7 (limit: 1137)
Memory: 179.3M
CGroup: /system.slice/vault.service
└─104207 /usr/bin/vault server -config=/etc/vault.d/vault.hcl
در این خروجی باید خطی مشابه به خط زیر را مشاهده کنید که این میتوان نشان دهنده این باشد که سرویس شما فعال است.
Active: active (running)
اگر سرویس شما فعال نشده بود، بررسی لاگ موجود در انتهای خورجی میتواند به تشخیص و رفع مشکل شما کمک کند. در ادامه، باید یک متغیر محیطی را تعریف کنید تا دستور vault
بتواند به سرور Vault متصل شود. چون Vault تنها روی اینترفیس لوکال (localhost) در دسترس است، باید متغیر زیر تنظیم شود.
export VAULT_ADDR=https://your_domain:8200
توجه داشته باشید که باید به جای ی your_domain
باید نام دامنهی خود را وارد کنید. این امر بسیار ضروری است. اکنون میتوانید وضعیت Vault را بررسی کرده و مطمئن شوید که هنوز مقداردهی اولیه انجام نشده است.
vault status
خروجی شما باید مانند خروجی زیر باشد.
Key Value
--- -----
Seal Type shamir
Initialized false
Sealed true
Total Shares 0
Threshold 0
Unseal Progress 0/0
Unseal Nonce n/a
Version 1.8.5
Storage Type file
HA Enabled false
این قسمت دو اطلاعات مهم را به کاربران میدهد، که فقط در زمان مقدار دهی اولیه قابل مشاهده است.
- توکن ریشه اولیه (Initial Root Token): دسترسی کامل به Vault را برای شما فراهم میکند و این قابلیت را به همراه دارد که تمامی سیاستها و اطلاعات را در خود دارد.
- کلیدهای بازگشایی (Unseal Keys): برای بازگشایی Vault در زمان راهاندازی یا راهاندازی مجدد از آن استفاده میشود.
فرآیند بازگشایی به این صورت است که باید تعدادی از کلیدها ساخته شود و در زمان بازگشایی، حداقل تعداد مشخصی را از این کلیدها وارد شود. به عنوان مثال، میتوان 3 کلید را ساخت و ملزم شد که 2 کلید از این 3 کلید برای بازگشایی لازم باشد. این شیوه باعث افزایش امنیت میشود. برای مقدار دهی اولیه Vault با سه کلید بازگشایی و الزام به دو کلید جهت بازگشایی، دستور زیر اجرا کنید.
vault operator init -key-shares=3 -key-threshold=2
بعد از اجرای این دستور، خروجی زیر را دریافت خواهید کرد.
Unseal Key 1: eZcJeydRrqeSMZ1zTN+VVll9TFT2KvJy7VlnxUgtvuz5
Unseal Key 2: ntmqCKq8rgNnKT1YSLCjVmCCZBAA3NwUeqxIyRpYD4Wm
Unseal Key 3: 3FK1+Hsorh4p8/L9mki3VskaEU2eQhLqGOI/pJkTHMbx
Initial Root Token: s.hY0ieybfDqCadz7JpL88uO3x
به یاد داشته باشید که حتما تمامی کلیدهای بازگشایی و توکن ریشه (Initial Root Token) را به صورت مطمئن ذخیره کنید، به این دلیل که این اطلاعات بعدا قابل بازیابی نخواهند بود.
برای اینکه بتوانید دوباره وضعیت Vault را بررسی کنید از دستور زیر استفاده کنید.
vault status
خروجی شما دیگر تغییر کرده است و باید به صورت زیر باشد.
Initialized true
Sealed true
Total Shares 3
Threshold 2
Unseal Progress 0/2
در این قسمت مشاهده میکنید که مقدار Initialized
برابر true
شده است و حالا Vault باید بازگشایی را انجام دهید.
برای بازگشایی، دستور زیر را اجرا کنید و یکی از کلیدهای بازگشایی را وارد کنید.
vault operator unseal
خروجی شما به صورت زیر خواهد بود.
Key (will be hidden):
بعد از وارد کردن کلید اول، Vault مشخص خواهد کرد که بازگشایی هنوز کامل نشده است.
Seal Type shamir
Initialized true
Sealed true
Total Shares 3
Threshold 2
Unseal Progress 1/2
دوباره دستور زیر را اجرا کرده و کلید دوم را وارد کنید.
vault operator unseal
بعد از وارد کردن دومین کلید، به شکل زیر خواهد بود وو Vault کاملاً بازگشایی میشود.
Seal Type shamir
Initialized true
Sealed false
Total Shares 3
Threshold 2
در این مرحله دیگر Valt شما بازگشایی شده است و آماده استفاده خواهد بود. توجه داشته باشید که قبل از فرآیند بازگشایی در هر بار راهاندازی مجدد Vault باید انجام شود.
همین الان، بدون کمترین پیچیدگی، سرور مجازی خودتون رو در کمتر از ۳۰ ثانیه، راهاندازی کنید.
✅ عملکرد پایدار ✅ ترافیک نامحدود ✅ هزینه بهصرفه
خرید سرور مجازی ابری
آموزش راهاندازی اپلیکیشن وب Go با Docker و Nginx در اوبونتو 22.04
راهاندازی اپلیکیشن وب Go با Docker و Nginx در اوبونتو
ذخیره و بازیابی اطلاعات محرمانه در Vault
در Vault چندین موتور ذخیره سازی برای اطلاعت محرمانه (Secrets Backends) وجود دارد. در ادامه از موتور kv
استفاده خواهیم کرد. این موتور برای ذخیره سازی جفتهای کلید ساده به کار میروند. توجه داشته باشید که این موتور به صورت پیش فرض فعال نخواهد بود.
در این مرحله، موتور kv
فعال شده است و روش ذخیرهسازی و خواندن دادهها در آن را یاد خواهید گرفت.
برای این کار ابتدا توکن روت (Root Token) که در مراحل قبل تولید شد را در یک متغیر شِل ذخیره کنید تا استفاده از آن سادهتر باشد.
root_token=your_root_token_here
بعد از آن با استفاده از توکن روت (Root Token) موتور kv
را فعال کنید.
VAULT_TOKEN=$root_token vault secrets enable kv
اگر دستور وارد شده شما موفقیت آمیز بود، خروجی زیر را مشاهده خواهید کرد.
Success! Enabled the kv secrets engine at: kv/
برای این که مطمئن شوید موتور شما به درستی فعال شده باشد، لیست موتورهای ذخیرهسازی فعال را بررسی کنید.
VAULT_TOKEN=$root_token vault secrets list
خروجی دستور شما باید به صورت زیر باشد.
Path Type Accessor Description
---- ---- -------- -----------
cubbyhole/ cubbyhole cubbyhole_abc1631b per-token private secret storage
identity/ identity identity_631fe262 identity store
kv/ kv kv_4d5855c8 n/a
sys/ system system_79b13f2f system endpoints used for control, policy and debugging
خطی که مسیر kv/
را نشان میدهد، تأیید میکند که این موتور فعال شده و آماده استفاده است. دیگر میتوانید اطلاعات محرمانهای را با استفاده از این موتور ذخیره کنید.
VAULT_TOKEN=$root_token vault write kv/message value=mypassword
در این دستور، پیشوند kv/
مشخص میکند که داده در مسیر kv
ذخیره میشود. کلید message
و مقدار mypassword
به Vault اضافه میگردند.
برای مشاهده دادهای که ذخیره کردهاید، از دستور زیر استفاده کنید.
VAULT_TOKEN=$root_token vault read kv/message
برای اینکه بفهمید روند را درست انجام دادهاید باید خروجی زیر را مشاهده کنید که محتوای محرمانه ای را که ذخیره کردهاید را نمایش میدهد.
Key Value
--- -----
refresh_interval 768h
value mypassword
با تمامی اینها، استفاده از توکن روت (Root Token) برای ساخت، خواندن اطلاعات محرمانه به خصوص در محیطهای تیمی، مطمئن و مقیاس پذیر نخواهد بود. همچنین اجازه مدیریت دقیق سطح دسترسی کاربران را به دادهها نخواهد داد.
راهنمای راهاندازی IDE ابری code server بر روی سرور مجازی اوبونتو 22.04
راهاندازی IDE ابری code server بر روی سرور مجازی اوبونتو
ساخت سیاست دسترسی در Vault
در شرایط واقعی، امکان دارد که اطلاعاتی مانند کلیدهای API یا گذروازه هایی را در خود ذخیره کند که ابزارهای خارجی به آن ها نیاز خواهد داشت. گرچه امکان خواندن این اطلاعات با توکن روت (Root Token) وجود نخواهد داشت. اما برای امنیت بیشتر، بهتر است که توکنی با سطح دسترسی محدودتر و فقط خواندنی (read-only) را برای این منظور بسازید. نحوه ساخت یک سیاست (Policy) در Vault برای دسترسی فقطخواندنی به اطلاعات آموزش داده میشود. برای این کار، ابتدا باید یک فایل متنی ایجاد کرده و سپس آن را به Vault اضافه کنید.
برای شروع، فایل زیر را با استفاده از ویرایشگر مورد نظر خود مانند nano بسازید.
nano policy.hcl
کد زیر را داخل فایل زیر بنویسید. این سیاست تنها اجازه خواندن (read-only) به مسیر مشخص شده را نشان میدهد.
path "kv/message" {
capabilities = ["read"]
}
بعد از ذخیره کردن و بسیتن فایل، باید تمامی این سیاستها را به Vault معرفی کنید. دستور زیر را در فایل policy.hcl
را در Vault بارگذاری کرده و سیاستی به نام message-readonly
با سطح دسترسی فقطخواندنی (read-only) ایجاد کنید.
VAULT_TOKEN=$root_token vault policy write message-readonly policy.hcl
در ادامه، یک توکن جدید برای دسترسی فقط خواندنی (read-only) را بسازید. که از گزینه -policy="message-readonly"
استفاده خواهید کرد تا این توکن تنها به همان سیاست تعریفشده دسترسی داشته باشد.
VAULT_TOKEN=$root_token vault token create -policy="message-readonly"
باید خروجی زیر را مشاهده کنید.
Key Value
--- -----
token your_token_value
token_accessor your_token_accessor
token_duration 768h0m0s
token_renewable true
token_policies ["default" "message-readonly"]
identity_policies []
policies ["default" "message-readonly"]
مقدار your_token_value
که مشخص شده است را به عنوان یک متغییر محیطی به نام app_token
ذخیره کنید.
app_token=your_token_value
میتوانید با استفاده از توکن زیر، دادههای ذخیره شده را در مسیر kv/message
بخوانید.
VAULT_TOKEN=$app_token vault read kv/message
خروجی شما به صورت زیر خواهد بود.
Key Value
--- -----
refresh_interval 768h0m0s
value mypassword
میتوانید بررسی کنید که این توکن محدود اجازه انجام عملیات دیگر، مانند لیست کردن دادههای موجود در Vault را ندارد.
VAULT_TOKEN=$app_token vault list kv/
خروجی که باید مشاهده کنید به صورت زیر خواهد بود.
Error reading kv/: Error making API request.
URL: GET https://your_domain:8200/v1/secret?list=true
Code: 403. Errors:
* 1 error occurred:
* permission denied
چگونه Strapi را برای محیط تولید روی سرور مجازی اوبونتو 22.04 راهاندازی و نصب کنیم؟
Strapi
سوالات متداول
در ادامه به سوالاتی که امکان دارد در این زمینه برای شما بدون پاسخ بماند، جوابهای کوتاه اما مفیدی دادهایم که با استفاده از آن میتوانید به سوال خود پاسخ صحیحی را بدهید.
چرا نباید از توکن Root برای دسترسی به اطلاعات در Vault استفاده کرد؟
استفاده مداوم از توکن (Root) به دلیل داشتن دسترسی کامل، خطرناک است. در واقعیت باید از توکنهای محدودشده برای افزایش امنیت و کنترل بهتر استفاده کنید.
اگر توکن فقط خواندنی (read-only) گم شود یا فاش شود، چه باید کرد؟
باید فوراً توکن را لغو (revoke) کرد تا دسترسی آن غیرفعال شود. این کار را با دستور vault token revoke <token>
میتوانید انجام دهید.
آیا می توان چندین مسیر را در یک فایل policy.hcl تعریف کرد؟
بله. میتوانید چندین بلوک path
با سطح دسترسیهای متفاوت در یک فایل policy را بنویسید.
چگونه می توان دسترسی نوشتن (write) یا حذف (delete) را به یک مسیر خاص در Vault داد؟
در فایل policy کافی است بهجای ["read"]
از ["read", "create", "update", "delete"]
استفاده کنید.
آیا بعد از ساختن توکن جدید با سیاست، نیاز به راه اندازی مجدد Vault است؟
خیر. تغییر سیاستها و ایجاد توکنها همان لحظه اعمال میشوند و نیازی به ریاستارت (Restart) سرویس را نخواهید داشت.
جمع بندی
در این راهنما یاد گرفتید که چگونه در اوبونتو 24.04، با استفاده از Vault، یک backend کلید/مقدار (kv) فعال کنید و اطلاعات محرمانه را ذخیره و بازیابی کنید. همچنین با ساخت یک policy فقطخواندنی (read-only)، نحوه تعریف سطح دسترسی محدود برای کاربران یا اپلیکیشنها را بررسی کردیم. این روشها امنیت دادهها را افزایش داده و مدیریت دسترسی را سادهتر میکنند.
آموزش نصب پایتون در سرور مجازی اوبونتو
نصب پایتون در سرور مجازی اوبونتو