การเปิดใช้การเข้ารหัสลับคีย์ลับ

เอกสารนี้อธิบายวิธีเปิดใช้การเข้ารหัสรหัสลับของผู้บริโภค (ข้อมูลเข้าสู่ระบบไคลเอ็นต์) ของแอปของนักพัฒนาแอปที่จัดเก็บไว้ในฐานข้อมูล Cassandra

ภาพรวม

เดิม Apigee Edge สําหรับ Private Cloud มีการเข้ารหัสที่ไม่บังคับสําหรับข้อมูลการแมปคีย์-ค่า (KVM) และโทเค็นการเข้าถึง OAuth

ตารางต่อไปนี้อธิบายตัวเลือกการเข้ารหัสสําหรับข้อมูลที่จัดเก็บใน Apigee สําหรับระบบคลาวด์ส่วนตัว

เอนทิตี เปิดใช้การเข้ารหัสโดยค่าเริ่มต้น การเข้ารหัส (ไม่บังคับ) เอกสารประกอบที่เกี่ยวข้อง
KVM ไม่ได้ ใช่ ดูเกี่ยวกับ KVM ที่เข้ารหัส
โทเค็นการเข้าถึง OAuth ไม่ได้ ใช่ ดูการแฮชโทเค็นเพื่อความปลอดภัยเพิ่มเติม
ข้อมูลลับของผู้ใช้แอปของนักพัฒนาแอป ไม่ได้ ใช่ หากต้องการเปิดใช้ ให้ทำตามขั้นตอนการกำหนดค่าในเอกสารนี้

หากต้องการเปิดใช้การเข้ารหัสข้อมูลเข้าสู่ระบบไคลเอ็นต์ คุณต้องดำเนินการต่อไปนี้กับโหนดตัวประมวลผลข้อความและโหนดเซิร์ฟเวอร์การจัดการทั้งหมด

  • สร้างคีย์สโตร์เพื่อจัดเก็บคีย์การเข้ารหัสคีย์ (KEK) Apigee จะใช้คีย์ที่เข้ารหัสนี้เพื่อเข้ารหัสคีย์ลับที่จําเป็นสําหรับเข้ารหัสข้อมูลของคุณ
  • แก้ไขพร็อพเพอร์ตี้การกําหนดค่าในเซิร์ฟเวอร์การจัดการและโหนดโปรแกรมประมวลผลข้อความทั้งหมด
  • สร้างแอปสำหรับนักพัฒนาซอฟต์แวร์เพื่อทริกเกอร์การสร้างคีย์
  • รีสตาร์ทโหนด

งานเหล่านี้มีการอธิบายไว้ในเอกสารนี้

สิ่งที่คุณจำเป็นต้องทราบเกี่ยวกับฟีเจอร์การเข้ารหัสคีย์

ขั้นตอนในเอกสารนี้จะอธิบายวิธีเปิดใช้ฟีเจอร์ KEK ซึ่งช่วยให้ Apigee สามารถเข้ารหัสคีย์ลับที่ใช้เข้ารหัสข้อมูลลับของผู้ใช้ของแอปของนักพัฒนาแอปเมื่อจัดเก็บคีย์ดังกล่าวที่ไม่มีการเคลื่อนไหวในฐานข้อมูล Cassandra

โดยค่าเริ่มต้น ค่าที่มีอยู่ในฐานข้อมูลจะยังคงเหมือนเดิม (ในรูปแบบข้อความธรรมดา) และจะทํางานต่อไปได้เหมือนเดิม

หากคุณดำเนินการเขียนกับเอนทิตีที่ไม่ได้เข้ารหัส ระบบจะเข้ารหัสเอนทิตีนั้นเมื่อบันทึกการดำเนินการ เช่น หากคุณเพิกถอนโทเค็นที่ไม่ได้เข้ารหัสแล้วอนุมัติโทเค็นในภายหลัง โทเค็นที่ได้รับอนุมัติใหม่จะได้รับการเข้ารหัส

การเก็บรักษากุญแจให้ปลอดภัย

โปรดเก็บสําเนาของคีย์สโตร์ที่เก็บ KEK ไว้ในที่ปลอดภัย เราขอแนะนำให้ใช้กลไกที่ปลอดภัยของคุณเองเพื่อบันทึกสําเนาของคีย์สโตร์ ตามวิธีการในเอกสารนี้อธิบายไว้ คุณจะต้องวางคีย์สโตร์ไว้ในโหนดประมวลผลข้อความและโหนดเซิร์ฟเวอร์การจัดการแต่ละรายการที่ไฟล์การกำหนดค่าในเครื่องจะอ้างอิงได้ แต่ก็ควรจัดเก็บสำเนาคีย์สโตร์ไว้ที่อื่นเพื่อเก็บรักษาและใช้เป็นคีย์สำรองด้วย

