آنچه در این مقاله میخوانید
آموزش مدیریت امنیت با 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 قابل دسترسی است.
بعد از انجام تغییرات، فایل را ذخیره کرده و ببندید. اگر از 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
چطور یک برنامهی Node.js را برای محیط تولید روی سرور مجازی اوبونتو Ubuntu راهاندازی کنیم؟
Node.js برای محیط تولید در اوبونتو
راه اندازی اولیه Vault
Vault به صورت پیشفرض غیرفعال است و نمیتوان از آن برای ذخیرهسازی دادهها استفاده کرد. در این مرحله ابتدا باید سرور Vault را راهاندازی کنید و سپس فرآیند مقداردهی اولیه (Initialization) را انجام دهید.
زمانی که 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 تنها روی اینترفیس (interface) 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 در زمان راهاندازی یا راهاندازی مجدد از آن استفاده میشود.
برای مقدار دهی اولیه 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 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
همین الان، بدون کمترین پیچیدگی، سرور مجازی خودتون رو در کمتر از ۳۰ ثانیه، راهاندازی کنید.
✅ عملکرد پایدار ✅ ترافیک نامحدود ✅ هزینه بهصرفه
خرید سرور مجازی ابری
آموزش راهاندازی اپلیکیشن وب 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
ذخیره میشود.
برای مشاهده دادهای که ذخیره کردهاید، از دستور زیر استفاده کنید.
VAULT_TOKEN=$root_token vault read kv/message
برای اینکه مطمئن شوید روند را درست انجام دادهاید باید خروجی زیر را مشاهده کنید.
Key Value
--- -----
refresh_interval 768h
value mypassword
راهنمای راهاندازی IDE ابری code server بر روی سرور مجازی اوبونتو 22.04
راهاندازی IDE ابری code server بر روی سرور مجازی اوبونتو
ساخت سیاست دسترسی در Vault
در شرایط واقعی، ممکن است Vault اطلاعات حساسی مانند کلیدهای API یا گذرواژههایی را ذخیره کند که ابزارهای خارجی برای عملکرد خود به آنها نیاز دارند. هرچند میتوان با استفاده از توکن روت (Root Token) به این دادهها دسترسی داشت، اما از نظر امنیتی توصیه میشود توکنی با سطح دسترسی محدود و read-only را برای این منظور ایجاد کنید.
برای شروع، فایل زیر را با استفاده از ویرایشگر مورد نظر خود بسازید.
nano policy.hcl
کد زیر را داخل فایل زیر بنویسید. این سیاست تنها اجازه خواندن را به مسیر مشخص شده میدهد.
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) را بسازید.
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، اطلاعات محرمانه را ذخیره و بازیابی کنید. همچنین با ساخت یک policy فقطخواندنی (read-only)، نحوه تعریف سطح دسترسی محدود برای کاربران یا اپلیکیشنها را بررسی کردیم. این روشها امنیت دادهها را افزایش داده و مدیریت دسترسی را سادهتر میکنند.
آموزش نصب پایتون در سرور مجازی اوبونتو
نصب پایتون در سرور مجازی اوبونتو