Edge for Private Cloud เวอร์ชัน 4.16.09
TLS (Transport Layer Security ซึ่งรุ่นก่อนหน้าคือ SSL) เป็นเทคโนโลยีความปลอดภัยมาตรฐานเพื่อการรับส่งข้อความที่เข้ารหัสอย่างปลอดภัยในสภาพแวดล้อม API คุณสามารถกำหนดค่า TLS ได้บนพอร์ทัล API BaaS และโหนด API BaaS Stack
รูปภาพต่อไปนี้แสดงผังการทําให้ใช้งานได้ทั่วไปสําหรับ API BaaS ที่มีโหนด BaaS Portal 1 โหนดและโหนด API BaaS Stack 3 โหนด
นักพัฒนาแอปใช้เบราว์เซอร์เพื่อส่งคำขอไปยังพอร์ทัล โดยค่าเริ่มต้น คำขอจะใช้โปรโตคอล HTTP ในพอร์ต 9000 ของโหนดพอร์ทัล
การติดตั้งใช้งานนี้ประกอบด้วยตัวจัดสรรภาระงานระหว่างพอร์ทัลกับโหนดสแต็ก ในการกำหนดค่านี้ พอร์ทัลจะส่งคำขอ HTTP ไปยังตัวจัดสรรภาระงาน จากนั้นตัวจัดสรรภาระงานจะส่งต่อคำขอไปยังโหนดสแต็กรายการใดรายการหนึ่ง นี่คือสภาพแวดล้อมการทำให้ใช้งานได้ที่แนะนำสำหรับระบบที่ใช้งานจริง
ตัวเลือกการกำหนดค่า TLS
เมื่อกำหนดค่า TLS สำหรับ API BaaS คุณจะมีตัวเลือกต่อไปนี้
- กําหนดค่า TLS ในพอร์ทัลและตัวจัดสรรภาระงานสําหรับโหนดสแต็ก
ในการกําหนดค่านี้ นักพัฒนาซอฟต์แวร์จะใช้โปรโตคอล HTTPS เพื่อเข้าถึงพอร์ทัล และพอร์ทัลที่ทํางานในเบราว์เซอร์จะใช้ HTTPS เพื่อส่งคําขอไปยังโหนดสแต็กผ่านตัวจัดสรรภาระงาน ตัวจัดสรรภาระงานใช้ HTTP เพื่อเข้าถึงโหนดสแต็ก - กำหนดค่า TLS ในพอร์ทัล ตัวจัดสรรภาระงาน และโหนดสแต็ก
กำหนดค่าตัวจัดสรรภาระงานให้ใช้ TLS เพื่อเข้าถึงโหนดสแต็กเพื่อเพิ่มความปลอดภัย - กำหนดค่า TLS ในพอร์ทัลและบนโหนดสแต็กเดียว
ในสภาพแวดล้อมขนาดเล็ก เช่น ในสภาพแวดล้อมการทดสอบหรือการพัฒนา คุณอาจมีเพียงโหนดสแต็กเดียว ซึ่งหมายความว่าไม่จําเป็นต้องใส่ตัวจัดสรรภาระงาน ในการกำหนดค่านี้ ให้กำหนดค่า TLS ทั้งบนพอร์ทัลและโหนดสแต็ก - กำหนดค่า TLS ในโปรแกรมจัดสรรภาระงานสำหรับพอร์ทัล
ตัวเลือกหนึ่งที่ไม่ได้แสดงด้านบนคือการใช้โปรแกรมจัดสรรภาระงานไว้ด้านหน้าโหนดพอร์ทัล ในการกำหนดค่านั้น คุณสามารถกำหนดค่า TLS ในตัวจัดสรรภาระงาน และกำหนดค่าในการเชื่อมต่อระหว่างตัวจัดสรรภาระงานกับพอร์ทัลได้ (ไม่บังคับ)
ตรวจสอบว่าพอร์ต TLS เปิดอยู่
ขั้นตอนด้านล่างจะกำหนดค่า TLS ในพอร์ตเริ่มต้นของพอร์ทัล 9000 และโหนดสแต็ก 8080 แต่คุณสามารถเปลี่ยนพอร์ตนี้ได้หากต้องการ
ไม่ว่าคุณจะใช้พอร์ตใดก็ตาม คุณต้องตรวจสอบว่าพอร์ตเปิดอยู่ในโหนด ตัวอย่างเช่น คุณใช้คำสั่งต่อไปนี้เพื่อเปิดพอร์ต 8443 ได้
$ iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8443 -j ACCEPT --verbose
การกำหนดค่า TLS ในสแต็ก API BaaS
โดยค่าเริ่มต้น ระบบจะปิดใช้ TLS สําหรับสแต็ก BaaS ของ API จากนั้นคุณจะเข้าถึง BaaS API ผ่าน HTTP ได้โดยใช้ที่อยู่ IP หรือชื่อ DNS ของโหนด Stack และพอร์ต 8080 เช่น
http://stack_IP:8080
หรือจะกำหนดค่าการเข้าถึง TLS ไปยัง BaaS API เพื่อให้เข้าถึงในรูปแบบต่อไปนี้ก็ได้
https://stack_IP:8080
ในตัวอย่างนี้ คุณได้กำหนดค่าการเข้าถึง TLS เพื่อใช้พอร์ต 8080 แต่ไม่จำเป็นต้องใช้พอร์ต 8080 เนื่องจากคุณสามารถกำหนดค่าสแต็กให้ใช้พอร์ตอื่นได้ ข้อกำหนดเพียงอย่างเดียวคือไฟร์วอลล์ต้องอนุญาตให้มีการรับส่งข้อมูลผ่านพอร์ตที่ระบุ
สแต็กรองรับคำขอเพียงประเภทเดียว (HTTP หรือ HTTPS) ผ่านพอร์ตเดียว ดังนั้นหากคุณกำหนดค่าการเข้าถึง HTTPS บนพอร์ต 8080 คุณจะใช้ HTTP เพื่อเข้าถึงพอร์ต 8080 ไม่ได้ หากคุณกำหนดค่าสแต็กให้ใช้พอร์ต 8443 กับ HTTPS สแต็กจะไม่ฟังพอร์ต 8080 อีกต่อไป
ใช้ขั้นตอนต่อไปนี้ในการกำหนดค่าการเข้าถึง TLS ของสแต็ก
- สร้างไฟล์ JKS ของคีย์สโตร์ที่ประกอบด้วยใบรับรอง TLS และคีย์ส่วนตัว ดูข้อมูลเพิ่มเติมได้ที่การกำหนดค่า TLS/SSL สำหรับ Edge ในองค์กร
หมายเหตุ: ตรวจสอบว่ารหัสผ่านในคีย์สโตร์และคีย์เหมือนกัน - คัดลอกไฟล์ JKS ของคีย์สโตร์ไปยังไดเรกทอรีบนโหนดสแต็ก เช่น /opt/apigee/customer/application ผู้ใช้ "apigee" ต้องเข้าถึงไดเรกทอรีได้
- เปลี่ยนการเป็นเจ้าของไฟล์ JKS เป็นผู้ใช้ "apigee" ดังนี้
> chown apigee:apigee /opt/apigee/customer/application/keystore.jks
โดยที่ keystore.jks คือชื่อไฟล์คีย์สโตร์ของคุณ - แก้ไขไฟล์ /opt/apigee/customer/application/usergrid.properties เพื่อตั้งค่าพร็อพเพอร์ตี้ต่อไปนี้ ซึ่งรวมถึงเส้นทางไปยังไฟล์ JKS และรหัสผ่านในคีย์สโตร์และคีย์ แต่หากไม่มีไฟล์ดังกล่าวอยู่ ให้สร้างไฟล์ขึ้นมาโดยทำดังนี้
tomcat-server-server_scheme=https
tomcat-server_server_scheme=https
/opt/apigee/customer/application/keystore.jks
# ใช้พร็อพเพอร์ตี้นี้เพื่อระบุพอร์ตอื่น
# tomcat-server_port=8080
คำเตือน: ค่า password ต้องอยู่ในรูปแบบข้อความธรรมดา ดังนั้น คุณจึงควรปกป้อง usergrid.properties จากการเข้าถึงที่ไม่ได้รับอนุญาต
ใช้พร็อพเพอร์ตี้ tomcat-server_keyalias เพื่อระบุอีเมลแทนของคีย์สโตร์ คุณตั้งค่าอีเมลแทนของคีย์เมื่อสร้างคีย์ เช่น คุณสามารถตั้งค่าได้โดยการใช้ตัวเลือก -alias กับคำสั่ง keytool
ใช้ tomcat-server_ssl.protocols เพื่อตั้งค่าโปรโตคอล TLS ที่กลุ่มดังกล่าวรองรับ ดูรายการโปรโตคอลที่ Java 8 รองรับได้ที่ http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#jssename - กำหนดค่าโหนดสแต็ก:
> /opt/apigee/apigee-service/bin/apigee-service baas-usergrid กำหนดค่า - นำการเปลี่ยนแปลงไปใช้กับ Tomcat ได้ดังนี้
> /opt/apigee/apigee-service/bin/apigee-service baas-usergrid นำไปใช้งาน - รีสตาร์ทสแต็ก BaaS ตามขั้นตอนต่อไปนี้
> /opt/apigee/apigee-service/bin/apigee-service baas-usergridRestart - ยืนยันว่า TLS ทำงานอยู่โดยเรียกใช้คำสั่ง cURL ต่อไปนี้บนโหนดกลุ่มโดยใช้ HTTPS:
> curl -k https://localhost:8080/status -v
หากกำหนดค่า TLS ถูกต้อง คุณควรเห็นการตอบกลับที่มีข้อมูลสถานะ
หากกำหนดค่าการเข้าถึง TLS ผ่านพอร์ตอื่นที่ไม่ใช่ 8080 ให้แก้ไขคำสั่งด้านบนเพื่อใช้พอร์ตที่ถูกต้อง - ทำซ้ำในโหนด Stack ทั้งหมด
- หากมีตัวจัดสรรภาระงานอยู่หน้าโหนดสแต็ก ให้กําหนดค่าตัวจัดสรรภาระงานให้ส่งคําขอไปยังโหนดสแต็กผ่าน HTTPS ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของตัวจัดสรรภาระงาน
หากพอร์ทัลส่งคำขอไปยังสแต็กโดยตรง ให้กำหนดค่าพอร์ทัลให้เข้าถึงสแต็กผ่าน HTTPS ตามที่อธิบายไว้ในส่วนต่อไปนี้ - ทำตามขั้นตอนด้านล่างใน "กำหนดค่าโหนดสแต็ก API BaaS สำหรับ TLS ในสแต็กหรือพอร์ทัล" เพื่อให้มั่นใจว่าโหนดสแต็กมี URL ของ TLS ที่ถูกต้องเมื่อสร้างการตอบสนองของผู้ใช้
การกำหนดค่าพอร์ทัลเพื่อเข้าถึงสแต็กผ่าน TLS
พอร์ทัล BaaS ที่ทำงานในเบราว์เซอร์จะทํางานโดยการเรียก API ไปยังสแต็ก BaaS หากคุณกำหนดค่าสแต็ก BaaS ให้ใช้ TLS คุณต้องกำหนดค่าพอร์ทัลให้ทำการเรียกเหล่านั้นผ่าน HTTPS ด้วย
โดยปกติแล้วการติดตั้ง BaaS ของ API จะกําหนดค่าเป็นอย่างใดอย่างหนึ่งต่อไปนี้
- ใช้ตัวจัดสรรภาระงานระหว่างพอร์ทัลกับโหนดสแต็ก
กำหนดค่าตัวจัดสรรภาระงานให้ส่งคำขอไปยังโหนดสแต็กผ่าน HTTPS ดูข้อมูลเพิ่มเติมในเอกสารประกอบของตัวจัดสรรภาระงาน
ในการกำหนดค่านี้ พอร์ทัลจะเข้าถึงตัวจัดสรรภาระงานผ่าน HTTP หรือ HTTPS ได้ ทั้งนี้ขึ้นอยู่กับวิธีที่คุณกำหนดค่าตัวจัดสรรภาระงาน หากตัวจัดสรรภาระงานใช้ TLS ให้ทำตามขั้นตอนด้านล่างเพื่อกำหนดค่าพอร์ทัลให้ส่งคำขอไปยังตัวจัดสรรภาระงานของ HTTPS - ให้พอร์ทัลส่งคำขอไปยังกองโดยตรง
กำหนดค่าพอร์ทัลให้เข้าถึงกองผ่าน HTTPS ตามที่อธิบายไว้ด้านล่าง
ใช้ขั้นตอนต่อไปนี้ในการกำหนดค่าพอร์ทัล API BaaS เพื่อทำการเรียก API ผ่าน HTTPS
- กําหนดค่าการเข้าถึง TLS ใน BaaS Stack ตามที่อธิบายไว้ข้างต้น หรือในโปรแกรมโหลดบาลานซ์สําหรับโหนดสแต็กตามที่อธิบายไว้ในเอกสารประกอบสําหรับโปรแกรมโหลดบาลานซ์
- แก้ไข /opt/apigee/customer/application/portal.properties เพื่อตั้งค่าพร็อพเพอร์ตี้ต่อไปนี้ หากไม่มีไฟล์ดังกล่าว ให้สร้างไฟล์
baas.portal.config.overrideUrl=https://stackIP:port
ระบุที่อยู่ IP หรือชื่อ DNS และพอร์ตของโหนด API Stack เป็นค่าของพร็อพเพอร์ตี้นี้สําหรับการติดตั้งโหนดเดียว หรือของโหลดบาลานซ์หากคุณมีโหลดบาลานซ์อยู่หน้าโหนด API BaaS Stack - กำหนดค่าโหนดพอร์ทัล:
> /opt/apigee/apigee-service/bin/apigee-service baas-portalกำหนดค่า - รีสตาร์ทพอร์ทัลโดยใช้คำสั่ง
> /opt/apigee/apigee-service/bin/apigee-service baas-portal start - หากคุณใช้ใบรับรองที่ลงชื่อด้วยตนเองเมื่อกำหนดค่าการเข้าถึง TLS ของสแต็กด้านบน เบราว์เซอร์อาจไม่อนุญาตให้ส่งคำขอไปยังสแต็กจากพอร์ทัล หากเห็นข้อผิดพลาดในเบราว์เซอร์ว่าไม่อนุญาตให้เข้าถึงสแต็กผ่าน HTTPS ให้ขอ URL ต่อไปนี้ในเบราว์เซอร์ แล้วเพิ่มข้อยกเว้นด้านความปลอดภัยเพื่ออนุญาตการเข้าถึง
https://stackIP:port/status
ระบุที่อยู่ IP หรือชื่อ DNS และพอร์ตของโหนดสแต็ก API หรือโหลดบาลานเซอร์
การกำหนดค่า TLS ในพอร์ทัล API BaaS
โดยค่าเริ่มต้น ผู้ใช้จะเข้าถึงพอร์ทัลได้โดยส่งคำขอ HTTP ที่ไม่ได้เข้ารหัสผ่านพอร์ต 9000 ในเซิร์ฟเวอร์พอร์ทัล คุณสามารถกำหนดค่าพอร์ทัลให้ใช้ HTTPS เพื่อเข้ารหัสข้อมูลที่ส่งไปยังและจากพอร์ทัลได้
โดยค่าเริ่มต้น คุณจะเข้าถึงพอร์ทัลผ่าน HTTP โดยใช้ที่อยู่ IP หรือชื่อ DNS ของโหนดพอร์ทัลและพอร์ต 9000 เช่น
http://portal_IP:9000
หรือจะกำหนดค่าการเข้าถึง TLS ของพอร์ทัลเพื่อให้เข้าถึงได้ในแบบฟอร์ม ดังนี้
https://portal_IP:9443
ในตัวอย่างนี้ คุณกําหนดค่าการเข้าถึง TLS ให้ใช้พอร์ต 9443 อย่างไรก็ตาม คุณไม่จำเป็นต้องใช้พอร์ต 9443 ก็ได้ คุณสามารถกำหนดค่าพอร์ทัลให้ใช้พอร์ตอื่นได้
พอร์ทัลรองรับคำขอเพียงประเภทเดียว (HTTP หรือ HTTPS) ผ่านพอร์ตเดียว ดังนั้น หากคุณกำหนดค่าการเข้าถึง HTTPS ในพอร์ต 9000 คุณจะไม่สามารถใช้ HTTP เพื่อเข้าถึงพอร์ต 9000 ได้ หากคุณกำหนดค่าพอร์ทัลให้ใช้พอร์ต 9443 กับ HTTPS พอร์ทัลจะไม่ฟังพอร์ต 9000 อีกต่อไป
วิธีกำหนดค่า TLS สำหรับพอร์ทัล
- สร้างไฟล์คีย์และไฟล์ใบรับรองในรูปแบบ PEM
หมายเหตุ: ตรวจสอบว่าไม่มีรหัสผ่าน/รหัสผ่านบนคีย์หรือใบรับรอง - คัดลอกไฟล์ PEM ไปยังไดเรกทอรีบนโหนดพอร์ทัล เช่น /opt/apigee/customer/application ผู้ใช้ "apigee" ต้องเข้าถึงไดเรกทอรีได้
- เปลี่ยนการเป็นเจ้าของไฟล์ PEM เป็นผู้ใช้ "apigee"
> chown apigee:apigee /opt/apigee/customer/application/*.PEM - แก้ไขไฟล์ /opt/apigee/customer/application/portal.properties เพื่อตั้งค่าพร็อพเพอร์ตี้ต่อไปนี้ หากไม่มีไฟล์ดังกล่าว ให้สร้างไฟล์
baas.portal.ssl=on
baas.portal.ssl.certificate=/opt/apigee/customer/application/defaultcert.pem
baas.portal.ssl.key=/opt/apigee/customer/application/defaultkey.pem
baas.portal.ssl.protocols=TLSv1 TLSv1.1 TLSv1.2
# โดยค่าเริ่มต้น การเข้าถึง TLS จะใช้พอร์ต 9000
# ใช้พร็อพเพอร์ตี้นี้เพื่อระบุพอร์ตอื่น
# baas.portal.listen=9000
ใช้ baas.portal.ssl.protocols เพื่อตั้งค่าโปรโตคอล TLS ที่พอร์ทัลรองรับ ดูรายการโปรโตคอลที่รองรับได้ที่รายการชื่อโปรโตคอล SSL ที่ Nginx กำหนดไว้ http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_protocols - กำหนดค่าโหนดพอร์ทัล
> /opt/apigee/apigee-service/bin/apigee-service baas-portal configure - ติดตั้งใช้งานการกําหนดค่า
> /opt/apigee/apigee-service/bin/apigee-service baas-portal deploy - รีสตาร์ทพอร์ทัล
> /opt/apigee/apigee-service/bin/apigee-service baas-portal restart - ทำตามขั้นตอนด้านล่างในส่วน "กำหนดค่าโหนดสแต็ก API BaaS สำหรับ TLS ในสแต็กหรือพอร์ทัล" เพื่อให้แน่ใจว่าโหนดสแต็กมี URL TLS ที่ถูกต้องสำหรับพอร์ทัล
กำหนดค่าโหนด API BaaS สำหรับ TLS ในแพลตฟอร์มหรือพอร์ทัล
หากคุณใส่ตัวจัดสรรภาระงานไว้ด้านหน้าโหนดสแต็กหรือพอร์ทัล หรือเปิดใช้ TLS ในโหนดพอร์ทัลหรือสแต็กโดยตรง คุณจะต้องกำหนดค่าโหนดด้วย URL ที่ถูกต้องเพื่อเข้าถึงสแต็กและพอร์ทัล ตัวอย่างเช่น โหนดของสแต็กต้องใช้ข้อมูลนี้ในกรณีต่อไปนี้
- การรวม URL ไว้ในการตอบกลับในคำขอ BaaS API
- การเพิ่มลิงก์ในเทมเพลตอีเมลเมื่อรีเซ็ตรหัสผ่านหรือส่งการแจ้งเตือนอื่นๆ
- การเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าพอร์ทัลที่เฉพาะเจาะจง
หากคุณใช้ตัวจัดสรรภาระงานด้านหน้าโหนดสแต็กหรือกำหนดค่า TLS ในโหนดสแต็ก ให้ตั้งค่าพร็อพเพอร์ตี้ต่อไปนี้ใน /opt/apigee/customer/application/usergrid.properties
usergrid-deployment_swagger.basepath=http://localhost:8080 usergrid-deployment_usergrid.organization.activation.url=http://localhost:8080/management/organizations/%s/activate usergrid-deployment_usergrid.admin.activation.url=http://localhost:8080/management/users/%s/activate usergrid-deployment_usergrid.admin.resetpw.url=http://localhost:8080/management/users/%s/resetpw usergrid-deployment_usergrid.admin.confirmation.url=http://localhost:8080/management/users/%s/confirm usergrid-deployment_usergrid.user.activation.url=http://localhost:8080/%s/%s/users/%s/activate usergrid-deployment_usergrid.user.confirmation.url=http://localhost:8080/%s/%s/users/%s/confirm usergrid-deployment_usergrid.user.resetpw.url=http://localhost:8080/%s/%s/users/%s/resetpw
แทนที่ http://localhost:8080 ด้วย URL ของตัวจัดสรรภาระงาน หากกำหนดค่าตัวจัดสรรภาระงานให้ใช้ TLS ให้ใช้โปรโตคอล HTTPS คุณต้องใส่พอร์ตเฉพาะในกรณีที่ใช้พอร์ตที่ไม่เป็นมาตรฐาน ซึ่งหมายถึงพอร์ตที่ไม่ใช่พอร์ต 80 สำหรับ HTTP และพอร์ต 443 สำหรับ HTTPS
นอกจากนี้ คุณยังต้องตั้งค่าพร็อพเพอร์ตี้ต่อไปนี้ใน /opt/apigee/customer/application/portal.properties ด้วยหากใช้โหลดบาลานเซอร์ไว้ด้านหน้าโหนดสแต็ก
baas.portal.config.overrideUrl=http://localhost:8080
แทนที่ http://localhost:8080 ด้วย URL ของตัวจัดสรรภาระงานสําหรับสแต็ก
หากคุณใช้ตัวจัดสรรภาระงานที่ด้านหน้าโหนดพอร์ทัลหรือกำหนดค่า TLS ในโหนดสแต็ก ให้ตั้งค่าพร็อพเพอร์ตี้ต่อไปนี้ใน usergrid.properties
usergrid-deployment_usergrid.view.management.organizations.organization.activate=http://localhost:9000 usergrid-deployment_usergrid.view.management.organizations.organization.confirm=http://localhost:9000 usergrid-deployment_usergrid.view.management.users.user.activate=http://localhost:9000 usergrid-deployment_usergrid.view.management.users.user.confirm=http://localhost:9000
แทนที่ http://localhost:9000 ด้วย URL ของตัวจัดสรรภาระงาน หากกำหนดค่าตัวจัดสรรภาระงานให้ใช้ TLS ให้ใช้โปรโตคอล HTTPS คุณจำเป็นต้องระบุพอร์ตก็ต่อเมื่อใช้พอร์ตที่ไม่เป็นไปตามมาตรฐาน ซึ่งก็คือพอร์ตอื่นที่ไม่ใช่พอร์ต 80 สำหรับ HTTP และพอร์ต 443 สำหรับ HTTPS
หลังจากแก้ไข usergrid.properties แล้ว ให้ทำดังนี้
- กำหนดค่าโหนดสแต็ก
> /opt/apigee/apigee-service/bin/apigee-service baas-usergrid configure - นำการเปลี่ยนแปลงไปใช้กับ Tomcat ได้ดังนี้
> /opt/apigee/apigee-service/bin/apigee-service baas-usergrid นำไปใช้งาน - รีสตาร์ทสแต็ก BaaS
> /opt/apigee/apigee-service/bin/apigee-service baas-usergrid restart - หากคุณแก้ไข portal.properties ให้กําหนดค่าโหนดพอร์ทัล
> /opt/apigee/apigee-service/bin/apigee-service baas-portal configure - ติดตั้งใช้งานการเปลี่ยนแปลง
> /opt/apigee/apigee-service/bin/apigee-service baas-portal deploy - รีสตาร์ทพอร์ทัล BaaS ดังนี้
> /opt/apigee/apigee-service/bin/apigee-service baas-portalRestart