การเปิดใช้การเข้ารหัสคีย์

ทำตามขั้นตอนต่อไปนี้เพื่อเข้ารหัสลับคีย์ผู้บริโภค

ข้อกำหนดเบื้องต้น

คุณต้องปฏิบัติตามข้อกำหนดเหล่านี้ก่อนทำตามขั้นตอนในเอกสารนี้

  • คุณต้องติดตั้งหรืออัปเกรดเป็น Apigee Edge สำหรับ Private Cloud 4.50.00.10 ขึ้นไป
  • คุณต้องเป็น Apigee Edge สำหรับผู้ดูแลระบบ Private Cloud

ขั้นตอนที่ 1: สร้างคีย์สโตร์

ทําตามขั้นตอนต่อไปนี้เพื่อสร้างคีย์สโตร์เพื่อเก็บคีย์การเข้ารหัสคีย์ (KEK)

  1. เรียกใช้คําสั่งต่อไปนี้เพื่อสร้างคีย์สโตร์เพื่อจัดเก็บคีย์ที่จะใช้เข้ารหัส KEK ป้อนคำสั่งให้ตรงตามที่ปรากฏ (คุณสามารถระบุชื่อคีย์สโตร์ที่ต้องการได้)
    keytool -genseckey -alias KEYSTORE_NAME -keyalg AES -keysize 256 \
    -keystore kekstore.p12 -storetype PKCS12

    ป้อนรหัสผ่านเมื่อได้รับข้อความแจ้ง คุณจะใช้รหัสผ่านนี้ในส่วนถัดไปเมื่อกำหนดค่าเซิร์ฟเวอร์การจัดการและโปรแกรมประมวลผลข้อความ

    คำสั่งนี้จะสร้างไฟล์คีย์สโตร์ kekstore.p12 ที่มีคีย์ที่มีชื่อแทน KEYSTORE_NAME

  2. (ไม่บังคับ) ยืนยันว่าไฟล์สร้างขึ้นอย่างถูกต้องด้วยคำสั่งต่อไปนี้ หากไฟล์ถูกต้อง คำสั่งจะแสดงคีย์ที่มีชื่อแทน KEYSTORE_NAME ดังนี้
    keytool -list -keystore kekstore.p12

การทำงานกับคีย์สโตร์ BCFKS สำหรับระบบปฏิบัติการที่เปิดใช้ FIPS

หากคุณใช้ Edge สำหรับ Private Cloud ในระบบปฏิบัติการที่เปิดใช้ FIPS คุณควรสร้างคีย์สโตร์ประเภท BCFKS โดยสามารถสร้างคีย์สโตร์ดังกล่าวในเครื่องที่ไม่ใช่ FIPS แล้วโอนไปยังเครื่องที่เป็นไปตาม FIPS หากต้องการสร้างคีย์สโตร์ ให้ใช้คำสั่งต่อไปนี้

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

คุณอาจต้องทำการกําหนดค่า Java เพิ่มเติมในเครื่องที่ใช้สร้างคีย์สโตร์นี้ คุณอาจต้องแก้ไขไฟล์ความปลอดภัย Java ของเครื่อง (โดยปกติจะอยู่ที่ /usr/lib/jvm/jre/lib/security/java.security) ในไฟล์นี้ ให้ค้นหาและแก้ไขพร็อพเพอร์ตี้ต่อไปนี้

# Don't rely on /dev/random for generating random numbers
securerandom.source=file:/dev/urandom
securerandom.strongAlgorithms=PKCS11:SunPKCS11-NSS-FIPS

ขั้นตอนที่ 2: กำหนดค่าเซิร์ฟเวอร์การจัดการ

