การอ้างอิงสิทธิ์ Java

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X
info

สิ่งที่จำเป็นต้องทราบเกี่ยวกับนโยบายสิทธิ์ของ Java

หากคุณกำลังพัฒนานโยบาย Java Callout คุณต้องทราบว่านโยบายสิทธิ์ใดที่ มีผลใน JVM ของ Edge และนโยบายเหล่านั้นจะส่งผลต่อโค้ดของคุณอย่างไร เช่น โค้ด Java ที่กำหนดเอง ไม่มีสิทธิ์เข้าถึงระบบไฟล์แบบไม่จำกัด อย่างไรก็ตาม ในกรณีของการเข้าถึงระบบไฟล์ คุณจะอ่านไฟล์บางอย่างได้ เช่น ไฟล์ทรัพยากรนโยบาย แต่การเข้าถึงระบบไฟล์อื่นๆ ส่วนใหญ่จะถูกบล็อก หัวข้อนี้แสดงประเภทสิทธิ์ JDK ทั้งหมดและเป้าหมายหรือการดำเนินการที่เกี่ยวข้อง สําหรับเป้าหมายหรือการกระทําแต่ละอย่าง เราจะระบุนโยบายสิทธิ์และข้อยกเว้นที่คุณต้องทราบ

ดูข้อมูลเพิ่มเติมเกี่ยวกับประเภทสิทธิ์ของ JDK และสิ่งที่แต่ละสิทธิ์อนุญาตได้ที่สิทธิ์ใน Java Development Kit (JDK)

การเปิดใช้ข้อจำกัดด้านความปลอดภัย

ใน Edge สำหรับ Private Cloud ระบบจะปิดใช้ข้อจำกัดด้านความปลอดภัยโดยค่าเริ่มต้น ซึ่งหมายความว่า โค้ด Callout Java ที่กำหนดเองจะเข้าถึงทรัพยากรทั้งหมดได้โดยไม่มีข้อจำกัด หากต้องการเปิดใช้ข้อจำกัดด้านความปลอดภัยใน Edge สำหรับการติดตั้ง Private Cloud ให้ทำตามขั้นตอนด้านล่าง

  1. ในโหนด Message Processor แรก ให้เปิดไฟล์ $APIGEE_ROOT/customer/application/message-processor.properties ในโปรแกรมแก้ไข หากไม่มีไฟล์ดังกล่าว ให้สร้างไฟล์
  2. เพิ่มบรรทัดต่อไปนี้ลงในไฟล์
    conf_security-policy_enable.security.manager=true
  3. Save the file and ensure the file is owned by the apigee user:
    chown apigee:apigee $APIGEE_ROOT/customer/application/message-processor.properties
  4. รีสตาร์ทตัวประมวลผลข้อความ
    apigee-service message-processor restart
  5. ทำขั้นตอนเหล่านี้ซ้ำใน Message Processor ที่เหลือทั้งหมด
ประเภทสิทธิ์ ชื่อเป้าหมายหรือชื่อการกระทํา ได้รับสิทธิ์แล้ว
java.awt.AWTPermission
accessClipboard ไม่
accessEventQueue ไม่
accessSystemTray ไม่
createRobot ไม่
fullScreenExclusive ไม่
listenToAllAWTEvents ไม่
readDisplayPixels ไม่
replaceKeyboardFocusManager ไม่
setAppletStub ไม่
setWindowsAlwaysOnTop ไม่
showWindowWithoutWarningBanner ไม่
toolkitModality ไม่
watchMousePointer ไม่
java.io.FilePermission

java.io.FilePermission แสดงถึงสิทธิ์เข้าถึงไฟล์หรือไดเรกทอรี FilePermission ประกอบด้วยเส้นทางและชุดการดำเนินการที่ใช้ได้กับเส้นทางนั้น
อ่าน ได้ แต่มีข้อจำกัด ดูข้อจำกัด
เขียนหน่อย ไม่
ดำเนินการ ไม่
ลบ ไม่
readLink ใช่
java.io.SerializablePermission

SerializablePermission มีชื่อ (หรือที่เรียกว่า "ชื่อเป้าหมาย") แต่ไม่มี รายการการดำเนินการ คุณมีสิทธิ์ที่ระบุชื่อหรือไม่มี
enableSubclassImplementation ใช่
enableSubstitution ไม่
java.lang.management.ManagementPermission

เมธอดที่กำหนดไว้ในอินเทอร์เฟซการจัดการสำหรับแพลตฟอร์ม Java
การควบคุม ไม่
ตรวจสอบ ไม่
java.lang.reflect.ReflectPermission

สำหรับการดำเนินการแบบรีเฟลกชัน ReflectPermission เป็นสิทธิ์ที่มีชื่อและไม่มี การดำเนินการ
suppressAccessChecks ไม่
newProxyInPackage.{package name} ไม่
java.lang.RuntimePermission

