Справочник по разрешениям Java

Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X.
Информация

Правила в отношении разрешений Java

Если вы разрабатываете правила Java Callout, вам нужно знать, какие правила разрешений действуют в JVM Edge и как они повлияют на ваш код. Например, у вашего кода Java нет неограниченного доступа к файловой системе. Однако в случае доступа к файловой системе вы можете читать определенные файлы, например файлы ресурсов правил. Однако доступ к большинству других файловых систем заблокирован. В этой статье перечислены все типы разрешений JDK и их целевые объекты или действия. Для каждой цели или действия мы указываем правила разрешений и исключения, о которых вам нужно знать.

Чтобы узнать больше о типах разрешений JDK и о том, что позволяет каждое разрешение, ознакомьтесь со статьей Разрешения в Java Development Kit (JDK).

Как включить ограничения безопасности

В Edge для частного облака ограничения безопасности по умолчанию отключены. Это означает, что ваш код вызова Java может без ограничений получать доступ ко всем ресурсам. Чтобы включить ограничения безопасности в установке Edge для частного облака, выполните следующие действия:

  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. Перезапустите Message Processor:
    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 НЕТ
удалить НЕТ
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.{название библиотеки} НЕТ
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-адресов) подразумевается, если присутствует любое другое действие.
распознавать ДА
подключение

ДА, но есть ограничения. Подробнее об ограничениях…

Apigee ограничивает доступ к адресам sitelocal, anylocal, loopback и linklocal.

слушать,
принять
НЕТ
java.net.URLPermission

Представляет разрешение на доступ к ресурсу или набору ресурсов, определенных заданным URL, а также к заданному набору настраиваемых пользователем методов запроса и заголовков запроса. Название разрешения – это строка URL. Строка действий представляет собой конкатенацию методов запроса и заголовков. Диапазон названий методов и заголовков не ограничен этим классом.
ДА
LinkPermission

Класс разрешений для операций по созданию ссылок.
hard НЕТ
символический; НЕТ
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" – недопустимые.

Действия, которые нужно предоставить, передаются конструктору в виде строки, содержащей список из нуля или более ключевых слов, разделенных запятыми.
чтение ДА
write НЕТ
javax.xml.ws.WebServicePermission
publishEndpoint НЕТ
javax.xml.bind.JAXBPermission setDatatypeConverter НЕТ
javax.sound.sampled.AudioPermission

Права доступа к ресурсам аудиосистемы.
воспроизвести НЕТ
запись НЕТ
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 НЕТ
создать экземпляр НЕТ
вызывать НЕТ
isInstanceOf НЕТ
queryMBeans НЕТ
queryNames НЕТ
registerMBean НЕТ
removeNotificationListener НЕТ
setAttribute НЕТ
unregisterMBean НЕТ
javax.management.MBeanServerPermission
createMBeanServer НЕТ
findMBeanServer НЕТ
newMBeanServer НЕТ
releaseMBeanServer НЕТ
javax.management.MBeanTrustPermission

Это разрешение представляет собой "доверие" к подписанту или базе кода.
зарегистрироваться НЕТ
* НЕТ
javax.management.remote.SubjectDelegationPermission
НЕТ