ขั้นตอนถัดไป ให้กำหนดค่าเซิร์ฟเวอร์การจัดการ หากติดตั้งเซิร์ฟเวอร์การจัดการไว้ในหลายโหนด คุณต้องทำขั้นตอนเหล่านี้ซ้ำในแต่ละโหนด

  1. คัดลอกไฟล์คีย์สโตร์ที่สร้างขึ้นในขั้นตอนที่ 1 ไปยังไดเรกทอรีในโหนดเซิร์ฟเวอร์การจัดการ เช่น /opt/apigee/customer/application เช่น
    cp certs/kekstore.p12 /opt/apigee/customer/application
  2. ตรวจสอบว่าผู้ใช้ apigee อ่านไฟล์ได้
    chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
    chmod 400 /opt/apigee/customer/application/kekstore.p12
  3. เพิ่มพร็อพเพอร์ตี้ต่อไปนี้ลงใน /opt/apigee/customer/application/management-server.properties หากไม่มีไฟล์ ให้สร้างขึ้นมา โปรดดูข้อมูลอ้างอิงไฟล์พร็อพเพอร์ตี้ด้วย
    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

    โปรดทราบว่า KEK_PASSWORD อาจเหมือนกับ KEYSTORE_PASSWORD ทั้งนี้ขึ้นอยู่กับเครื่องมือที่ใช้สร้างคีย์สโตร์

  4. รีสตาร์ทเซิร์ฟเวอร์การจัดการโดยใช้คำสั่งต่อไปนี้
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server wait_for_ready

    คำสั่ง wait_for_ready จะแสดงข้อความต่อไปนี้เมื่อเซิร์ฟเวอร์การจัดการพร้อมใช้งาน

    Checking if management-server is up: management-server is up.
  5. หากคุณติดตั้งเซิร์ฟเวอร์การจัดการในโหนดหลายโหนด ให้ทำตามขั้นตอนที่ 1-4 ด้านบนซ้ำในโหนดเซิร์ฟเวอร์การจัดการแต่ละโหนด

ขั้นตอนที่ 3: สร้างแอปสำหรับนักพัฒนาแอป

เมื่ออัปเดตเซิร์ฟเวอร์การจัดการแล้ว คุณต้องสร้างแอปสำหรับนักพัฒนาแอปเพื่อเรียกใช้การสร้างคีย์ที่ใช้เข้ารหัสข้อมูลเข้าสู่ระบบไคลเอ็นต์ โดยทำดังนี้

  1. สร้างแอปนักพัฒนาซอฟต์แวร์เพื่อทริกเกอร์การสร้างคีย์การเข้ารหัสข้อมูล (KEK) ดูขั้นตอนได้ที่การลงทะเบียนแอป
  2. ลบแอปของนักพัฒนาแอปหากต้องการ คุณไม่จำเป็นต้องเก็บคีย์เอาไว้เมื่อสร้างคีย์การเข้ารหัสแล้ว

ขั้นตอนที่ 4: กำหนดค่าโปรแกรมประมวลผลข้อความ

จนกว่าจะมีการเปิดใช้การเข้ารหัสในโปรแกรมประมวลผลข้อความ คำขอรันไทม์จะประมวลผลข้อมูลเข้าสู่ระบบที่เข้ารหัสไม่ได้

  1. คัดลอกไฟล์คีย์สโตร์ที่สร้างขึ้นในขั้นตอนที่ 1 ไปยังไดเรกทอรีบนโหนดโปรแกรมประมวลผลข้อความ เช่น /opt/apigee/customer/application เช่น
    cp certs/kekstore.p12 /opt/apigee/customer/application
  2. ตรวจสอบว่าผู้ใช้ apigee อ่านไฟล์ได้ ดังนี้
    chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
  3. เพิ่มพร็อพเพอร์ตี้ต่อไปนี้ลงใน /opt/apigee/customer/application/message-processor.properties หากไม่มีไฟล์ ให้สร้างขึ้นมา โปรดดูข้อมูลอ้างอิงไฟล์พร็อพเพอร์ตี้ด้วย
    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

    โปรดทราบว่า KEK_PASSWORD อาจเหมือนกับ KEYSTORE_PASSWORD ก็ได้ ขึ้นอยู่กับเครื่องมือที่ใช้สร้างคีย์สโตร์

  4. รีสตาร์ทโปรแกรมประมวลผลข้อความโดยใช้คําสั่งต่อไปนี้
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor wait_for_ready

    คำสั่ง wait_for_ready จะแสดงข้อความต่อไปนี้เมื่อโปรแกรมประมวลผลข้อความพร้อมประมวลผลข้อความ

    Checking if message-processor is up: message-processor is up.
  5. หากคุณติดตั้งโปรแกรมประมวลผลข้อความในโหนดหลายโหนด ให้ทำตามขั้นตอนที่ 1-4 ซ้ำในแต่ละโหนดโปรแกรมประมวลผลข้อความ

