Tài liệu này giải thích cách bật tính năng mã hoá khoá bí mật của người dùng ứng dụng dành cho nhà phát triển (thông tin xác thực ứng dụng khách) được lưu trữ trong cơ sở dữ liệu Cassandra.
Tổng quan
Theo truyền thống, Apigee Edge cho đám mây riêng tư đã cung cấp tính năng mã hoá không bắt buộc cho dữ liệu bản đồ khoá-giá trị (KVM) và mã truy cập OAuth.
Bảng sau đây mô tả các tuỳ chọn mã hoá cho dữ liệu tĩnh trong Apigee for Private Cloud:
Thực thể | Bật tính năng mã hoá theo mặc định | Có thể tuỳ ý mã hoá | Tài liệu liên quan |
KVM | Không | Có | Xem bài viết Giới thiệu về KVM được mã hoá. |
Mã truy cập OAuth | Không | Có | Xem phần Hàm băm mã thông báo để tăng cường bảo mật. |
Thông tin bí mật của người tiêu dùng về ứng dụng của nhà phát triển | Không | Có | Để bật, hãy thực hiện các bước định cấu hình trong tài liệu này. |
Để bật tính năng mã hoá thông tin xác thực của ứng dụng, bạn cần thực hiện các thao tác sau trên tất cả các nút máy chủ quản lý và trình xử lý thông báo:
- Tạo một kho khoá để lưu trữ khoá mã hoá khoá (KEK). Apigee sử dụng khoá đã mã hoá này để mã hoá các khoá bí mật cần thiết để mã hoá dữ liệu của bạn.
- Chỉnh sửa thuộc tính cấu hình trên tất cả các nút máy chủ quản lý và nút trình xử lý thư.
- Tạo ứng dụng của nhà phát triển để kích hoạt quá trình tạo khoá.
- Khởi động lại các nút.
Các nhiệm vụ này được giải thích trong tài liệu này.
Những điều bạn cần biết về tính năng mã hoá khoá
Các bước trong tài liệu này giải thích cách bật tính năng KEK, cho phép Apigee mã hoá các khoá bí mật dùng để mã hoá khoá bí mật của người dùng ứng dụng của nhà phát triển khi các khoá này được lưu trữ tĩnh trong cơ sở dữ liệu Cassandra.
Theo mặc định, mọi giá trị hiện có trong cơ sở dữ liệu sẽ không thay đổi (ở dạng văn bản thuần tuý) và tiếp tục hoạt động như trước đây.
Nếu bạn thực hiện bất kỳ thao tác ghi nào trên một thực thể chưa mã hoá, thì thực thể đó sẽ được mã hoá khi thao tác được lưu. Ví dụ: nếu bạn thu hồi một mã thông báo chưa mã hoá rồi sau đó phê duyệt, thì mã thông báo mới được phê duyệt sẽ được mã hoá.
Bảo mật khoá
Hãy nhớ lưu trữ một bản sao của kho khoá, trong đó KEK được lưu trữ ở một vị trí an toàn. Bạn nên sử dụng cơ chế bảo mật của riêng mình để lưu bản sao của kho khoá. Như hướng dẫn trong tài liệu này giải thích, bạn phải đặt kho khoá trên mỗi trình xử lý thông báo và nút máy chủ quản lý mà tệp cấu hình cục bộ có thể tham chiếu đến kho khoá đó. Tuy nhiên, bạn cũng cần lưu trữ một bản sao của kho khoá ở nơi khác để bảo quản an toàn và làm bản sao dự phòng.
Bật tính năng mã hoá khoá
Hãy làm theo các bước sau để mã hoá khoá bí mật của người dùng:
Điều kiện tiên quyết
Bạn phải đáp ứng các yêu cầu sau đây trước khi thực hiện các bước trong tài liệu này:
- Bạn phải cài đặt hoặc nâng cấp lên Apigee Edge for Private Cloud phiên bản 4.50.00.10 trở lên.
- Bạn phải là quản trị viên của Apigee Edge for Private Cloud.
Bước 1: Tạo kho khoá
Hãy làm theo các bước sau để tạo kho khoá lưu trữ khoá mã hoá khoá (KEK):
- Thực thi lệnh sau để tạo kho khoá nhằm lưu trữ khoá sẽ được dùng để mã hoá KEK. Nhập lệnh chính xác như minh hoạ. (Bạn có thể cung cấp bất kỳ tên kho khoá nào bạn muốn):
keytool -genseckey -alias KEYSTORE_NAME -keyalg AES -keysize 256 \ -keystore kekstore.p12 -storetype PKCS12
Khi được nhắc, hãy nhập mật khẩu. Bạn sẽ sử dụng mật khẩu này trong các phần sau khi định cấu hình máy chủ quản lý và trình xử lý thông báo.
Lệnh này tạo ra một tệp kho khoá kekstore.p12 chứa một khoá có bí danh KEYSTORE_NAME.
- (Không bắt buộc) Xác minh tệp đã được tạo chính xác bằng lệnh sau. Nếu tệp đó chính xác, lệnh sẽ trả về một khoá có bí danh là KEYSTORE_NAME:
keytool -list -keystore kekstore.p12
Làm việc với kho khoá BCFKS cho các hệ điều hành hỗ trợ FIPS
Nếu đang sử dụng Edge cho Đám mây riêng tư trên hệ điều hành có hỗ trợ FIPS, bạn nên tạo một kho khoá thuộc loại BCFKS. Kho khoá như vậy có thể được tạo trên máy không sử dụng FIPS, sau đó được chuyển sang máy tuân thủ FIPS. Để tạo kho khoá, hãy sử dụng lệnh sau:
keytool -genseckey -alias <KEYSTORE_NAME> -keyalg AES -keysize 256 \
-storetype BCFKS -keystore keystore.bcfks \
-providerpath /opt/apigee/edge-gateway/lib/thirdparty/bc-fips-1.0.2.4.jar \
-providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider \
-keypass keystorepass -storepass keystorepass
Bạn có thể cần thực hiện thêm các chế độ cài đặt Java trên máy đang tạo kho khoá này. Bạn có thể cần chỉnh sửa tệp bảo mật Java của máy (thường nằm tại /usr/lib/jvm/jre/lib/security/java.security). Trong tệp này, hãy tìm và chỉnh sửa các thuộc tính sau:
# Don't rely on /dev/random for generating random numbers
securerandom.source=file:/dev/urandom
securerandom.strongAlgorithms=PKCS11:SunPKCS11-NSS-FIPS
Bước 2: Định cấu hình máy chủ quản lý
Tiếp theo, hãy định cấu hình máy chủ quản lý. Nếu đã cài đặt máy chủ quản lý trên nhiều nút, bạn phải lặp lại các bước này trên từng nút.
- Sao chép tệp kho khoá mà bạn đã tạo ở Bước 1 vào một thư mục trên nút máy chủ quản lý, chẳng hạn như
/opt/apigee/customer/application
. Ví dụ:cp certs/kekstore.p12 /opt/apigee/customer/application
- Đảm bảo người dùng
apigee
có thể đọc tệp:chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
chmod 400 /opt/apigee/customer/application/kekstore.p12
- Thêm các thuộc tính sau vào
/opt/apigee/customer/application/management-server.properties
. Nếu tệp không tồn tại, hãy tạo tệp đó. Xem thêm phần Tham chiếu tệp thuộc tính.
conf_keymanagement_kmscred.encryption.enabled=true # Fallback is true to ensure your existing plaintext credentials continue to work conf_keymanagement_kmscred.encryption.allowFallback=true conf_keymanagement_kmscred.encryption.keystore.path=PATH_TO_KEYSTORE_FILE conf_keymanagement_kmscred.encryption.kek.alias=KEYSTORE_NAME # These could alternately be set as environment variables. These variables should be # accessible to Apigee user during bootup of the Java process. If environment # variables are specified, you can skip the password configs below. # KMSCRED_ENCRYPTION_KEYSTORE_PASS= # KMSCRED_ENCRYPTION_KEK_PASS= See also Using environment variables for configuration properties. conf_keymanagement_kmscred.encryption.keystore.pass=KEYSTORE_PASSWORD conf_keymanagement_kmscred.encryption.kek.pass=KEK_PASSWORD
Lưu ý rằng
KEK_PASSWORD
có thể giống vớiKEYSTORE_PASSWORD
, tuỳ thuộc vào công cụ dùng để tạo kho khoá. - Khởi động lại máy chủ quản lý bằng các lệnh sau:
/opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
/opt/apigee/apigee-service/bin/apigee-service edge-management-server wait_for_ready
Lệnh
wait_for_ready
sẽ trả về thông báo sau khi máy chủ quản lý đã sẵn sàng:Checking if management-server is up: management-server is up.
- Nếu bạn đã cài đặt máy chủ quản lý trên nhiều nút, hãy lặp lại các bước 1-4 ở trên trên từng nút máy chủ quản lý.
Bước 3: Tạo ứng dụng dành cho nhà phát triển
Giờ đây, sau khi cập nhật các máy chủ quản lý, bạn phải tạo một ứng dụng dành cho nhà phát triển để kích hoạt việc tạo khoá dùng để mã hoá dữ liệu thông tin đăng nhập của ứng dụng:
- Tạo một ứng dụng dành cho nhà phát triển để kích hoạt việc tạo khoá mã hoá dữ liệu (KEK). Để biết các bước, hãy xem bài viết Đăng ký ứng dụng.
- Xoá ứng dụng của nhà phát triển nếu bạn muốn. Bạn không cần giữ lại khoá này sau khi khoá mã hoá được tạo.
Bước 4: Định cấu hình trình xử lý thông báo
Cho đến khi bạn bật tính năng mã hoá trong trình xử lý thông báo, các yêu cầu về thời gian chạy sẽ không thể xử lý bất kỳ thông tin xác thực nào được mã hoá.
- Sao chép tệp kho khoá mà bạn đã tạo ở Bước 1 vào một thư mục trên nút trình xử lý thông báo, chẳng hạn như
/opt/apigee/customer/application
. Ví dụ:cp certs/kekstore.p12 /opt/apigee/customer/application
- Đảm bảo người dùng
apigee
có thể đọc tệp:chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
- Thêm các thuộc tính sau vào
/opt/apigee/customer/application/message-processor.properties
. Nếu tệp không tồn tại, hãy tạo tệp đó. Xem thêm phần Tham chiếu tệp thuộc tính.conf_keymanagement_kmscred.encryption.enabled=true # Fallback is true to ensure your existing plaintext credentials continue to work conf_keymanagement_kmscred.encryption.allowFallback=true conf_keymanagement_kmscred.encryption.keystore.path=PATH_TO_KEYSTORE_FILE conf_keymanagement_kmscred.encryption.kek.alias=KEYSTORE_NAME # These could alternately be set as environment variables. These variables should be # accessible to Apigee user during bootup of the Java process. If environment # variables are specified, you can skip the password configs below. # KMSCRED_ENCRYPTION_KEYSTORE_PASS= # KMSCRED_ENCRYPTION_KEK_PASS= See also Using environment variables for configuration properties. conf_keymanagement_kmscred.encryption.keystore.pass=KEYSTORE_PASSWORD conf_keymanagement_kmscred.encryption.kek.pass=KEK_PASSWORD
Lưu ý rằng
KEK_PASSWORD
có thể giống vớiKEYSTORE_PASSWORD
tuỳ thuộc vào công cụ dùng để tạo kho khoá. - Khởi động lại trình xử lý thông báo bằng các lệnh sau:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor wait_for_ready
Lệnh
wait_for_ready
sẽ trả về thông báo sau khi trình xử lý thông báo sẵn sàng xử lý thông báo:Checking if message-processor is up: message-processor is up.
- Nếu bạn đã cài đặt trình xử lý thông báo trên nhiều nút, hãy lặp lại các bước 1-4 trên từng nút trình xử lý thông báo.
Tóm tắt
Từ giờ trở đi, mọi ứng dụng của nhà phát triển mà bạn tạo ra sẽ được mã hoá bí mật về thông tin đăng nhập khi lưu trữ trong cơ sở dữ liệu Cassandra.
Sử dụng biến môi trường cho các thuộc tính cấu hình
Ngoài ra, bạn có thể đặt các thuộc tính cấu hình máy chủ quản lý và trình xử lý thông báo sau đây bằng cách sử dụng biến môi trường. Nếu được đặt, các biến môi trường sẽ ghi đè thuộc tính được đặt trong tệp cấu hình máy chủ quản lý hoặc trình xử lý thông báo.
conf_keymanagement_kmscred.encryption.keystore.pass= conf_keymanagement_kmscred.encryption.kek.pass=
Các biến môi trường tương ứng là:
export KMSCRED_ENCRYPTION_KEYSTORE_PASS=KEYSTORE_PASSWORD
export KMSCRED_ENCRYPTION_KEK_PASS=KEK_PASSWORD
Nếu đặt các biến môi trường này, bạn có thể bỏ qua các thuộc tính cấu hình này khỏi tệp cấu hình trên trình xử lý thông báo và nút máy chủ quản lý, vì các thuộc tính này sẽ bị bỏ qua:
conf_keymanagement_kmscred.encryption.keystore.pass conf_keymanagement_kmscred.encryption.kek.pass
Tài liệu tham khảo tệp thuộc tính
Phần này mô tả các thuộc tính cấu hình mà bạn phải thiết lập trên tất cả các nút trình xử lý thông báo và máy chủ quản lý, như đã giải thích trước đó trong tài liệu này.
Thuộc tính | Mặc định | Mô tả |
conf_keymanagement_kmscred.encryption.enabled
|
false
|
Phải là true để bật tính năng mã hoá khoá.
|
conf_keymanagement_kmscred.encryption.allowFallback
|
false
|
Đặt allowFallback thành true để đảm bảo thông tin xác thực văn bản thuần tuý hiện có của bạn vẫn hoạt động.
|
conf_keymanagement_kmscred.encryption.keystore.path
|
Không áp dụng | Cung cấp đường dẫn đến kho khoá KEK trên nút xử lý thông báo hoặc nút máy chủ quản lý. Xem Bước 2: Định cấu hình máy chủ quản lý và Bước 3: Định cấu hình trình xử lý thông báo. |
conf_keymanagement_kmscred.encryption.kek.alias
|
Không áp dụng | Bí danh mà KEK được lưu trữ trong kho khoá. |
conf_keymanagement_kmscred.encryption.keystore.pass
|
Không áp dụng | Không bắt buộc nếu bạn sử dụng các biến môi trường để đặt những thuộc tính này. Hãy xem thêm bài viết Sử dụng biến môi trường cho các thuộc tính cấu hình. |
conf_keymanagement_kmscred.encryption.kek.pass
|
Không áp dụng | Không bắt buộc nếu bạn sử dụng biến môi trường để đặt các thuộc tính này. Hãy xem thêm bài viết Sử dụng biến môi trường cho các thuộc tính cấu hình. |