Referencia de permisos de Java

Estás consultando la documentación de Apigee Edge.
Consulta la documentación de Apigee X.
Información

Qué necesitas saber sobre las políticas de permisos de Java

Si desarrollas políticas de textos destacados de Java, debes saber qué políticas de permisos están vigentes en la JVM de Edge y cómo afectarán a tu código. Por ejemplo, tu código Java personalizado no tiene acceso ilimitado al sistema de archivos. Sin embargo, en el caso del acceso al sistema de archivos, puedes leer ciertos archivos, como los archivos de recursos de la política. Sin embargo, la mayoría del acceso al sistema de archivos está bloqueado. En este tema, se enumeran todos los tipos de permisos de JDK y sus respectivos destinos o acciones. Para cada destino o acción, especificamos la política de permisos y cualquier excepción que necesites conocer.

Para obtener más información sobre los tipos de permisos de JDK y lo que permite cada uno, consulta Permisos en Java Development Kit (JDK).

Habilita restricciones de seguridad

En Edge para la nube privada, las restricciones de seguridad están inhabilitadas de forma predeterminada. Esto significa que el código destacado de Java personalizado puede acceder a todos los recursos sin restricciones. Para habilitar las restricciones de seguridad en tu instalación de Edge para la nube privada, sigue el procedimiento que se indica a continuación:

  1. En el primer nodo de Message Processor, abre el archivo $APIGEE_ROOT/customer/application/message-processor.properties en un editor. Si el archivo no existe, créalo.
  2. Agrega la siguiente línea al archivo:
    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. Reinicia Message Processor:
    apigee-service message-processor restart
  5. Repite estos pasos en todos los procesadores de mensajes restantes.
Tipo de permiso Nombre del destino o de la acción Se concedió permiso
java.awt.AWTPermission
accessClipboard NO
accessEventQueue NO
accessSystemTray NO
createRobot NO
fullScreenExclusive NO
listenToAllAWTEvents NO
readDisplayPixels NO
replaceKeyboardFocusManager NO
setAppletStub NO
setWindowsAlwaysOnTop NO
showWindowWithoutWarningBanner NO
toolkitModality NO
watchMousePointer NO
java.io.FilePermission

Un java.io.FilePermission representa el acceso a un archivo o directorio. Un FilePermission consta de un nombre de ruta de acceso y un conjunto de acciones válidas para ese nombre de ruta de acceso.
read SÍ, pero se aplican restricciones. Consulta Restricciones.
write NO
execute NO
borrar NO
readLink
java.io.SerializablePermission

Un SerializablePermission contiene un nombre (también denominado "nombre de destino"), pero no una lista de acciones. O tienes el permiso con nombre o no.
enableSubclassImplementation
enableSubstitution NO
java.lang.management.ManagementPermission

Métodos definidos en la interfaz de administración para la plataforma Java
controlar NO
monitor NO
java.lang.reflect.ReflectPermission

Para operaciones reflexivas. Un ReflectPermission es un permiso con nombre y no tiene acciones.
suppressAccessChecks NO
newProxyInPackage.{package name} NO
java.lang.RuntimePermission

Contiene un nombre (también conocido como "nombre del destino"), pero no una lista de acciones. Tienes el permiso con nombre o no.
createClassLoader NO
getClassLoader
setContextClassLoader
enableContextClassLoaderOverride
closeClassLoader NO
setSecurityManager NO
createSecurityManager NO
getenv.{variable name} NO
exitVM.{exit status} NO
shutdownHooks NO
setFactory NO
setIO NO
modifyThread
stopThread
modifyThreadGroup
getProtectionDomain
getFileSystemAttributes NO
readFileDescriptor
writeFileDescriptor NO
loadLibrary.{library name} NO
accessClassInPackage. {package name}
defineClassInPackage. {package name} NO
accessDeclaredMembers NO
queuePrintJob NO
getStackTrace NO
setDefaultUncaughtExceptionHandler NO
preferences NO
usePolicy NO
java.net.NetPermission

Un NetPermission contiene un nombre, pero no una lista de acciones. O el permiso con nombre o no.
setDefaultAuthenticator NO
requestPasswordAuthentication NO
specifyStreamHandler
setProxySelector NO
getProxySelector NO
setCookieHandler NO
getCookieHandler NO
setResponseCache NO
getResponseCache NO
getNetworkInformation NO
java.net.SocketPermission

Representa el acceso a una red a través de sockets. Un SocketPermission consiste en una especificación de host y un conjunto de “acciones” que especifican formas de conectarse a ese host.
host = (hostname | IPaddress)[:portrange]
portrange = portnumber | -portnumber | portnumber-[portnumber]

Las posibles formas de conectarse al host son

accept
connect
listen
resolve

La acción “listen” solo es significativa cuando se usa con “localhost”. La acción “resolve” (resolver búsquedas de servicio de nombre de host/ip) está implícita cuando cualquiera de las otras acciones está presente.
resolve
conectar

SÍ, pero se aplican restricciones. Consulta Restricciones.

Apigee restringe el acceso a las direcciones de sitio local, de bucle invertido, de enlace-local y locales.

escuchar,
aceptar
NO
java.net.URLPermission

