Kho tiền MySQL
Một thẻ đã tồn tại với tên chi nhánh được cung cấp. Nhiều lệnh Git chấp nhận cả tên thẻ và tên nhánh, vì vậy việc tạo nhánh này có thể gây ra hành vi không mong muốn. Bạn có chắc chắn muốn tạo nhánh này không? Show
Trong bài đăng trước, tôi đã thảo luận về việc sử dụng GPG để bảo mật thông tin đăng nhập cơ sở dữ liệu của bạn. Điều này phụ thuộc vào bản sao cục bộ của cấu hình máy khách MySQL của bạn, nhưng nếu bạn muốn giữ thông tin đăng nhập được lưu trữ an toàn cùng với thông tin siêu bí mật khác thì sao? Bài đăng này sẽ xem xét cách sử dụng Vault để lưu trữ thông tin đăng nhập của bạn ở vị trí trung tâm và sử dụng chúng để truy cập cơ sở dữ liệu của bạn. Đối với những người chưa biết đến Vault, đây là một cách tuyệt vời để quản lý bí mật của bạn – bảo mật, lưu trữ và kiểm soát chặt chẽ quyền truy cập. Nó có các lợi ích bổ sung là có thể xử lý việc cho thuê, thu hồi chìa khóa, cán chìa khóa và kiểm tra Trong bài đăng trên blog này, chúng tôi sẽ hoàn thành các nhiệm vụ sau
Trước khi tiếp tục, tôi nên gửi một ghi chú nhanh để nói rằng sau đây là một ví dụ nhanh để chỉ cho bạn cách bạn có thể thiết lập và chạy Vault cũng như sử dụng nó với MySQL, đây không phải là hướng dẫn thiết lập sản xuất và không đề cập đến Cao thời gian tải xuốngChúng tôi sẽ sử dụng một số công cụ ngoài Vault, Let's Encrypt, OpenSSL và json_pp (tiện ích dòng lệnh sử dụng JSON. PP). Đối với bài đăng này, chúng tôi sẽ sử dụng Ubuntu 16. 04 LTS và chúng tôi cho rằng chúng chưa được cài đặt 1 $ sudo apt - get install letsencrypt openssl libjson-pp-perl Nếu bạn chưa nghe nói về Let's Encrypt thì đó là Cơ quan cấp chứng chỉ (CA) miễn phí, tự động và mở cho phép bạn bảo mật trang web của mình hoặc các dịch vụ khác mà không phải trả tiền cho chứng chỉ SSL; . Electronic Frontier Foundation (EFF) cung cấp Certbot, công cụ được đề xuất để quản lý chứng chỉ của bạn, đây là tên mới của phần mềm Chúng tôi cũng cần tải xuống Vault, chọn tệp nhị phân phù hợp với Hệ điều hành và kiến trúc của bạn. Tại thời điểm viết bài này, phiên bản mới nhất của Vault là 0. 6. 2, vì vậy các bước sau có thể cần điều chỉnh nếu bạn sử dụng phiên bản khác 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 # Tải xuống Vault (Linux x86_64), SHA256SUMS và chữ ký $ wget https. // bản phát hành. hashicorp. com / kho tiền / 0. 6. 2 / vault_0. 6. 2_linux_amd64. nén https. // bản phát hành. hashicorp. com / kho tiền / 0. 6. 2 / vault_0. 6. 2_SHA256TỔNG. dấu hiệu https. // bản phát hành. hashicorp. com / kho tiền / 0. 6. 2 / vault_0. 6. 2_SHA256SUMS
# Nhập khóa GPG $ gpg -- máy chủ khóa pgp.mit. edu -- recv - phím 51852D87348FFC4C
# Xác minh tổng kiểm tra $ gpg -- xác minh vault_0.6. 2_SHA256TỔNG. dấu hiệu gpg. giả sử đã ký dữ liệu trong ` . vault_0.6. 2_SHA256SUMS ' gpg. Chữ ký được lập Thu 06 Tháng 10 . 2016 02:08. 16 BST sử dụng khóa RSA key ID 348FFC4C gpg. Tốt chữ ký từ "HashiCorp Security gpg. CẢNH BÁO. Khóa này is không được chứng nhận . with a trusted signature! gpg. Có có không có chỉ định < . that the signature belongs to the owner. Khóa chính dấu vân tay. 91A6 E7F8 5D05 C656 30BE F189 5185 2D87 348F FC4C
# Xác minh tải xuống $ sha256sum -- kiểm tra <(fgrep vault_0.6. 2_linux_amd64. zip vault_0. 6. 2 SHA256SUMS) vault_0. 6. 2_linux_amd64. nén. Được
# Trích xuất nhị phân $ sudo giải nén - j vault_0.6. 2_linux_amd64. zip - d / usr/local/bin Lưu trữ. vault_0. 6. 2_linux_amd64. nén thổi phồng. / usr / local / bin/vault Hãy mã hóa… tại sao không?Chúng tôi muốn có thể truy cập Vault từ bất cứ đâu, chúng tôi có thể đặt biện pháp bảo mật bổ sung để ngăn chặn truy cập trái phép, vì vậy chúng tôi cần mã hóa chính mình. Ví dụ sau đây cho thấy thiết lập trên máy chủ công cộng, cho phép CA xác thực yêu cầu của bạn. Thông tin thêm về các phương pháp khác nhau có thể được tìm thấy trong tài liệu Certbot 1 2 3 4 5 6 7 8 9 10 11 12 13 14 $ sudo letsencrypt -- webroot -w /home/www/vhosts/default/public -d myfirstdomain.com - d miền thứ hai của tôi. com
# LƯU Ý QUAN TRỌNG # - Xin chúc mừng. Chứng chỉ và chuỗi của bạn đã được lưu tại # /etc/letsencrypt/live/myfirstdomain. com/chuỗi đầy đủ. pem. Chứng chỉ của bạn sẽ # hết hạn vào ngày 29-01-2017. Để có được một phiên bản mới hoặc tinh chỉnh này # chứng chỉ trong tương lai, chỉ cần chạy lại certbot. Đến # gia hạn *tất cả* chứng chỉ của bạn một cách không tương tác, hãy chạy "certbot # thay mới" # - Nếu bạn thích Certbot, vui lòng cân nhắc hỗ trợ công việc của chúng tôi bằng cách # # Quyên góp cho ISRG / Let's Encrypt. https. //letsencrypt. tổ chức/quyên góp # Quyên góp cho EFF. https. //hiệu quả. org/donate-le # Đó là tất cả những gì cần thiết để có được chứng chỉ SAN SSL. Máy chủ thực thi điều này có một máy chủ web công cộng phục vụ các miền mà chứng chỉ được yêu cầu. Trong quá trình yêu cầu, một tệp được đặt trong webroot đã chỉ định và được sử dụng để xác thực (các) miền cho yêu cầu. Về cơ bản, lệnh cho biết
Let's Encrypt CA phát hành các chứng chỉ có thời hạn sử dụng ngắn (90 ngày), vì vậy bạn cần tiếp tục gia hạn chúng, nhưng đừng lo lắng vì việc tạo chúng rất dễ dàng ngay từ đầu. Bạn có thể kiểm tra xem việc gia hạn có hoạt động tốt không bằng cách sau (điều này sẽ gia hạn tất cả các chứng chỉ mà bạn có mà không có 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 $ sudo letsencrypt renew -- dry-run
# #------------------------------------------------- #Đang xử lý /etc/letsencrypt/renewal/myfirstdomain. com. conf #------------------------------------------------- #** CHẠY KHÔ. mô phỏng 'letsencrypt gia hạn' gần hết hạn chứng chỉ #** (Chứng chỉ kiểm tra bên dưới chưa được lưu. ) # #Xin chúc mừng, tất cả các lần gia hạn đã thành công. Các chứng chỉ sau đã được gia hạn # /etc/letsencrypt/live/myfirstdomain. com/chuỗi đầy đủ. pem (thành công) #** CHẠY KHÔ. mô phỏng 'letsencrypt gia hạn' gần hết hạn chứng chỉ #** (Chứng chỉ kiểm tra ở trên chưa được lưu. ) # # LƯU Ý QUAN TRỌNG # - Thông tin đăng nhập tài khoản của bạn đã được lưu trong Certbot của bạn # thư mục cấu hình tại /etc/letsencrypt. Bạn nên làm một # sao lưu an toàn thư mục này ngay bây giờ. Thư mục cấu hình này sẽ # cũng chứa các chứng chỉ và khóa cá nhân do Certbot thu được, vì vậy # thực hiện sao lưu thư mục này thường xuyên là điều lý tưởng tự động gia hạnQuá trình chạy thử nghiệm để gia hạn hoạt động tốt, vì vậy giờ đây chúng tôi có thể bắt đầu và lên lịch để quá trình này diễn ra tự động. Tôi đang sử dụng 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 $ sudo cat <<EOF > /etc/systemd/system/cert-renewal.service [Đơn vị] Mô tả = SSL gia hạn
[Dịch vụ] Loại = đơn giản ExecStart =/ usr / bin/letsencrypt renew --quiet Người dùng = root Nhóm = gốc EOF
$ sudo cat <<EOF > /etc/systemd/system/cert-renewal.timer [Đơn vị] Mô tả = Tự động SSL gia hạn
[Hẹn giờ] OnCalendar =*-*-* 06. 00. 00 Không đổi = true
[Cài đặt] WantedBy = bộ hẹn giờ. mục tiêu EOF
$ sudo systemctl bật chứng chỉ-renewal.timer Đã tạo liên kết tượng trưng từ / vv/systemd/system/timers.target. muốn / chứng chỉ - gia hạn. hẹn giờ đến / v.v / . hẹn giờ/system/cert-renewal.timer.
$ sudo systemctl start cert-renewal.timer $ sudo systemctl list - timers TIẾP TRÁI CUỐI CÙNG ĐẠT ĐƠN VỊ ACTIVATES Thứ 3 2016 - 11 - 01 06:00. 00 UTC 6h left< . hẹn giờ n/a n/a cert-renewal.timer chứng chỉ - gia hạn. dịch vụ Bắt đầu với VaultĐầu tiên, một lời nhắc nhanh rằng đây không phải là bài đánh giá chuyên sâu, cách cài đặt Vault như thế nào hoặc nhất thiết phải thực hành tốt nhất vì điều đó nằm ngoài phạm vi của bài đăng này. Nó chỉ giúp bạn thử nghiệm mọi thứ, vì vậy vui lòng đọc tài liệu về Vault nếu bạn muốn sử dụng nó một cách nghiêm túc hơn Mặc dù có một máy chủ phát triển mà bạn có thể kích hoạt bằng lệnh Trước khi khởi động máy chủ, chúng tôi sẽ tạo một cấu hình, cấu hình này có thể được viết bằng một trong 2 định dạng – HCL (Ngôn ngữ cấu hình HashiCorp) hoặc JSON (Ký hiệu đối tượng JavaScript). Chúng tôi sẽ sử dụng HCL vì nó sạch hơn một chút và giúp chúng tôi tiết kiệm thêm một chút khi gõ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 # Tạo người dùng hệ thống $ sudo useradd - r -g daemon -d /usr/local/vault -m -s /sbin/nologin -c "Vault user" vault $ id kho tiền uid = 998(kho tiền) gid=1(daemon) groups=1(daemon)
# Tạo thư mục cấu hình xóa quyền truy cập toàn cầu $ sudo mkdir / vv/vault /etc/ssl/vault $ sudo chown kho. root / etc / vault /etc/ssl/vault $ sudo chmod 750 / etc/vault /etc/ssl/vault $ sudo chmod 700 / usr/local/vault
# Sao chép chứng chỉ và khóa $ sudo cp - v /etc/letsencrypt/live/myfirstdomain.com /* pem / etc/ssl/vault / vv / letsencrypt / live/myfirstdomain.com / chứng chỉ. pem - > / vv . pem ssl/vault/cert.pem / vv / letsencrypt / live/myfirstdomain.com / chuỗi. pem - > / vv . pem ssl/vault/chain.pem / vv / letsencrypt / live/myfirstdomain.com / chuỗi đầy đủ. pem - > / vv . pem ssl/vault/fullchain.pem / vv / letsencrypt / live/myfirstdomain.com / khóa riêng tư. pem - > / vv . pem ssl/vault/privkey.pem
# Tạo chứng chỉ PEM kết hợp $ sudo cat / vv/ssl/vault/{cert,fullchain}.pem / vv / ssl . pem vault/fullcert.pem
# Ghi cấu hình vào tập tin $ con mèo <<EOF | sudo tee / etc / . hcl vault/demo.hcl người nghe "tcp" { địa chỉ = "10. 0. 1. 10. 8200" tls_disable = 0 tls_cert_file = "/etc/ssl/vault/fullcert. pem" tls_key_file = "/etc/ssl/vault/privkey. pem" }
phụ trợ "tệp" { đường dẫn = "/usr/local/vault/data" }
disable_mlock = true EOF Vì vậy, chúng tôi hiện đã thiết lập một người dùng và một số thư mục để lưu trữ cấu hình, chứng chỉ SSL và khóa cũng như dữ liệu, hạn chế quyền truy cập đối với người dùng Xin lưu ý rằng thư mục dữ liệu của Vault phải được bảo mật vì nó chứa tất cả các khóa và bí mật. Trong ví dụ này, chúng tôi đã thực hiện việc này bằng cách đặt nó trong thư mục chính của người dùng vault và chỉ cho phép người dùng vault truy cập. Bạn có thể thực hiện điều này hơn nữa bằng cách hạn chế quyền truy cập cục bộ (thông qua thông tin đăng nhập) và danh sách kiểm soát quyền truy cập Bắt đầu VaultĐã đến lúc khởi động máy chủ và xem mọi thứ có ổn không 1 2 3 4 5 6 7 8 9 10 11 $ sudo - su vault vault server -config=/etc/vault/demo.hcl > / tmp / . log-debug.log 2>&1 & $ việc làm [1] + running sudo -su vault vault server -config=/etc/vault/demo.hcl > / tmp / . lo-debug.lo
$ VAULT_ADDR = https. // tên miền đầu tiên của tôi. com. 8200 kho trạng thái Lỗi kiểm tra con dấu trạng thái. Lỗi thực hiện API yêu cầu.
URL. NHẬN https. // tên miền đầu tiên của tôi. com. 8200 / v1 / sys/seal-status Mã. 400. Lỗi.
* máy chủ là chưa chưa initialized Mặc dù có vẻ như đã xảy ra sự cố (chúng tôi cần khởi tạo máy chủ), điều đó có nghĩa là mọi thứ đang hoạt động như mong đợi. Vì vậy, chúng tôi sẽ khởi tạo Vault, đây là một nhiệm vụ khá đơn giản, nhưng bạn cần ghi chú/lưu trữ một số thông tin mà máy chủ sẽ cung cấp cho bạn trong quá trình khởi tạo – mã thông báo chưa niêm phong và khóa gốc ban đầu. Bạn nên phân phối những thứ này đến nơi an toàn, nhưng bây giờ chúng tôi sẽ lưu trữ chúng với cấu hình 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 # Thay đổi thành người dùng vault $ sudo su - l vault -s /bin/bash (kho tiền)$ xuất VAULT_ADDR=https: // tên miền đầu tiên của tôi. com. 8200 VAULT_SSL =/ vv/ssl/vault
# Khởi tạo Vault và lưu mã thông báo cũng như khóa (kho tiền)$ kho tiền init 2>&1 | egrep '^Khóa Unseal. Mã thông báo gốc ban đầu' > / v.v / vault/keys.txt (kho tiền)$ chmod 600 /etc/vault/keys.txt
# Bỏ niêm phong kho tiền (kho tiền)$ egrep -m3 '^Unseal Key' /etc/vault/keys.txt . cắt - f2 - - . d: . tr - d ' ' . trong khi đọc phím làm kho tiền mở niêm phong - ca - chứng chỉ=${VAULT_SSL}/fullchain.pem - khách hàng - chứng chỉ=${VAULT_SSL}/client.pem - khách hàng - khóa=${VAULT_SSL}/privkey.pem ${key} xong Đã niêm phong. đúng Khóa Chia sẻ. 5 Khóa Ngưỡng. 3 Mở niêm phong Tiến trình. 1 Đã niêm phong. đúng Khóa Chia sẻ. 5 Khóa Ngưỡng. 3 Mở niêm phong Tiến trình. 2 Đã niêm phong. sai Khóa Chia sẻ. 5 Khóa Ngưỡng. 3 Mở niêm phong Tiến độ. 0
# Kiểm tra trạng thái Vault (kho tiền)$ kho tiền status Đã niêm phong. sai Khóa Chia sẻ. 5 Khóa Ngưỡng. 3 Mở niêm phong Tiến độ. 0 Phiên bản. 0. 6. 2 Cụm Tên. kho tiền - cụm - ebbd5ec7 Cụm ID. 61ae8f54 - f420 - 09c1-90bb-60c9fbfa18a2
Cao - Tính khả dụng Đã bật. sai Vậy là xong, kho tiền được khởi tạo và lệnh trạng thái hiện trả về thông tin chi tiết và xác nhận rằng nó đang hoạt động. Điều đáng chú ý ở đây là mỗi khi bạn khởi động Vault, nó sẽ được niêm phong, điều đó có nghĩa là không thể truy cập vào Vault cho đến khi 3 khóa chưa niêm phong được sử dụng với Thiết lập chính sáchChính sách cho phép bạn đặt giới hạn kiểm soát quyền truy cập để xác định dữ liệu mà người dùng được xác thực có quyền truy cập. Một lần nữa, các tài liệu được sử dụng để viết chính sách ở định dạng HCL hoặc JSON. Chúng rất dễ viết và áp dụng, nhược điểm duy nhất là các chính sách liên quan đến mã thông báo không thể thay đổi (thêm/xóa) sau khi mã thông báo đã được phát hành; . Tuy nhiên, nếu bạn muốn thay đổi các quy tắc chính sách thì điều này có thể được thực hiện nhanh chóng khi các sửa đổi được áp dụng trong lệnh gọi tiếp theo tới Vault Khi chúng tôi khởi tạo máy chủ, chúng tôi đã được cung cấp khóa gốc ban đầu và bây giờ chúng tôi cần sử dụng khóa đó để bắt đầu định cấu hình máy chủ 1 (kho tiền)$ xuất VAULT_TOKEN=$(egrep '^Initial Root Token:' / vv / kho tiền . txt keys.txt . cắt - f2 - - . d: . tr - d ' ') Chúng tôi sẽ tạo một chính sách đơn giản cho phép chúng tôi đọc các bí mật của MySQL, nhưng ngăn truy cập vào các lệnh và thông tin hệ thống 1 2 3 4 5 6 7 8 9 10 11 12 13 (kho tiền)$ cat <<EOF > /etc/vault/demo-policy.hcl đường dẫn "sys/*" { chính sách = "từ chối" }
đường dẫn "secret/mysql/*" { chính sách = "đã đọc" khả năng = ["danh sách", "sudo"] } EOF
(kho tiền)$ kho tiền policy-write demo /etc/vault/demo-policy.hcl Chính sách 'demo' được viết. Chúng tôi chỉ thêm một chính sách ở đây, nhưng bạn thực sự nên tạo nhiều chính sách nếu cần để kiểm soát quyền truy cập một cách phù hợp giữa nhiều người và ứng dụng có thể đang sử dụng dịch vụ. Như với bất kỳ loại lưu trữ dữ liệu nào, việc lập kế hoạch lưu trữ dữ liệu của bạn như thế nào là rất quan trọng, vì nó sẽ giúp bạn viết các chính sách nhỏ gọn hơn với mức độ chi tiết mà bạn yêu cầu. Viết mọi thứ bằng Xác thực TLS cho các bí mật của MySQLChúng tôi sắp thêm bí mật đầu tiên của mình vào Vault, nhưng trước hết, chúng tôi cần một cách để xác thực quyền truy cập của mình. Vault cung cấp một API để truy cập vào các bí mật được lưu trữ của bạn, cùng với vô số lệnh sử dụng trực tiếp tệp nhị phân 1 2 (kho tiền)$ kho tiền auth-enable cert Đã kích hoạt thành công enabled 'cert' at 'cert' . ! Tạo chứng chỉ ứng dụng khách bằng OpenSSLChương trình phụ trợ xác thực TLS chấp nhận các chứng chỉ được ký bởi CA hoặc tự ký, vì vậy, hãy nhanh chóng tạo cho mình một chứng chỉ SSL tự ký bằng cách sử dụng 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 # Tạo thư mục làm việc để quản lý SSL và sao chép trong cấu hình $ mkdir ~ / . ssl && cd $_ $ cp / usr / lib/ssl/openssl.cnf .
# Tạo CA 4096-bit $ openssl genrsa - des3 -out ca.key 4096 Tạo RSA khóa riêng tư, 4096 bit long modulus .. . . . . . . . . . ++ .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ++ e là 65537 (0x10001) Nhập vượt qua cụm từ cho ca.key. Xác minh - Nhập thông qua cụm từ for ca.key.
$ openssl req - config . / openssl. cnf - mới - x509 . khóa days 365 -key ca.key - ra ca. crt Nhập vượt qua cụm từ cho ca.key. Bạn đang sắp đến là asked to enter information that will be incorporated vào chứng chỉ của bạn yêu cầu. Cái bạn là gì về đến enter is what is called a Distinguished Name or a DN. Có có khá a ít fields but you can leave some blank Đối với một số trường ở đó sẽ be a default value, Nếu bạn nhập '. ', trường sẽ . left blank. ----- Quốc gia Tên (2 chữ cái code) [GB]: Tiểu bang hoặc Tỉnh Tên (full name) [Some-State]: Địa phương Tên (ví dụ, city) [Some-Place]: Tổ chức Tên (ví dụ:, company) [Percona]: Tổ chức Đơn vị Tên (ví dụ, section) [Demo]: Tên Thông thường (e. g. máy chủ FQDN hoặc tên CỦA BẠN . ) [ceri]: Email Địa chỉ [thisisnotme@myfirstdomain.com].
# Tạo Khóa máy khách 4096-bit và CSR $ openssl genrsa - des3 -out client.key 4096 Tạo RSA khóa riêng tư, 4096 bit long modulus .. . . . . . . . . . . . . . . . . . . . . ++ .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ++ e là 65537 (0x10001) Nhập pass cụm từ cho khách hàng.key. Xác minh - Nhập thông qua cụm từ for client.key.
$ openssl req - config . / openssl. cnf - mới - khóa . khóa.key - ra máy khách. csr Nhập pass cụm từ cho khách hàng.key. Bạn đang sắp đến là asked to enter information that will be incorporated vào chứng chỉ của bạn yêu cầu. Cái bạn là gì về đến enter is what is called a Distinguished Name or a DN. Có có khá a ít fields but you can leave some blank Đối với một số trường ở đó sẽ be a default value, Nếu bạn nhập '. ', trường sẽ . left blank. ----- Quốc gia Tên (2 chữ cái code) [GB]: Tiểu bang hoặc Tỉnh Tên (full name) [Some-State]: Địa phương Tên (ví dụ, city) [Some-Place]: Tổ chức Tên (ví dụ:, company) [Percona]: Tổ chức Đơn vị Tên (ví dụ, section) [Demo]: Tên Thông thường (e. g. máy chủ FQDN hoặc tên CỦA BẠN . ) [ceri]: Email Địa chỉ [thisisnotme@myfirstdomain.com].
Vui lòng nhập các sau 'bổ sung' attributes để được gửi với của bạn certificate request A thử thách mật khẩu []: Một tùy chọn tên công ty tên []:
# Tự ký $ openssl x509 - req -days 365 -in client.csr - CA ca. crt - CAkey ca. khóa - set_serial 01 - . crtclient.crt Chữ ký ok subject =/ C = GB/ST=Some-State/L=Some-Place/O=Percona/OU=Demo/CN=ceri/emailAddress=thisisnotme@myfirstdomain.com Nhận CA Khóa Riêng tư Nhập vượt qua cụm từ cho ca.key.
# Tạo một bản sao không được mã hóa của khóa máy khách $ openssl rsa - in client.key - ra khóa riêng tư. pem Nhập pass cụm từ cho khách hàng.key. ghi RSA khóa
# Sao chép chứng chỉ để truy cập Vault $ sudo cp khách hàng. crt / etc / ssl . pem vault/user.pem OK, có khá nhiều thông tin ở đó. Bạn có thể chỉnh sửa Thêm chứng chỉ ủy quyền vào VaultBây giờ chúng tôi đã tạo chứng chỉ và chính sách, bây giờ chúng tôi cần cho phép xác thực xảy ra bằng chứng chỉ. Chúng tôi sẽ cung cấp mã thông báo hết hạn trong 1 giờ và cho phép truy cập vào các bí mật của MySQL thông qua chính sách demo mà chúng tôi đã tạo ở bước trước 1 2 3 4 5 6 7 8 9 (kho tiền)$ kho tiền write auth/cert/certs/demo display_name = demo chính sách = bản trình diễn chứng chỉ = @${VAULT_SSL}/user.pem ttl = 3600 Thành công. Dữ liệu được ghi đến. auth / chứng chỉ / chứng chỉ/demo
$ curl -- chứng chỉ người dùng.pem -- khóa khóa riêng tư. pem ${VAULT_ADDR}/v1/auth/cert/login -X POST {"request_id". "d5715ce1-2c6c-20c8-83ef-ce6259ad9110","lease_id":"","tái tạo". false,"lease_duration". 0,"dữ liệu". null,"wrap_info". null,"cảnh báo". null,"auth". {"client_token". "e3b98fac-2676-9f44-fdc2-41114360d2fd","trình truy cập":"4c5b4eb5-4faf-0b01-b732-39d309afd216","chính sách":["mặc định","demo"],"metadata":{"authority_key_id". "","cert_name". "demo","common_name". "[email được bảo vệ]","subject_key_id". ""},"lease_duration":600,"tái tạo". true}} Thật tuyệt vời. Chúng tôi đã yêu cầu mã thông báo ứng dụng khách đầu tiên bằng chứng chỉ ứng dụng khách SSL, chúng tôi đã đăng nhập mã thông báo đó và chúng tôi đã nhận được mã thông báo truy cập ( suỵt. Điều đó là bí mật
Có lẽ cách dễ nhất để sử dụng Vault với ứng dụng của bạn là lưu trữ thông tin ở đó như cách bạn làm trong tệp cấu hình và đọc nó khi ứng dụng yêu cầu lần đầu. Một ví dụ về thông tin đó là Tên nguồn dữ liệu (DSN) cho kết nối MySQL hoặc có lẽ là thông tin cần thiết để tạo động một 1 2 3 4 5 6 7 8 9 10 (kho tiền)$ $ vault write secret/mysql/test password="mysupersecretpassword" user="percona" socket="/var/run/mysqld/mysqld.sock" Thành công. Dữ liệu được ghi đến. bí mật / mysql / thử nghiệm
(kho tiền)$ kho tiền read secret/mysql/test Khóa Giá trị --- ----- refresh_interval 768h0m0s mật khẩu mật khẩu siêu bí mật của tôi ổ cắm / var / run/mysqld/mysqld.sock user percona Quay lại một chút (hy vọng chưa đầy 1 giờ trước. ) chúng tôi đã xác thực bằng cách sử dụng cURL và nhận được mã thông báo, vì vậy bây giờ chúng tôi có một số bí mật cần đọc, chúng tôi có thể dùng thử. Sự phô trương và tiếng kèn đã sẵn sàng… 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $ curl -- chứng chỉ người dùng.pem -- khóa khóa riêng tư. pem - H 'Loại nội dung. ứng dụng/json' - H 'X-Vault-Token. 2f1fb630-cbe9-a8c9-5931-515a12d79291' ${VAULT_ADDR} . /v1/secret/mysql/test -X GET 2>/dev/null | json_pp { "wrap_info" . null, "lease_id" . "", "request_id" . "c79033b1-f8f7-be89-4208-44d721a55804", "auth" . null, "dữ liệu" . { "mật khẩu" . "mật khẩu siêu bí mật của tôi", "ổ cắm" . "/var/run/mysqld/mysqld. vớ", "người dùng" . "percona" }, "lease_duration" . 2764800, "tái tạo" . sai, "cảnh báo" . null } Chúng ta làm được rồi. Giờ đây, bạn không cần phải lưu trữ mật khẩu trong mã hoặc tệp cấu hình nữa, bạn chỉ cần truy cập và lấy chúng từ Vault khi cần, chẳng hạn như khi ứng dụng của bạn khởi động và lưu chúng trong bộ nhớ hoặc theo yêu cầu nếu ứng dụng của bạn . Bạn sẽ cần thực hiện các bước tiếp theo để đảm bảo rằng ứng dụng của bạn có thể chịu được việc Vault ngừng hoạt động, cũng như cung cấp thiết lập HA của Vault để giảm thiểu rủi ro không có sẵn các bí mật Nó không dừng lại ở đây mặc dù… Cấp phép MySQL theo yêu cầuVault hoạt động như một hệ thống tệp ảo và sử dụng phụ trợ lưu trữ chung theo mặc định, được gắn là 1 2 3 4 (kho tiền)$ kho tiền mounts Đường dẫn Loại Mặc định TTL Max TTL Description bí mật / chung hệ thống system generic secret storage hệ thống / hệ thống n/a n/a system endpoints used for control, policy and debugging Bây giờ chúng tôi sẽ kích hoạt phụ trợ MySQL, thêm kết nối quản lý (sẽ sử dụng plugin auth_socket) và sau đó yêu cầu người dùng MySQL mới sẽ tự động hết hạn 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 # Tạo tài khoản người dùng MySQL chuyên dụng $ mysql - Bsse "TẠO NGƯỜI DÙNG [email . * ĐẾN [email được bảo vệ] VỚI TÙY CHỌN CẤP;"
# Kích hoạt chương trình phụ trợ MySQL và đặt chi tiết kết nối (kho tiền)$ kho tiền mount mysql (kho tiền)$ kho tiền write mysql/config/connection connection_url="vault:[email protected](/var/run/mysqld/mysqld.sock)/" Đọc quyền truy cập đến điểm cuối này should be controlled via ACLs as it will return the connection URL as it is, including passwords, if any.
# Viết mẫu cho vai trò chỉ đọc (kho tiền)$ kho tiền write mysql/roles/readonly sql = "TẠO NGƯỜI DÙNG '{{name}}'@'%' ĐƯỢC XÁC ĐỊNH VỚI mysql_native_password BẰNG '{{password}}' . * ĐẾN '{{name}}'@'%';" Thành công. Dữ liệu được ghi đến. mysql / vai trò / chỉ đọc
# Đặt hợp đồng thuê đối với các khoản trợ cấp của MySQL (kho tiền)$ kho tiền write mysql/config/lease lease=1h lease_max=12h Thành công. Dữ liệu được ghi đến. mysql / config / thuê Tại đây, bạn có thể thấy rằng một mẫu đã được tạo để bạn có thể tùy chỉnh các khoản trợ cấp cho mỗi vai trò. Chúng tôi đã tạo vai trò chỉ đọc, vì vậy vai trò này chỉ có quyền truy cập Bây giờ chúng tôi sẽ xác thực và yêu cầu người dùng của chúng tôi kết nối với cơ sở dữ liệu với 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 $ curl -- chứng chỉ người dùng.pem -- khóa khóa riêng tư. pem - H 'Loại nội dung. ứng dụng/json' ${VAULT_ADDR}/v1/auth/cert/login -X POST 2>/dev/null | json_pp { "auth" . { "chính sách" . [ "mặc định", "demo" ], "người truy cập" . "2e6d4b95-3bf5-f459-cd27-f9e35b9bed16", "có thể tái tạo" . đúng, "lease_duration" . 3600, "siêu dữ liệu" . { "common_name" . "[email được bảo vệ]", "cert_name" . "demo", "authority_key_id" . "", "subject_key_id" . "" }, "client_token" . "018e6feb-65c4-49f2-ae30-e4fbba81e687" }, "lease_id" . "", "wrap_info" . null, "tái tạo" . sai, "dữ liệu" . null, "request_id" . "f00fe669-4382-3f33-23ae-73cec0d02f39", "cảnh báo" . null, "lease_duration" . 0 }
$ curl -- chứng chỉ người dùng.pem -- khóa khóa riêng tư. pem - H 'Loại nội dung. ứng dụng/json' - H 'X-Vault-Token. 018e6feb-65c4-49f2-ae30-e4fbba81e687' ${VAULT_ADDR} . /v1/mysql/creds/readonly -X GET 2>/dev/null | json_pp { "lỗi" . [ "quyền bị từ chối" ] } Ồ, chuyện gì đã xảy ra vậy? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 (kho tiền)$ cat <<EOF | kho tiền chính sách - viết bản trình diễn /dev/stdin đường dẫn "sys/*" { chính sách = "từ chối" }
đường dẫn "secret/mysql/*" { chính sách = "đã đọc" khả năng = ["danh sách", "sudo"] }
đường dẫn "mysql/creds/readonly" { chính sách = "đã đọc" khả năng = ["danh sách", "sudo"] } EOF Chính sách 'demo' được viết. Bây giờ chúng tôi đã cập nhật chính sách để cho phép truy cập vào vai trò chỉ đọc (yêu cầu đi qua mysql/creds khi yêu cầu quyền truy cập), chúng tôi có thể kiểm tra xem chính sách đã được áp dụng chưa và liệu chúng tôi có nhận được tài khoản người dùng cho MySQL hay không 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 # Yêu cầu tài khoản người dùng $ curl -- chứng chỉ người dùng.pem -- khóa khóa riêng tư. pem - H 'Loại nội dung. ứng dụng/json' - H 'X-Vault-Token. 018e6feb-65c4-49f2-ae30-e4fbba81e687' ${VAULT_ADDR} . /v1/mysql/creds/readonly -X GET 2>/dev/null | json_pp { "request_id" . "7b45c9a1-bc46-f410-7af2-18c8e91f43de", "lease_id" . "mysql/creds/readonly/c661426c-c739-5bdb-cb7a-f51f74e16634", "cảnh báo" . null, "lease_duration" . 3600, "dữ liệu" . { "mật khẩu" . "099c8f2e-588d-80be-1e4c-3c2e20756ab4", "tên người dùng" . "read-cert-401f2c" }, "wrap_info" . null, "tái tạo" . đúng, "auth" . null }
# Kiểm tra quyền truy cập MySQL $ mysql - h localhost -u read-cert-401f2c -p Nhập mật khẩu. Chào mừng đến với trình giám sát MySQL monitor. Lệnh end with ;< . or g. Kết nối MySQL của bạn id là 17 Phiên bản máy chủ version. 5. 7. 14 - 8 - log Percona Server (GPL), Release '8', Revision '1f84ccd'
Bản quyền (c) 2009-2016 Percona LLC and/or its affiliates Bản quyền (c) 2000, 2016, Oracle and/or its affiliates. Tất cả quyền được bảo lưu.
Oracle là a đã đăng ký nhãn hiệu of Oracle Corporation and/or its đơn vị liên kết. Tên khác có thể là nhãn hiệuof their respective chủ sở hữu.
Nhập 'trợ giúp;' hoặc 'h' . help. Nhập 'c' để xóa the current input statement.
mysql> hiển thị cấp; +---------------------------------------------------- + | Giấy phép cho đọc - chứng chỉ . -401f2c@% | +---------------------------------------------------- + | CẤP CHỌN BẬT * . * ĐẾN 'read-cert-401f2c'@'%' | +---------------------------------------------------- + 1 hàng trong bộ (0.00 giây)
# Hiển thị đầy đủ thông tin tài khoản $ p - hiển thị - grants --only='read-cert-401f2c'@'%' -- Các khoản tài trợ được đổ bởi pt-show-grants -- Đã kết xuất từ máy chủ Localhost via UNIX socket, MySQL 5.7.14 - 8 - log . 2016-11-08 23:28. 37 -- Trợ cấp cho 'read-cert-401f2c'@'%' TẠO NGƯỜI DÙNG NẾU KHÔNG TỒN TẠI 'read-cert-401f2c'@'%'; THAY ĐỔI NGƯỜI DÙNG 'read-cert-401f2c'@'%' IDENTIFIED WITH 'mysql_native_password' AS '*FF157E33408E1FBE707B5FF89C87A2D14E8430C2' REQUIRE NONE PASSWORD EXPIRE INTERVAL 1 DAY ACCOUNT UNLOCK; CẤP CHỌN BẬT * . * ĐẾN 'read-cert-401f2c'@'%'; Tiếng hoan hô. Giờ đây, chúng tôi thậm chí không cần phải tạo người dùng, ứng dụng có thể nhận được một người dùng khi cần. Chúng tôi đã đặt tài khoản tự động hết hạn để thông tin đăng nhập chỉ có hiệu lực trong 1 ngày, bất kể thời gian hết hạn của Vault và chúng tôi cũng đã giảm thời gian mã thông báo hợp lệ, vì vậy chúng tôi đã hoàn thành khá tốt công việc Công dụng của Vault là gì?Vault cung cấp dịch vụ mã hóa với tính năng quản lý khóa tập trung để đơn giản hóa việc mã hóa dữ liệu khi truyền và lưu trữ trên các đám mây cũng như trung tâm dữ liệu . Vault có thể mã hóa/giải mã dữ liệu được lưu trữ ở nơi khác, về cơ bản cho phép các ứng dụng mã hóa dữ liệu của họ trong khi lưu trữ dữ liệu đó trong kho lưu trữ dữ liệu chính.
Ưu điểm của Vault là gì?Vault cung cấp các dịch vụ mã hóa được kiểm soát bởi các phương thức xác thực và ủy quyền . Sử dụng giao diện người dùng, CLI hoặc API HTTP của Vault, quyền truy cập vào các bí mật và dữ liệu nhạy cảm khác có thể được lưu trữ và quản lý một cách an toàn, được kiểm soát chặt chẽ (bị hạn chế) và có thể kiểm tra được.
Làm cách nào để lưu trữ bí mật trong MySQL?Quản lý bí mật có nghĩa là xử lý tất cả các loại bí mật theo cách có cấu trúc và an toàn. . Tạo một chính sách Tạo một vai trò được sử dụng để xác thực Thêm id bí mật vào vai trò Bật và định cấu hình chương trình phụ trợ bí mật của cơ sở dữ liệu MySQL Workbench vault ở đâu?nó thực sự là %appdata%\MySql\Workbench\workbench_user_data . |