מסמך עזר בנושא הרשאות ב-Java

הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.

לעיון במסמכי התיעוד של Apigee Edge

מה צריך לדעת על כללי מדיניות בנושא הרשאות Java

אם אתם מפתחים מדיניות JavaCallout, אתם צריכים לדעת אילו כללי מדיניות הרשאה בתוקף ב-JVM של Apigee ואיך הם ישפיעו על הקוד שלכם. לדוגמה, לקוד Java המותאם אישית שלכם אין גישה בלתי מוגבלת למערכת הקבצים. עם זאת, במקרה של גישה למערכת קבצים, אפשר לקרוא קבצים מסוימים, כמו קובצי משאבים של מדיניות. אבל רוב הגישה למערכת הקבצים חסומה. בנושא הזה מפורטים כל סוגי ההרשאות ב-JDK והיעדים או הפעולות הרלוונטיים שלהם. לכל יעד או פעולה, אנחנו מציינים את מדיניות ההרשאות ואת כל החריגים שחשוב לדעת עליהם.

מידע נוסף על סוגי ההרשאות ב-JDK ועל מה שכל הרשאה מאפשרת זמין במאמר הרשאות ב-Java Development Kit‏ (JDK).

סוג הרשאה שם היעד או הפעולה ההרשאה ניתנה
java.awt.AWTPermission
accessClipboard לא
accessEventQueue לא
accessSystemTray לא
createRobot לא
fullScreenExclusive לא
listenToAllAWTEvents לא
readDisplayPixels לא
replaceKeyboardFocusManager לא
setAppletStub לא
setWindowsAlwaysOnTop לא
showWindowWithoutWarningBanner לא
toolkitModality לא
watchMousePointer לא
‪java.io.FilePermission

‫java.io.FilePermission מייצג גישה לקובץ או לספרייה. FilePermission מורכב משם נתיב ומקבוצה של פעולות שתקפות עבור שם הנתיב הזה.
קריאה כן, אבל יש הגבלות. מידע נוסף על הגבלות
לכתוב לא
להריץ לא
delete לא
readLink כן
‪java.io.SerializablePermission

אובייקט SerializablePermission מכיל שם (שנקרא גם "שם יעד") אבל לא רשימת פעולות. יש לכם את ההרשאה שצוינה או שאין לכם אותה.
enableSubclassImplementation כן
enableSubstitution לא
‪java.lang.management.ManagementPermission

Methods defined in the management interface for the Java platform
בקרה לא
מעקב לא
‪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' (חיפושים של שירותי שמות מארחים/כתובות IP) מרומזת כשמופיעה אחת מהפעולות האחרות.
התאמת נתונים (resolve) כן
לחבר

כן, אבל יש הגבלות. מידע נוסף על הגבלות

‫Apigee מגביל את הגישה לכתובות מסוג sitelocal,‏ anylocal,‏ loopback ו-linklocal, וגם לטווחים פרטיים של IPv4 שמוגדרים ב-RFC1918.

להאזין,
לאשר
לא
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.{provider name} לא
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" הם לא ערכים תקינים.

הפעולות שרוצים להעניק מועברות לקונסטרוקטור במחרוזת שמכילה רשימה של אפס מילות מפתח או יותר, שמופרדות בפסיקים.
קריאה כן
לכתוב לא
javax.xml.ws.WebServicePermission
publishEndpoint לא
javax.xml.bind.JAXBPermission setDatatypeConverter לא
javax.sound.sampled.AudioPermission

זכויות גישה למשאבי מערכת האודיו.
play לא
להקליט לא
javax.security.auth.PrivateCredentialPermission

הגנה על הגישה לפרטי כניסה פרטיים ששייכים לנושא מסוים. הנושא מיוצג על ידי קבוצה של חשבונות משתמשים. שם היעד של ההרשאה הזו מציין שם של מחלקה של פרטי כניסה וקבוצה של ישויות. הערך החוקי היחיד לפעולות של ההרשאה הזו הוא read.
CredentialClass {PrincipalClass "PrincipalName"}* לא
javax.security.auth.kerberos.ServicePermission

הגנה על שירותי Kerberos ועל פרטי הכניסה שנדרשים לגישה לשירותים האלה.
הפעלה לא
אישור לא
‫javax.security.auth.kerberos.DelegationPermission

משמש להגבלת השימוש במודל ההענקות של Kerberos, כלומר, טיקטים שניתנים להעברה וטיקטים שניתנים לשימוש באמצעות פרוקסי.

שם היעד של ההרשאה הזו מציין צמד של שמות ראשיים של שירות Kerberos. הראשון הוא נציג השירות המשני שמופקד עליו השימוש בכרטיס למתן כרטיס (TGT). השם הראשי השני של השירות מציין את שירות היעד שאיתו השם הראשי המשני של השירות אמור ליצור אינטראקציה בשם 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. אם מנהל אבטחה הוגדר באמצעות System.setSecurityManager(java.lang.SecurityManager), רוב הפעולות ב-MBeanServer דורשות שההרשאות של המתקשר יכללו MBeanPermission שמתאים לפעולה.

action className#member[objectName]

אם יש לכם MBeanPermission, הוא מאפשר פעולות רק אם כל ארבעת הפריטים תואמים.
addNotificationListener לא
getAttribute לא
getClassLoader לא
getClassLoaderFor לא
getClassLoaderRepository לא
getDomains לא
getMBeanInfo לא
getObjectInstance לא
יצירת אובייקט (instantiate) לא
להפעיל לא
isInstanceOf לא
queryMBeans לא
queryNames לא
registerMBean לא
removeNotificationListener לא
setAttribute לא
unregisterMBean לא
javax.management.MBeanServerPermission
createMBeanServer לא
findMBeanServer לא
newMBeanServer לא
releaseMBeanServer לא
javax.management.MBeanTrustPermission

ההרשאה הזו מייצגת 'אמון' בחותם או בבסיס קוד.
להירשם לא
* לא
javax.management.remote.SubjectDelegationPermission
לא