Java 權限參考資料

您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件
資訊

Java 權限政策的須知事項

如要開發 Java 呼叫政策,您必須瞭解 Edge JVM 中有哪些權限政策,以及這些政策對程式碼的影響。例如,您的自訂 Java 程式碼沒有無限存取檔案系統。不過,在檔案系統存取權的情況下,您可以讀取特定檔案,例如政策資源檔案。但大部分的其他檔案系統存取權都會遭到封鎖。本主題列出所有 JDK 權限類型及其各自的目標或動作。我們會針對每個目標或動作,指定需要瞭解的權限政策和任何例外狀況。

如要進一步瞭解 JDK 權限類型,以及每項權限允許的內容,請參閱 Java Development Kit (JDK) 中的權限

啟用安全性限制

在 Edge for Private Cloud 中,安全性限制預設為停用。也就是說,您的自訂 Java 呼叫程式碼可以存取所有資源,不受限制。如要啟用 Edge 中 Private Cloud 安裝作業的安全性限制,請按照下列程序操作:

  1. 在第一個訊息處理器節點中,在編輯器中開啟 $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 是由路徑名稱和一組對該路徑名稱有效的動作組成。
閱讀 是,但須遵守相關限制。請參閱「限制」一節。
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