您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件。 資訊
Java 權限政策的須知事項
如要開發 Java 呼叫政策,您必須瞭解 Edge JVM 中有哪些權限政策,以及這些政策對程式碼的影響。例如,您的自訂 Java 程式碼沒有無限存取檔案系統。不過,在檔案系統存取權的情況下,您可以讀取特定檔案,例如政策資源檔案。但大部分的其他檔案系統存取權都會遭到封鎖。本主題列出所有 JDK 權限類型及其各自的目標或動作。我們會針對每個目標或動作,指定需要瞭解的權限政策和任何例外狀況。
如要進一步瞭解 JDK 權限類型,以及每項權限允許的內容,請參閱 Java Development Kit (JDK) 中的權限。
啟用安全性限制
在 Edge for Private Cloud 中,安全性限制預設為停用。也就是說,您的自訂 Java 呼叫程式碼可以存取所有資源,不受限制。如要啟用 Edge 中 Private Cloud 安裝作業的安全性限制,請按照下列程序操作:
- 在第一個訊息處理器節點中,在編輯器中開啟
$APIGEE_ROOT/customer/application/message-processor.properties
檔案。如果檔案不存在,請建立檔案。 - 在檔案中新增下列程式碼:
conf_security-policy_enable.security.manager=true
- Save the file and ensure the file is owned by the
apigee
user:chown apigee:apigee $APIGEE_ROOT/customer/application/message-processor.properties
- 重新啟動訊息處理器:
apigee-service message-processor restart
- 對其餘所有訊息處理器重複執行這些步驟。
權限類型 | 目標或動作名稱 | 已授予權限 |
java.awt.AWTPermission | ||
accessClipboard | 否 | |
accessEventQueue | 否 | |
accessSystemTray | 否 | |
createRobot | 否 | |
fullScreenExclusive | 否 | |
listenToAllAWTEvents | 否 | |
readDisplayPixels | 否 | |
replaceKeyboardFocusManager | 否 | |
setAppletStub | 否 | |
setWindowsAlwaysOnTop | 否 | |
showWindowWithoutWarningBanner | 否 | |
toolkitModality | 否 | |
watchMousePointer | 否 | |
java.io.FilePermission java.io.FilePermission 代表檔案或目錄的存取權。FilePermission 是由路徑名稱和一組對該路徑名稱有效的動作組成。 |
閱讀 | 是,但須遵守相關限制。請參閱「限制」一節。 |
write | 否 | |
execute | 否 | |
delete | 否 | |
readLink | 是 | |
java.io.SerializablePermission SerializablePermission 包含名稱 (也稱為「目標名稱」),但沒有動作清單;您沒有動作清單。 |
enableSubclassImplementation | 是 |
enableSubstitution | 否 | |
java.lang.management.ManagementPermission Java 平台管理介面中定義的方法 |
控管 | 否 |
monitor | 否 | |
java.lang.reflect.ReflectPermission 適用於反射作業。ReflectPermission 是已命名的權限,沒有任何動作 |
suppressAccessChecks | 否 |
newProxyInPackage.{package name} | 否 | |
java.lang.RuntimePermission 包含名稱 (也稱為「目標名稱」),但沒有動作清單;您沒有動作清單; |
createClassLoader | 否 |
getClassLoader | 是 | |
setContextClassLoader | 是 | |
enableContextClassLoaderOverride | 是 | |
closeClassLoader | 否 | |
setSecurityManager | 否 | |
createSecurityManager | 否 | |
getenv.{變數名稱} | 否 | |
exitVM.{exit status} | 否 | |
shutdownHooks | 否 | |
setFactory | 否 | |
setIO | 否 | |
modifyThread | 是 | |
stopThread | 是 | |
modifyThreadGroup | 是 | |
getProtectionDomain | 是 | |
getFileSystemAttributes | 否 | |
readFileDescriptor | 是 | |
writeFileDescriptor | 否 | |
loadLibrary.{library name} | 否 | |
accessClassInPackage。{套件名稱} | 是 | |
definitionClassInPackage。{套件名稱} | 否 | |
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 reach 「listen」動作只有在與「localhost」搭配使用時才有意義。出現任何其他動作時,隱含「解析」(解析主機/IP 名稱服務查詢) 動作。 |
resolve | 是 |
連結 |
是,但須遵守相關限制。請參閱「限制」一節。 Apigee 會限制對 sitelocal、任何本機、回送和連結本機位址的存取權。 |
|
監聽, 接受 |
否 | |
java.net.URLPermission 代表擁有權限,可存取由指定網址定義的資源或一組資源,以及一組可供使用者設定的要求方法和要求標頭。權限名稱為網址字串。動作字串是要求方法和標頭的串連。方法與標頭名稱的範圍不受此類別限制。 |
是 | |
LinkPermission 連結建立作業的權限類別。 |
困難 | 否 |
符號化 | 否 | |
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 執行的程式碼呼叫其中一種記錄控制方法 (例如 Logger.setLevel) 時,SecurityManager 會檢查 java.util.logging.LoggingPermission 物件。 |
控管 | 否 |
java.util.PropertyPermission 名稱是屬性的名稱 (「java.home」、「os.name」等)。命名慣例遵循階層屬性命名慣例。另外,姓名結尾可能會顯示星號,或在「.」後方加上星號,表示符合萬用字元比對的資格。例如:「java.*」或「*」有效,「*java」或「a*b」是無效的。 要授予的動作會透過字串的形式傳送至建構函式,該字串內含零或多個以半形逗號分隔關鍵字的清單。 |
閱讀 | 是 |
write | 否 | |
javax.xml.ws.WebServicePermission
|
publishEndpoint | 否 |
javax.xml.bind.JAXBPermission | setDatatypeConverter | 否 |
javax.sound.sampled.AudioPermission 存取音訊系統資源的權限。 |
play | 否 |
錄音 | 否 | |
javax.security.auth.PrivateCredentialPermission 保護屬於特定主體的私人憑證存取權。主題由一組主體代表。這個權限的目標名稱會指定憑證類別名稱和一組主體。這個權限動作的唯一有效值是「讀取」。 |
Credential {PrincipalClass "PrincipalName"}* | 否 |
javax.security.auth.kerberos.ServicePermission 保護 Kerberos 服務和存取這些服務所需的憑證。 |
initiate | 否 |
接受 | 否 | |
javax.security.auth.kerberos.DelegationPermission 用於限制 Kerberos 委派模型的使用,例如可轉送和 Proxy 的票證。 這個權限的目標名稱會指定一組 kerberos 服務主體。第一個是指派使用票證授權票證 (TGT) 的從屬服務主體。第二項服務主體會指定目標服務,而該主體的服務主體是代表啟動的 Kerberos 主體互動。 |
initiate | 否 |
接受 | 否 | |
javax.security.auth.AuthPermission AuthPermission 物件目前用於保護 Subject、SubjectDomainMerger、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。 動作 className#member[objectName] 如果您使用的是 MBeanPermission,只有在所有 4 個項目都符合時,系統才會允許作業。 |
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 這項權限代表簽署者或程式碼集中的「信任」。 |
register | 否 |
* | 否 | |
javax.management.remote.SubjectDelegationPermission
|
否 |