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

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

สิ่งที่คุณต้องทราบเกี่ยวกับนโยบายสิทธิ์สำหรับ Java

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

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

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

ใน Edge สำหรับ Private Cloud ข้อจำกัดด้านความปลอดภัยจะถูกปิดใช้โดยค่าเริ่มต้น ซึ่งหมายความว่าโค้ดข้อความไฮไลต์ 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. ทำซ้ำขั้นตอนเหล่านี้ในโปรแกรมประมวลผลข้อความที่เหลือทั้งหมด
ประเภทสิทธิ์ ชื่อเป้าหมายหรือชื่อการกระทำ ให้สิทธิ์แล้ว
java.awt.AWTPermission
accessClipboard ไม่ได้
accessEventQueue ไม่ได้
accessSystemTray ไม่ได้
createRobot ไม่ได้
fullScreenExclusive ไม่ได้
listenToAllAWTEvents ไม่ได้
readDisplayPixels ไม่ได้
replaceKeyboardFocusManager ไม่ได้
setAppletStub ไม่ได้
setWindowsAlwaysOnTop ไม่ได้
showWindowWithoutWarningBanner ไม่ได้
toolkitModality ไม่ได้
watchMousePointer ไม่ได้
java.io.FilePermission

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

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

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

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

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

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

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

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

ยอมรับ
เชื่อมต่อ
ฟัง
แก้ไข

การดำเนินการ "listen" มีความหมายเมื่อใช้กับ "localhost" เท่านั้น การดำเนินการ "resolve" (แก้ไขปัญหาการค้นหาบริการชื่อโฮสต์/IP) จะกล่าวเป็นนัยเมื่อมีการดำเนินการอื่นๆ ปรากฏขึ้น
resolve ได้
connect

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

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

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

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

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

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

SecurityManager จะตรวจสอบออบเจ็กต์ java.util.logging.Lในเร็วๆ นี้เมื่อโค้ดที่ทำงานกับ 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

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

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

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

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

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

สิทธิ์ควบคุมการเข้าถึงการดำเนินการ MBeanServer หากตั้งค่าเครื่องมือจัดการความปลอดภัยโดยใช้ 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

สิทธิ์นี้แสดงถึง "ความน่าเชื่อถือ" ในตัวลงนามหรือฐานของโค้ด
register ไม่ได้
* ไม่ได้
javax.management.remote.SubjectDelegationPermission
ไม่ได้