Representa el permiso para acceder a un recurso o conjunto de recursos definidos por una URL determinada y para un conjunto determinado de métodos de solicitud y encabezados de solicitud que el usuario puede configurar. El nombre del permiso es la string de URL. La string de acciones es una concatenación de los métodos y encabezados de solicitud. El rango de nombres de método y encabezado no está restringido por esta clase.
LinkPermission

La clase de permiso para las operaciones de creación de vínculos.
hard NO
symbolic NO
java.security.SecurityPermission

Un SecurityPermission contiene un nombre (también denominado “nombre de destino”), pero no una lista de acciones. Tienes o no tienes el permiso con nombre.
El nombre de destino es el nombre de un parámetro de configuración de seguridad (consulta a continuación). Por el momento, el objeto SecurityPermission se usa para proteger el acceso a los objetos Policy, Security, Provider, Signer y Identity.
createAccessControlContext NO
getDomainCombiner NO
getPolicy NO
setPolicy NO
createPolicy.{policy type} NO
getProperty.{key} NO
setProperty.{key} NO
insertProvider NO
removeProvider.{provider name} NO
clearProviderProperties.{provider name} NO
putProviderProperty.{provider name} NO
removeProviderProperty.{provider name} NO
SQLPermission setLog NO
callAbort NO
setSyncFactory NO
setNetworkTimeout NO
deregisterDriver NO
java.util.logging.LoggingPermission

Un SecurityManager comprobará el objeto java.util.logging.LoggingPermission cuando se ejecute código con un SecurityManager para llamar a uno de los métodos de control de registro. (como Logger.setLevel).
controlar NO
java.util.PropertyPermission
El nombre es el nombre de la propiedad (“java.home”, “os.name”, etcétera). La convención de nombres sigue la convención de nombres de las propiedades jerárquicas. Además, un asterisco puede aparecer al final del nombre, después de “.” o por sí solo, para indicar una coincidencia de comodín. Por ejemplo: “java.*” o “*” son válidos, pero “*java” o “a*b” no lo son.

Las acciones que se otorgarán se pasan al constructor en una string que contiene una lista de cero o más palabras clave separadas por comas.
read
write NO
javax.xml.ws.WebServicePermission
publishEndpoint NO
javax.xml.bind.JAXBPermission setDatatypeConverter NO
javax.sound.sampled.AudioPermission

Acceso a los derechos de los recursos del sistema de audio.
play NO
record NO
javax.security.auth.PrivateCredentialPermission

Protege el acceso a las credenciales privadas que pertenecen a un sujeto en particular. El sujeto está representado por un conjunto de principales. El nombre de destino de este permiso especifica un nombre de clase de credencial y un conjunto de principales. El único valor válido para las acciones de este permiso es “read”.
CredentialClass {PrincipalClass "PrincipalName"}* NO
javax.security.auth.kerberos.ServicePermission

Protege los servicios de Kerberos y las credenciales necesarias para acceder a esos servicios.
initiate NO
accept NO
javax.security.auth.kerberos.DelegationPermission

Se usa para restringir el uso del modelo de delegación de Kerberos, es decir, tickets de reenvío y que se pueden enviar mediante proxy.

El nombre de destino de este permiso especifica un par de principales de servicio de Kerberos. La primera es la principal de servicio subordinada a la que se le confía el uso del ticket de concesión de tickets (TGT). La segunda principal de servicio designa el servicio de destino con el que la principal de servicio subordinada interactúa en nombre de la KerberosPrincipal que se inicia.
initiate NO
accept NO
javax.security.auth.AuthPermission

Actualmente, el objeto AuthPermission se usa para proteger el acceso a los objetos Subject, SubjectDomainCombiner, LoginContext y Configuration.
doAs NO
doAsPrivileged NO
getSubject NO
getSubjectFromDomainCombiner NO
setReadOnly NO
modifyPrincipals NO
modifyPublicCredentials NO
modifyPrivateCredentials NO
refreshCredential NO
destroyCredential NO
createLoginContext.{name} NO
getLoginConfiguration NO
setLoginConfiguration NO
createLoginConfiguration.{configuration type} NO
refreshLoginConfiguration NO
javax.net.ssl.SSLPermission
setHostnameVerifier NO
getSSLSessionContext NO
setDefaultSSLContext NO
javax.management.MBeanPermission

Permiso que controla el acceso a las operaciones de MBeanServer. Si se configuró un administrador de seguridad con System.setSecurityManager(java.lang.SecurityManager), la mayoría de las operaciones en MBeanServer requieren que los permisos del emisor impliquen un MBeanPermission apropiado para la operación.

action className#member[objectName]

Si tienes un MBePermissionPermission, solo permite operaciones si estas son las cuatro elementos coincidentes.
addNotificationListener NO
getAttribute NO
getClassLoader NO
getClassLoaderFor NO
getClassLoaderRepository NO
getDomains NO
getMBeanInfo NO
getObjectInstance NO
instantiate NO
invocar NO
isInstanceOf NO
queryMBeans NO
queryNames NO
registerMBean NO
removeNotificationListener NO
setAttribute NO
unregisterMBean NO
javax.management.MBeanServerPermission
createMBeanServer NO
findMBeanServer NO
newMBeanServer NO
releaseMBeanServer NO
javax.management.MBeanTrustPermission

Este permiso representa la “confianza” en un firmante o una base de código.
register NO
* NO
javax.management.remote.SubjectDelegationPermission
NO