
Ich versuche, über die REST-API mit einem F5-Load Balancer zu interagieren. Ich habe überprüft, ob iControl aktiviert ist. Wenn ich jedoch versuche, einen Befehl auszuführen, wird mir mitgeteilt, dass ich nicht autorisiert bin.
curl -k -u someone -H "Content-Type: application/json" -X GET https://f5.example.com/mgmt/
Enter host password for user 'someone':
{"code":404,"message":"http://localhost:8100/mgmt/","restOperationId":202459,"errorStack":["com.f5.rest.common.RestWorkerUriNotFoundException: http://localhost:8100/mgmt/","at com.f5.rest.common.RestServer.trySendInProcess(RestServer.java:231)","at com.f5.rest.common.RestRequestReceiver.dispatchToService(RestRequestReceiver.java:93)","at com.f5.rest.common.RestRequestReceiver.processNext(RestRequestReceiver.java:57)","at com.f5.rest.common.RestHelper$2.run(RestHelper.java:1910)","at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)","at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)","at java.lang.Thread.run(Thread.java:722)\n"]}
Mein Benutzer wird gegenüber Active Directory authentifiziert.
Muss ich den Benutzerzugriff für die Verwendung der REST-API explizit gewähren?
Benötige ich ein lokales Konto?
Aktualisieren
Hier ist ein weiteres Beispiel
Der Benutzer „jemand“ existiert tatsächlich, da ich mich mit diesem beim Webportal anmelde.
curl -k -u someone -H "Content-Type: application/json" -X GET https://f5.example.com/mgmt/tm/sys
Enter host password for user 'someone':
{"code":401,"message":"Authorization failed: no user named someone found. Uri:http://localhost:8100/mgmt/tm/sys Referer:null","restOperationId":869853,"errorStack":["java.lang.SecurityException: Authorization failed: no user named someone found. Uri:http://localhost:8100/mgmt/tm/sys Referer:null","at com.f5.rest.workers.ForwarderWorker.evaluatePermission(ForwarderWorker.java:411)","at com.f5.rest.workers.ForwarderPassThroughWorker.onForward(ForwarderPassThroughWorker.java:191)","at com.f5.rest.workers.ForwarderPassThroughWorker.onGet(ForwarderPassThroughWorker.java:321)","at com.f5.rest.common.RestWorker.callDerivedRestMethod(RestWorker.java:735)","at com.f5.rest.common.RestWorker.callRestMethodHandler(RestWorker.java:702)","at com.f5.rest.common.RestServer.processQueuedRequests(RestServer.java:1092)","at com.f5.rest.common.RestServer.access$000(RestServer.java:45)","at com.f5.rest.common.RestServer$1.run(RestServer.java:136)","at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)","at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)","at java.lang.Thread.run(Thread.java:722)\n"]}
Antwort1
Die Restschnittstelle authentifiziert nicht mit den normalen F5-Methoden, die Sie konfiguriert haben. Wenn Sie dies tun möchten, müssen Sie einen virtuellen Server mit F5 als Poolmitglied erstellen, dann einige Regeln schreiben, um den Restbenutzer zu entfernen, und diese an Ihre Authentifizierung übergeben... viel Code später... Erfolg.
Rest verwendet einen lokalen Benutzer und eine lokale Rolle für seine Prozesse auf dem f5. Sie erstellen den Benutzer über tmos und verknüpfen ihn dann über PATCH mit der Rolle iControl_REST_API_User.
Antwort2
Informationen zur Unterstützung der iControl REST-Remote-Authentifizierung finden Sie unterdieser Artikel auf F5s DevCentral.