มีชื่อ (หรือที่เรียกว่า "ชื่อเป้าหมาย") แต่ไม่มีรายการการดำเนินการ คุณมีสิทธิ์ที่ระบุชื่อหรือไม่มี
createClassLoader ไม่
getClassLoader ใช่
setContextClassLoader ใช่
enableContextClassLoaderOverride ใช่
closeClassLoader ไม่
setSecurityManager ไม่
createSecurityManager ไม่
getenv.{variable name} ไม่
exitVM.{exit status} ไม่
shutdownHooks ไม่
setFactory ไม่
setIO ไม่
modifyThread ใช่
stopThread ใช่
modifyThreadGroup ใช่
getProtectionDomain ใช่
getFileSystemAttributes ไม่
readFileDescriptor ใช่
writeFileDescriptor ไม่
loadLibrary.{library name} ไม่
accessClassInPackage {package name} ใช่
defineClassInPackage {package name} ไม่
accessDeclaredMembers ไม่
queuePrintJob ไม่
getStackTrace ไม่
setDefaultUncaughtExceptionHandler ไม่
ค่ากำหนด ไม่
usePolicy ไม่
java.net.NetPermission

NetPermission มีชื่อแต่ไม่มีรายการการดำเนินการ คุณมีสิทธิ์ที่ระบุชื่อ หรือไม่มี
setDefaultAuthenticator ไม่
requestPasswordAuthentication ไม่
specifyStreamHandler ใช่
setProxySelector ไม่
getProxySelector ไม่
setCookieHandler ไม่
getCookieHandler ไม่
setResponseCache ไม่
getResponseCache ไม่
getNetworkInformation ไม่
java.net.SocketPermission

แสดงถึงการเข้าถึงเครือข่ายผ่านซ็อกเก็ต SocketPermission ประกอบด้วยข้อกำหนดของโฮสต์ และชุด "การดำเนินการ" ที่ระบุวิธีเชื่อมต่อกับโฮสต์นั้น
host = (hostname | IPaddress)[:portrange]
portrange = portnumber | -portnumber | portnumber-[portnumber]

วิธีที่เป็นไปได้ในการเชื่อมต่อกับโฮสต์มีดังนี้

accept
connect
listen
resolve

การดำเนินการ "listen" จะมีความหมายเมื่อใช้กับ "localhost" เท่านั้น การดำเนินการ "resolve" (resolve host/ip name service lookups) จะมีผลเมื่อมีการดำเนินการอื่นๆ
จับคู่ข้อมูล ใช่
เชื่อมต่อ

ได้ แต่มีข้อจำกัด ดูข้อจำกัด

Apigee จำกัดการเข้าถึงที่อยู่ sitelocal, anylocal, loopback และ linklocal

ฟัง
ยอมรับ
ไม่
java.net.URLPermission

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

คลาส Permission สำหรับการดำเนินการสร้างลิงก์
ยาก ไม่
เชิงสัญลักษณ์ ไม่
java.security.SecurityPermission

SecurityPermission มีชื่อ (หรือที่เรียกว่า "ชื่อเป้าหมาย") แต่ไม่มีรายการการดำเนินการ คุณมีสิทธิ์ที่ระบุชื่อหรือไม่ก็ได้
ชื่อเป้าหมายคือชื่อของพารามิเตอร์การกำหนดค่าความปลอดภัย (ดูด้านล่าง) ปัจจุบัน ออบเจ็กต์ SecurityPermission ใช้เพื่อป้องกันการเข้าถึงออบเจ็กต์ Policy, Security, Provider, Signer และ Identity
createAccessControlContext ไม่
getDomainCombiner ไม่
getPolicy ไม่
setPolicy ไม่
createPolicy.{policy type} ไม่
getProperty.{key} ไม่
setProperty.{key} ไม่
insertProvider ไม่
removeProvider.{provider name} ไม่
clearProviderProperties.{ชื่อผู้ให้บริการ} ไม่
putProviderProperty.{provider name} ไม่
removeProviderProperty.{provider name} ไม่
SQLPermission setLog ไม่
callAbort ไม่
setSyncFactory ไม่
setNetworkTimeout ไม่
deregisterDriver ไม่
java.util.logging.LoggingPermission

SecurityManager จะตรวจสอบออบเจ็กต์ java.util.logging.LoggingPermission เมื่อโค้ด ที่ทำงานกับ SecurityManager เรียกใช้เมธอดควบคุมการบันทึกอย่างใดอย่างหนึ่ง (เช่น Logger.setLevel)
การควบคุม ไม่
java.util.PropertyPermission
ชื่อคือชื่อของพร็อพเพอร์ตี้ ("java.home", "os.name" ฯลฯ) รูปแบบการตั้งชื่อ เป็นไปตามรูปแบบการตั้งชื่อพร็อพเพอร์ตี้แบบลำดับชั้น นอกจากนี้ เครื่องหมายดอกจันอาจปรากฏที่ ท้ายชื่อ ตามด้วย "." หรือปรากฏด้วยตัวเองเพื่อแสดงถึงการจับคู่แบบไวลด์การ์ด เช่น "java.*" หรือ "*" ใช้ได้ แต่ "*java" หรือ "a*b" ใช้ไม่ได้