สรุป

แอปของนักพัฒนาแอปที่คุณสร้างขึ้นต่อจากนี้ไปจะได้รับการเข้ารหัสข้อมูลลับสำหรับเข้าสู่ระบบที่ไม่มีการเคลื่อนไหวในฐานข้อมูล Cassandra

การใช้ตัวแปรสภาพแวดล้อมสำหรับพร็อพเพอร์ตี้การกำหนดค่า

หรือจะตั้งค่าพร็อพเพอร์ตี้การประมวลผลข้อความและการกำหนดค่าเซิร์ฟเวอร์การจัดการต่อไปนี้โดยใช้ตัวแปรสภาพแวดล้อมก็ได้ หากตั้งค่าไว้ ตัวแปรสภาพแวดล้อมจะลบล้างพร็อพเพอร์ตี้ที่ตั้งค่าไว้ในโปรแกรมประมวลผลข้อความหรือไฟล์การกำหนดค่าเซิร์ฟเวอร์การจัดการ

conf_keymanagement_kmscred.encryption.keystore.pass=
conf_keymanagement_kmscred.encryption.kek.pass=

ตัวแปรสภาพแวดล้อมที่เกี่ยวข้องมีดังนี้

export KMSCRED_ENCRYPTION_KEYSTORE_PASS=KEYSTORE_PASSWORD
export KMSCRED_ENCRYPTION_KEK_PASS=KEK_PASSWORD

หากตั้งค่าตัวแปรสภาพแวดล้อมเหล่านี้ คุณจะละเว้นพร็อพเพอร์ตี้การกําหนดค่าเหล่านี้จากไฟล์การกําหนดค่าในโหนดโปรแกรมประมวลผลข้อความและเซิร์ฟเวอร์การจัดการได้ เนื่องจากระบบจะไม่สนใจพร็อพเพอร์ตี้เหล่านี้

conf_keymanagement_kmscred.encryption.keystore.pass
conf_keymanagement_kmscred.encryption.kek.pass

การอ้างอิงไฟล์พร็อพเพอร์ตี้

ส่วนนี้จะอธิบายพร็อพเพอร์ตี้การกําหนดค่าที่คุณต้องตั้งค่าในโหนดเซิร์ฟเวอร์การจัดการและโหนดโปรแกรมประมวลผลข้อความทั้งหมด ตามที่อธิบายไว้ก่อนหน้านี้ในเอกสารนี้

พร็อพเพอร์ตี้ ค่าเริ่มต้น คำอธิบาย
conf_keymanagement_kmscred.encryption.enabled false ต้องมีค่าเป็น true เพื่อเปิดใช้การเข้ารหัสคีย์
conf_keymanagement_kmscred.encryption.allowFallback false ตั้งค่า allowFallback เป็น true เพื่อให้ข้อมูลเข้าสู่ระบบแบบข้อความธรรมดาที่มีอยู่ใช้งานได้ต่อไป
conf_keymanagement_kmscred.encryption.keystore.path ไม่มี ระบุเส้นทางไปยังคีย์สโตร์ KEK ในโหนดโปรแกรมประมวลผลข้อความหรือเซิร์ฟเวอร์การจัดการ ดูขั้นตอนที่ 2: กำหนดค่าเซิร์ฟเวอร์การจัดการและขั้นตอนที่ 3: กำหนดค่าโปรแกรมประมวลผลข้อความ
conf_keymanagement_kmscred.encryption.kek.alias ไม่มี ชื่อแทนที่ใช้จัดเก็บ KEK ในคีย์สโตร์
conf_keymanagement_kmscred.encryption.keystore.pass ไม่มี ไม่บังคับหากคุณใช้ตัวแปรสภาพแวดล้อมในการตั้งค่าพร็อพเพอร์ตี้เหล่านี้ โปรดดูหัวข้อการใช้ตัวแปรสภาพแวดล้อมสําหรับพร็อพเพอร์ตี้การกําหนดค่าด้วย
conf_keymanagement_kmscred.encryption.kek.pass ไม่มี ไม่บังคับหากคุณใช้ตัวแปรสภาพแวดล้อมเพื่อตั้งค่าพร็อพเพอร์ตี้เหล่านี้ โปรดดูหัวข้อการใช้ตัวแปรสภาพแวดล้อมสําหรับพร็อพเพอร์ตี้การกําหนดค่าด้วย