Liferay-Portal für Gridanwendung - Anbindung der Grid Workflows und Sicherheitsmethoden in Liferay - Liferay Workshop, 08. 09.2010, Berlin Jie Wu Charitè Universitätsmedizin Berlin
Integration von Grid Workflows in Liferay Grid-Sicherheitsmethoden in Liferay-Portal Zertifikate und SSL-Verschlüsselung User-Credentials Diskussion
Grid Workflows Grid Workflows Automatisierung von IT-Prozessen in Gridumgebungen mittels Graphen Grid Workflow Description Language (GWorkflowDL) Fraunhofer FIRST entwickelt, XML-basierte Workflow- Beschreibungssprache Basiert auf High-Level-Petrinetzen Modellierung der Kontroll- und Datenflüsse von verteilten IT- Prozessen in Grids Ziel: effektive Ausführung und Überwachung von Workflows
Ausführen von Workflows
GWorkflowDL-Beispiel (1) <workflow xmlns="http://www.gridworkflow.org/gworkflowdl xmlns:oc="http://www.gridworkflow.org/gworkflowdl/operationclas s" ID= sortworkflow"> <place ID="begin"> <token><data><file>input1.dat</file></data></token> <token><data><file>input2.sat</file></data></token> </place> <place ID="outputData"/> <place ID="hasBeenSorted"/> <transition ID="sort"> <description>sorts strings or numbers</description> <inputplace placeid="begin" edgeexpression="input"/> <outputplace placeid="outputdata" edgeexpression="output"/> <outputplace placeid="hasbeensorted"/> <condition>string-length($input) > 0</condition>
GWorkflowDL-Beispiel (2) abstrakte Operation <operation> <oc:operationclass name="urn:dgrdl:software:sort"> <oc:operationcandidate type="wsgram" operationname="sort.sh" resourcename="node15" ResourceMatcher quality="0.9" selected="true"/> <oc:operationcandidate type="wsgram" operationname="sort.sh" resourcename="node20" quality="0.3"/> </oc:operationclass> Scheduler </operation> </transition> </workflow>
GWES Grid Workflow Execution Service (GWES) die Automatisierung und das interaktive Management von komplexen und dynamischen Prozessabläufen in Grid- Umgebungen ermöglicht Workflow-Engine kann online im Grid oder offline auf den mobilen Engeräte zur Automatisierung Ausfürhung Kontrolle generischen Prozessen eingesetzt werden.
Ablauf von GWES-Prozessen
Beispiel Workflow
grafischen Notation der GWorkflowDL
GWES starten Code-Beispiel AxisProperties.setProperty("axis.ClientConfigFile", "gwes-client-config.wsdd"); GWESClient client = new GWESClient(new URL(gwespath) + "/services/gwes"), null); GwesEngine gwes = client.gwes; workflowid = gwes.initiate(workflow,usercredential); gwes.start(); status = gwes.getstatus(workflowid)
gwes-client-config.wsdd: Code-Beispiel (2) <?xml version="1.0" encoding="utf-8"?> <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <globalconfiguration> <parameter name="adminpassword" value=""/> <parameter name="disableprettyxml" value="true"/> <parameter name="attachments.implementation" value="org.apache.axis.attachments.attachmentsimpl"/> <parameter name="sendxsitypes" value="true"/> <parameter name="sendmultirefs" value="false"/> <parameter name="sendxmldeclaration" value="true"/> </globalconfiguration>
Code-Beispiel (3) <handler name="gweshandler" type="java:net.kwfgrid.gwes.axisclienthandler"/> <transport name="java" pivot="java:org.apache.axis.transport.java.javasender"/> <!-- use standard pivot without wsrf for http --> <transport name="http" pivot="java:org.apache.axis.transport.http.httpsender"> <requestflow> <handler type="gweshandler"/> </requestflow> </transport> <transport name="local" pivot="java:org.apache.axis.transport.local.localsender"/> </deployment>
als Applet starten: Code-Beispiel (4) <applet code="net/kwfgrid/gwui/applet/igapplet.class" codebase= $GWES_URL/gwui archive="signedjar/gwui- 0.8.0.jar,lib/gworkflowdl-2.0.1.jar,lib/jaxen-1.1-beta-6.jar,lib/jdom- 1.1.jar,lib/jug-1.1.2.jar,lib/log4j-1.2.8.jar,lib/j2sewsoap- 1.06.jar,lib/jxupdate-0.7.1.jar,lib/xpp3-1.1.3.3.jar,lib/xercesImpl- 2.9.1.jar,lib/xmlParserAPIs-2.6.2.jar" width="1000" height="600"> <param name="user.id" value="$user") %>"> <param name="workflow.id" value= $WORKFLOW_ID"> <param name="service.gwes.uri" value="$gwes_url/services/gwes"> <param name="service.graphviz.uri" value="$gwes_url/../linuxtoolbox/services/graphvizws"> <param name="gworkflowdl.xsd.path" value="http://www.gridworkflow.org/kwfgrid/src/xsd"> </applet>
Zertifikate Grid-Zertifikate: X509-Zertifikate public key - Dienste private key Nutzer Sicherheitsmethoden Certification Authority (CA): Authentizität des Nutzers über digitale Signierung des Zertifikates durch CA bestätigt Trusted CA: die Zertifizierungsstelle muss von allen Dienstanbietern vertraut werden Registierungsstellen: DFN, GridKa
Sicherheitsmethoden Zertifikate Proxyzertifikate (Credentials) MyProxy-Server der asymmetrische Schlüsselpaare für Nutzer erzeugt und speichert zur Ablage privater Schlüssel dient, die niemals übers Netz transportiert werden müssen Kurze Gültigkeitsdauer SSL (Secure Sockets Layer ) / TLS (Transport Layer Security) Sichere Client-Server-Kommunikation (Datenübertragung) in WWW
Vorgehensweisen Server-Zertifikate bei DFN beantragen Wurzelzertifikate (root-zertifikate) und CA-Zertifikat importieren User-Zertifikate bei DFN beantragen Bei der Pneumogrid-VO anmelden User-Zertifikate ins Browser importieren server.xml bearbeiten Lokales Proxy erzeugen Proxy auf das myproxy-server hochladen
Code-Beispiel $TOMCAT_HOME/conf/server.xml <Connector port="8443" maxhttpheadersize="8192" maxthreads="150" minsparethreads="25" maxsparethreads="75" enablelookups="true" disableuploadtimeout="true" acceptcount="100" scheme="https" secure="true" SSLEnabled="true" keystorefile="tomcat.keystore" keystorepass= "changeit" truststorefile="tomcat.keystore" truststorepass= "changeit" clientauth="true" sslprotocol="tls" />
userdn von request Code-Beispiel (2) GSSCredential cred = CredInfoLocalServiceUtil.retrieveCredential(host, port, userdn, password, 24*60*60); Credential = new String(((ExtendedGSSCredential) cred).export(0)));
Code-Beispiel (3) retrievecredential(host, port, userdn, password, 24*60*60): MyProxy myproxy = new MyProxy(myProxyHost, myproxyport); GSSCredential cred = myproxy.get(myproxyusername, myproxypassphrase, myproxylifetime);
Code-Beispiel (4) getuserdn(portletrequest request): X509Certificate[] certs = (X509Certificate[]) request.getattribute(certificate_key); X509Certificate cert = certs[0]; String userdn = cert.getsubjectdn().tostring();
Frage? Diskussion