ระบบจะส่งการดำเนินการที่จะให้สิทธิ์ไปยังตัวสร้างในสตริงที่มีรายการคีย์เวิร์ดที่คั่นด้วยคอมมา 0 รายการขึ้นไป
อ่าน ใช่
เขียนหน่อย ไม่
javax.xml.ws.WebServicePermission
publishEndpoint ไม่
javax.xml.bind.JAXBPermission setDatatypeConverter ไม่
javax.sound.sampled.AudioPermission

สิทธิ์เข้าถึงทรัพยากรของระบบเสียง
play ไม่
บันทึก ไม่
javax.security.auth.PrivateCredentialPermission

ปกป้องการเข้าถึงข้อมูลเข้าสู่ระบบส่วนตัวที่เป็นของ Subject ที่เฉพาะเจาะจง Subject is represented by a Set of Principals. ชื่อเป้าหมายของสิทธิ์นี้ระบุ ชื่อคลาสของข้อมูลเข้าสู่ระบบ และชุดของหลักการ ค่าที่ใช้ได้ค่าเดียวสำหรับ การดำเนินการของสิทธิ์นี้คือ "read"
CredentialClass {PrincipalClass "PrincipalName"}* ไม่
javax.security.auth.kerberos.ServicePermission

ปกป้องบริการ Kerberos และข้อมูลเข้าสู่ระบบที่จำเป็นต่อการเข้าถึงบริการเหล่านั้น
เริ่ม ไม่
ยอมรับ ไม่
javax.security.auth.kerberos.DelegationPermission

ใช้เพื่อจำกัดการใช้งานโมเดลการมอบสิทธิ์ Kerberos เช่น ตั๋วที่ส่งต่อได้และตั๋วที่ใช้พร็อกซีได้

ชื่อเป้าหมายของสิทธิ์นี้ระบุคู่ของชื่อผู้ใช้หลักของบริการ Kerberos อย่างแรกคือหลักของบริการย่อยที่ได้รับความไว้วางใจให้ใช้ตั๋วการให้สิทธิ์ตั๋ว (TGT) ชื่อผู้ใช้หลักของบริการที่ 2 จะกำหนดบริการเป้าหมายที่ชื่อผู้ใช้หลักของบริการย่อย จะโต้ตอบด้วยในนามของ KerberosPrincipal ที่เริ่มต้น
เริ่ม ไม่
ยอมรับ ไม่
javax.security.auth.AuthPermission

ปัจจุบันออบเจ็กต์ AuthPermission ใช้เพื่อป้องกันการเข้าถึงออบเจ็กต์ Subject, SubjectDomainCombiner, LoginContext และ Configuration
doAs ไม่
doAsPrivileged ไม่
getSubject ไม่
getSubjectFromDomainCombiner ไม่
setReadOnly ไม่
modifyPrincipals ไม่
modifyPublicCredentials ไม่
modifyPrivateCredentials ไม่
refreshCredential ไม่
destroyCredential ไม่
createLoginContext.{name} ไม่
getLoginConfiguration ไม่
setLoginConfiguration ไม่
createLoginConfiguration.{configuration type} ไม่
refreshLoginConfiguration ไม่
javax.net.ssl.SSLPermission
setHostnameVerifier ไม่
getSSLSessionContext ไม่
setDefaultSSLContext ไม่
javax.management.MBeanPermission

สิทธิ์ที่ควบคุมการเข้าถึงการดำเนินการ MBeanServer หากมีการตั้งค่า Security Manager โดยใช้ System.setSecurityManager(java.lang.SecurityManager) การดำเนินการส่วนใหญ่ใน MBeanServer จะกำหนดให้สิทธิ์ของผู้เรียกใช้ต้องมี MBeanPermission ที่เหมาะสมกับการดำเนินการ

action className#member[objectName]

หากคุณมี MBeanPermission จะอนุญาตให้ดำเนินการได้ก็ต่อเมื่อรายการทั้ง 4 รายการ ตรงกัน
addNotificationListener ไม่
getAttribute ไม่
getClassLoader ไม่
getClassLoaderFor ไม่
getClassLoaderRepository ไม่
getDomains ไม่
getMBeanInfo ไม่
getObjectInstance ไม่
สร้างอินสแตนซ์ ไม่
เรียกใช้ ไม่
isInstanceOf ไม่
queryMBeans ไม่
queryNames ไม่
registerMBean ไม่
removeNotificationListener ไม่
setAttribute ไม่
unregisterMBean ไม่
javax.management.MBeanServerPermission
createMBeanServer ไม่
findMBeanServer ไม่
newMBeanServer ไม่
releaseMBeanServer ไม่
javax.management.MBeanTrustPermission

สิทธิ์นี้แสดงถึง "ความน่าเชื่อถือ" ในผู้ลงนามหรือโค้ดเบส
ลงทะเบียน ไม่
* ไม่
javax.management.remote.SubjectDelegationPermission
ไม่