تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

آموزش مدیریت امنیت با HashiCorp Vault در اوبونتو 24.04


۲۷ اردیبهشت ۱۴۰۴

Vault یک ابزار متن‌باز است که قابلیت ذخیره، توزیع امن و قابل اعتماد اطلاعات مهم مانند کلیدهای API، توکن‌های دسترسی و گذرواژه‌ها را برای کاربران خود فراهم می‌کند. ابزارهایی مانند Vault هنگام استقرار برنامه‌هایی که نیاز به استفاده از اطلاعات حساس دارند، اهمیت ویژه‌ای پیدا می‌کنند.

با سرور ابونتو لیارا، بدون دردسر سرور خود را تنها با چند کلیک مدیریت کنید.
✅ منابع کاملاً اختصاصی و پایدار✅ سرعت بالا و ترافیک نامحدود✅ امنیت پیشرفته و پشتیبانی 24/7
خرید و راه‌اندازی سرور اوبونتو ساعتی لیارا

آنچه در ادامه خواهید خواند:

  • الزامات پیش از شروع فرآیند آموزش
  • آموزش نصب Vault
  • پیکربندی Vault
  • راه‌ اندازی اولیه Vault
  • ذخیره و بازیابی اطلاعات محرمانه در Vault
  • ساخت سیاست دسترسی در Vault
  • سوالات متداول
  • جمع بندی
HashiCorp 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)، نحوه تعریف سطح دسترسی محدود برای کاربران یا اپلیکیشن‌ها را بررسی کردیم. این روش‌ها امنیت داده‌ها را افزایش داده و مدیریت دسترسی را ساده‌تر می‌کنند.

آموزش نصب پایتون در سرور مجازی اوبونتو
نصب پایتون در سرور مجازی اوبونتو

به اشتراک بگذارید

برچسب‌ها: