Documentation de référence sur les autorisations Java

Vous consultez la documentation d'Apigee Edge.
Consultez la documentation Apigee X.
en savoir plus

Ce que vous devez savoir sur les stratégies d'autorisation Java

Si vous développez des stratégies d'appel Java, vous devez savoir quelles stratégies d'autorisation sont en vigueur dans la JVM Edge et comment elles affecteront votre code. Par exemple, votre code Java personnalisé ne dispose pas d'un accès illimité au système de fichiers. Toutefois, dans le cas d'accès au système de fichiers, vous pouvez lire certains fichiers, tels que les fichiers de ressources de stratégies. Cependant, la plupart des autres accès au système de fichiers sont bloqués. Cette rubrique répertorie tous les types d'autorisations JDK, ainsi que leurs cibles ou actions respectives. Pour chaque cible ou action, nous indiquons la stratégie d'autorisation et les exceptions que vous devez connaître.

Pour en savoir plus sur les types d'autorisations JDK et les autorisations associées aux différentes autorisations, consultez la section Autorisations dans le kit de développement Java (JDK).

Activer les restrictions de sécurité

Dans Edge pour Private Cloud, les restrictions de sécurité sont désactivées par défaut. Cela signifie que votre code d'appel Java personnalisé peut accéder à toutes les ressources sans restrictions. Pour activer les restrictions de sécurité dans votre installation Edge pour Private Cloud, suivez la procédure ci-dessous:

  1. Sur le premier nœud de processeur de messages, ouvrez le fichier $APIGEE_ROOT/customer/application/message-processor.properties dans un éditeur. Si le fichier n'existe pas, créez-le.
  2. Ajoutez la ligne suivante au fichier :
    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. Redémarrez le processeur de messages :
    apigee-service message-processor restart
  5. Répétez ces étapes sur tous les processeurs de messages restants.
Type d'autorisation Nom de la cible ou de l'action Autorisation accordée
java.awt.AWTPermission
accessClipboard NON
accessEventQueue NON
accessSystemTray NON
createRobot NON
fullScreenExclusive NON
listenToAllAWTEvents NON
readDisplayPixels NON
replaceKeyboardFocusManager NON
setAppletStub NON
setWindowsAlwaysOnTop NON
showWindowWithoutWarningBanner NON
toolkitModality NON
watchMousePointer NON
java.io.FilePermission

Une autorisation java.io.FilePermission représente l'accès à un fichier ou à un répertoire. Une autorisation FilePermission comprend un chemin d'accès et un ensemble d'actions valides pour ce chemin.
read OUI, mais des restrictions s'appliquent. Consultez la section Restrictions.
write NON
execute NON
supprimer NON
readLink OUI
java.io.SerializablePermission

Une autorisation SerializablePermission contient un nom (également appelé "nom de la cible"), mais pas de liste d'actions. Soit vous disposez de l'autorisation nommée, soit d'aucune autorisation.
enableSubclassImplementation OUI
enableSubstitution NON
java.lang.management.ManagementPermission

Méthodes définies dans l'interface de gestion de la plate-forme Java
contrôler NON
monitor NON
java.lang.reflect.ReflectPermission

Pour les opérations réflexives. Une autorisation ReflectPermission est une autorisation nommée et ne comporte aucune action.
suppressAccessChecks NON
newProxyInPackage.{package name} NON
java.lang.RuntimePermission

Contient un nom (également appelé "nom de cible"), mais aucune liste d'actions (vous disposez de l'autorisation nommée ou non).
createClassLoader NON
getClassLoader OUI
setContextClassLoader OUI
enableContextClassLoaderOverride OUI
closeClassLoader NON
setSecurityManager NON
createSecurityManager NON
getenv.{variable name} NON
exitVM.{exit status} NON
shutdownHooks NON
setFactory NON
setIO NON
modifyThread OUI
stopThread OUI
modifyThreadGroup OUI
getProtectionDomain OUI
getFileSystemAttributes NON
readFileDescriptor OUI
writeFileDescriptor NON
loadLibrary.{library name} NON
accessClassInPackage. {package name} OUI
defineClassInPackage. {package name} NON
accessDeclaredMembers NON
queuePrintJob NON
getStackTrace NON
setDefaultUncaughtExceptionHandler NON
preferences NON
usePolicy NON
java.net.NetPermission

Une autorisation NetPermission contient un nom, mais pas de liste d'actions. Soit vous disposez de l'autorisation nommée, soit d'aucune autorisation.
setDefaultAuthenticator NON
requestPasswordAuthentication NON
specifyStreamHandler OUI
setProxySelector NON
getProxySelector NON
setCookieHandler NON
getCookieHandler NON
setResponseCache NON
getResponseCache NON
getNetworkInformation NON
java.net.SocketPermission

Représente l'accès à un réseau via des sockets. Une autorisation SocketPermission se compose d'une spécification d'hôte et d'un ensemble d'"actions" spécifiant des moyens de se connecter à cet hôte.
host = (hostname | IPaddress)[:portrange]
portrange = portnumber | -portnumber | portnumber-[portnumber]

Les méthodes possibles de connexion à l'hôte sont les suivantes :

accept
connect
listen
resolve

L'action "listen" n'a du sens qu'avec "localhost". L'action "resolve" (résoudre les recherches du service de nom d'hôte/adresse IP) est implicite lorsque toute autre action est présente.
resolve OUI
associer

OUI, mais des restrictions s'appliquent. Consultez la section Restrictions.

Apigee restreint l'accès aux adresses sitelocal, anylocal, loopback et linklocal.

listen,
accept
NON
java.net.URLPermission

Représente l'autorisation d'accéder à une ressource ou à un ensemble de ressources défini par une URL donnée, et pour un ensemble donné d'en-têtes de requête et de méthodes de requête définies par l'utilisateur. Le nom de l'autorisation correspond à la chaîne d'URL. La chaîne d'actions est une concaténation des méthodes et des en-têtes de requête. La plage des noms de méthodes et d'en-tête n'est pas limitée par cette classe.
OUI
LinkPermission

Classe d'autorisation pour les opérations de création de liaison.
hard NON
symbolic NON
java.security.SecurityPermission

Un objet SecurityPermission contient un nom (également appelé "nom de la cible"), mais pas de liste d'actions. Soit vous avez l'autorisation nommée ou pas.
Le nom de la cible correspond au nom d'un paramètre de configuration de sécurité (voir ci-dessous). Actuellement, l'objet SecurityPermission est utilisé pour protéger l'accès aux objets Policy, Security, Provider, Signer et Identity.
createAccessControlContext NON
getDomainCombiner NON
getPolicy NON
setPolicy NON
createPolicy.{policy type} NON
getProperty.{key} NON
setProperty.{key} NON
insertProvider NON
removeProvider.{provider name} NON
clearProviderProperties.{provider name} NON
putProviderProperty.{provider name} NON
removeProviderProperty.{provider name} NON
SQLPermission setLog NON
callAbort NON
setSyncFactory NON
setNetworkTimeout NON
deregisterDriver NON
java.util.logging.LoggingPermission

Un objet SecurityManager vérifie l'objet java.util.logging.LoggingPermission lorsque le code exécuté avec un objet SecurityManager appelle l'une des méthodes de contrôle de journalisation. (par exemple, Logger.setLevel).
contrôler NON
java.util.PropertyPermission
Le nom correspond au nom de la propriété ("java.home", "os.name", etc.). La convention d'attribution de noms suit la convention d'attribution de noms de propriété hiérarchique. En outre, un astérisque peut apparaître à la fin du nom, après un "." ou par lui-même, pour indiquer une correspondance avec un caractère générique. Par exemple : "java.*" ou "*" est valide, "*java" ou "a*b" n'est pas valide.

Les actions à accorder sont transmises au constructeur dans une chaîne contenant une liste de zéro ou plusieurs mots clés séparés par une virgule.
read OUI
write NON
javax.xml.ws.WebServicePermission
publishEndpoint NON
javax.xml.bind.JAXBPermission setDatatypeConverter NON
javax.sound.sampled.AudioPermission

Droits d'accès aux ressources du système audio.
play NON
record NON
javax.security.auth.PrivateCredentialPermission

Protégez l'accès aux identifiants privés appartenant à un objet Sujet particulier. Le Sujet est représenté par un ensemble de comptes principaux. Le nom cible de cette autorisation spécifie un nom de classe d'identification et un ensemble de comptes principaux. La seule valeur valide pour les actions de cette autorisation est "lecture".
CredentialClass {PrincipalClass "PrincipalName"}* NON
javax.security.auth.kerberos.ServicePermission

Protégez les services Kerberos et les identifiants nécessaires pour y accéder.
initiate NON
accept NON
javax.security.auth.kerberos.DelegationPermission

Utilisé pour restreindre l'utilisation du modèle de délégation Kerberos. par exemple les tickets transférables et transitables.

Le nom cible de cette autorisation spécifie deux comptes principaux de service kerberos. Le premier est le compte principal du service subordonné autorisé à utiliser le ticket d'octroi de ticket (TGT). Le second compte principal de service désigne le service cible avec lequel le compte principal de service subordonné doit interagir au nom du compte KerberosPrincipal émetteur.
initiate NON
accept NON
javax.security.auth.AuthPermission

Actuellement, l'objet AuthPermission est utilisé pour protéger l'accès aux objets Subject, SubjectDomainCombiner, LoginContext et Configuration.
doAs NON
doAsPrivileged NON
getSubject NON
getSubjectFromDomainCombiner NON
setReadOnly NON
modifyPrincipals NON
modifyPublicCredentials NON
modifyPrivateCredentials NON
refreshCredential NON
destroyCredential NON
createLoginContext.{name} NON
getLoginConfiguration NON
setLoginConfiguration NON
createLoginConfiguration.{configuration type} NON
refreshLoginConfiguration NON
javax.net.ssl.SSLPermission
setHostnameVerifier NON
getSSLSessionContext NON
setDefaultSSLContext NON
javax.management.MBeanPermission

Autorisation de contrôler l'accès aux opérations MoleanServer. Si un gestionnaire de sécurité a été défini à l'aide de System.setSecurityManager(java.lang.SecurityManager), la plupart des opérations sur MBeanServer exigent que les autorisations de l'appelant impliquent un objet MBeanPermission appropriée pour l'opération.

action className#member[objectName]

Si vous disposez d'une autorisation MBeanPermission, elle n'autorise les opérations que si les quatre éléments correspondent.
addNotificationListener NON
getAttribute NON
getClassLoader NON
getClassLoaderFor NON
getClassLoaderRepository NON
getDomains NON
getMBeanInfo NON
getObjectInstance NON
instancier NON
appeler NON
isInstanceOf NON
queryMBeans NON
queryNames NON
registerMBean NON
removeNotificationListener NON
setAttribute NON
unregisterMBean NON
javax.management.MBeanServerPermission
createMBeanServer NON
findMBeanServer NON
newMBeanServer NON
releaseMBeanServer NON
javax.management.MBeanTrustPermission

Cette autorisation représente la "confiance" d'un signataire ou d'un codebase.
register NON
* NON
javax.management.remote.SubjectDelegationPermission
NON