{"id":12819,"date":"2024-03-20T23:40:00","date_gmt":"2024-03-20T21:40:00","guid":{"rendered":"https:\/\/u-labs.de\/portal\/?p=12819"},"modified":"2024-03-23T21:31:32","modified_gmt":"2024-03-23T19:31:32","slug":"atlassian-on-prem-anwendungsverknupfungen-zu-cloud-workarounds-anwendungstunnel","status":"publish","type":"post","link":"https:\/\/u-labs.de\/portal\/atlassian-on-prem-anwendungsverknupfungen-zu-cloud-workarounds-anwendungstunnel\/","title":{"rendered":"Atlassian On-Prem Anwendungsverkn\u00fcpfungen zu Cloud: Workarounds f\u00fcr halbherzige Anwendungstunnel"},"content":{"rendered":"<p>Bamboo, Bitbucket &amp; co. mit Atlassian Cloud-Instanzen verkn\u00fcpfen? Dank der Tunnel gar kein Problem &#8211; zumindest in der Theorie. Praktisch ist die Software bis heute nicht ausgereift, obwohl es 5 nach 12 ist. Ich habe mich bei einer Migration damit besch\u00e4ftigt und per Reverse Engineering die Fallstricke in einer typischen Unternehmensumgebung ermittelt. Dieser Beitrag zeigt, was schief l\u00e4uft, welche technischen Vers\u00e4umnisse dahinter stecken und mit welchen Workarounds man den Nutzern die Funktionalit\u00e4t trotzdem zur Verf\u00fcgung stellen kann.<\/p>\n<h2 class=\"wp-block-heading\">Ausgangssituation und Ziel<\/h2>\n<p>Bambo DataCenter und Bitbucket (= On-Prem) soll mit einer neuen Jira Cloud Instanz verbunden werden. Alle drei liefen bisher als Server-Lizenz On-Prem. Atlassian hat mit ihrem Cloudzwang die Verantwortlichen davon \u00fcberzeugt, dass die Migration zu Jira Cloud weniger teurer ist, als DataCenter mit mindestens 500 Nutzern. Und Cloudausf\u00e4lle treffen eh blo\u00df die anderen.<sup data-fn=\"b84dbe92-3769-4bd2-87b2-0bb20f957e1e\" class=\"fn\"><a href=\"#b84dbe92-3769-4bd2-87b2-0bb20f957e1e\" id=\"b84dbe92-3769-4bd2-87b2-0bb20f957e1e-link\">1<\/a><\/sup> Bisher waren Jira und Bamboo On-Prem \u00fcber Anwendungsverkn\u00fcpfungen miteinander verbunden.<sup data-fn=\"d60c7b97-1b87-4f16-992a-842a9aa921dd\" class=\"fn\"><a href=\"#d60c7b97-1b87-4f16-992a-842a9aa921dd\" id=\"d60c7b97-1b87-4f16-992a-842a9aa921dd-link\">2<\/a><\/sup>  Damit kann man Informationen vom einen System in das andere integrieren &#8211; beispielsweise Git-Commits von Bitbucket in Jira Tickets. Im gleichen Netzwerk On-Prem lief der Atlassian-Teil stabil.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/atlassian-jira-cloudmig.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"239\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/atlassian-jira-cloudmig-1024x239.png\" alt=\"\" class=\"wp-image-12877\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/atlassian-jira-cloudmig-1024x239.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/atlassian-jira-cloudmig-300x70.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/atlassian-jira-cloudmig-768x179.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/atlassian-jira-cloudmig-640x149.png 640w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/atlassian-jira-cloudmig-730x170.png 730w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/atlassian-jira-cloudmig.png 1494w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Jira in der Atlassian Cloud, Bitbucket &amp; Bamboo weiterhin als DataCenter On Prem: So ist die Ziel-Infrastruktur gew\u00fcnscht<\/figcaption><\/figure>\n<\/div>\n<p>Die internen Systeme kommen nur \u00fcber einen Proxy-Server ins Internet, der wiederum selbst ein extern betriebener Dienst ist. Der bricht verschl\u00fcsselte Verbindungen per MITM auf, dementsprechend muss sein Root-Zertifikat im <code class=\"\" data-line=\"\">cacerts<\/code> Speicher der Java Laufzeitumgebung hinterlegt sein. Dies geschieht \u00fcber die Java Properties (<code class=\"\" data-line=\"\">-D<\/code>) in den Startskripten (<code class=\"\" data-line=\"\">setenv.sh<\/code> bzw. vergleichbare, das ist nicht einheitlich).<\/p>\n<h2 class=\"wp-block-heading\">Application Tunnel: Ein Trick zur Umgehung von Firewalls &amp; co.<\/h2>\n<p>Mit den Atlassian Cloudsystemen \u00e4ndert sich das. Hier hat man bei den Anwendungsverkn\u00fcpfungen grunds\u00e4tzlich die Wahl zwischen <em>Getunnelt<\/em> und <em>Direkt<\/em>.<sup data-fn=\"3b519e85-8885-49d0-8a43-3bd00a9bfd03\" class=\"fn\"><a href=\"#3b519e85-8885-49d0-8a43-3bd00a9bfd03\" id=\"3b519e85-8885-49d0-8a43-3bd00a9bfd03-link\">3<\/a><\/sup> Letztere entspricht den Application Links der On-Prem Editionen untereinander, d.H. Server A holt sich die Infos von Server B sowie umgekehrt. Sobald Cloudsysteme im Spiel sind, wird das schwierig. Tendenziell kann ein internes Unternehmenssystem mit entsprechender Freischaltung auf externe Clouddienste zugreifen. Von au\u00dfen nach innen m\u00f6chte man oft einen Reverse Proxy in der DMZ haben und generell sind solche <em>L\u00f6cher<\/em> eher unerw\u00fcnscht, weil aufw\u00e4ndig und potenziell gef\u00e4hrlich.<\/p>\n<p>Also hat Atlassian <em>Getunnelte Anwendungsverkn\u00fcpfungen<\/em> (application tunnels) erfunden. Ihre Doku dazu verspricht eine L\u00f6sung f\u00fcr genau dieses Problem: Die Cloud soll auf interne Systeme zugreifen k\u00f6nnen, ohne diese Systeme \u00f6ffentlich erreichbar zu machen. Klingt wie die Quadratur des Kreises und mir f\u00e4llt nur ein Trick ein, wie das umsetzbar ist: Das On-Prem System initiiert eine Verbindung mit dem Cloudsystem. Sie wird offen gehalten, damit die Gegenseite dort Anfragen stellen kann. Bei Websockets wird damit das im Kern gleiche Problem gel\u00f6st: Im HTTP-Protokoll sind nur Anfragen vom Client an den Server vorgesehen, nicht umgekehrt. Fr\u00fcher hat man daf\u00fcr eine Ajax-Anfrage gesendet, die der Server offen l\u00e4sst, bis er seine Daten als Antwort sendet. Oder pauschales Polling von der Gegenseite. Beides technisch schlecht und skaliert auch nicht gut.<\/p>\n<p>Wenn der On-Prem Server sich mit der Cloud verbindet und die Verbindung offen h\u00e4lt, sollte das grunds\u00e4tzlich funktionieren. Dazu gibt es mit WebSockets seit l\u00e4ngerem ein auf HTTP aufsetzendes Protokoll, dass daf\u00fcr ausgelegt ist, eine Verbindung f\u00fcr das Senden von beiden Parteien ge\u00f6ffnet zu halten. HTTP(S) wird zudem von den meisten Firewalls &amp; Proxy-Servern erlaubt.<\/p>\n<h2 class=\"wp-block-heading\">Installation: DAS soll so funktionieren?<\/h2>\n<p>Die Tunnel stecken in einer Erweiterung mit einer sympathischen 2\/4 Sternen.<sup data-fn=\"a8f887c2-41f6-46cd-a9bb-dc5bd5697917\" class=\"fn\"><a href=\"#a8f887c2-41f6-46cd-a9bb-dc5bd5697917\" id=\"a8f887c2-41f6-46cd-a9bb-dc5bd5697917-link\">4<\/a><\/sup> Kostenpflichtig lizenzieren muss man sie nicht, allerdings \u00fcber den Marketplace von Atlassian installieren. Dadurch erscheint bei den Integrationen ein neuer Men\u00fcpunkt <em>Application tunnels<\/em>. Zus\u00e4tzlich verlangt Atlassian einen Connector, je nach Anwendung setzt man den im Tomcat (server.xml) oder in der Properties-Datei.<sup data-fn=\"0df1ed2d-e955-4338-83a8-94508693c714\" class=\"fn\"><a href=\"#0df1ed2d-e955-4338-83a8-94508693c714\" id=\"0df1ed2d-e955-4338-83a8-94508693c714-link\">5<\/a><\/sup> Dessen Port soll man anschlie\u00dfend als Java-Property \u00fcbergeben:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">-Dsecure.tunnel.upstream.port=$portNumber<\/code><\/pre>\n<p>Das macht mich stutzig. Beim ersten \u00fcberfliegen der Doku hatte ich den Verdacht, es sind doch eingehende Verbindungen auf diesem Port erforderlich &#8211; wozu \u00f6ffnen wir sonst auf dem On-Prem Server ein weiterer Port ge\u00f6ffnet werden, mit dem offensichtlich der Anwendungsserver kommuniziert? Allerdings widerspricht der Eintrag und sagt, der Port m\u00fcsse nur lokal erreichbar sein. Ein Abschnitt zeigt sogar, wie man den Port auf lokale Verbindungen beschr\u00e4nkt. Seltsam. Auch nach einem l\u00e4ngeren Gespr\u00e4ch mit dem Dienstleister war mir nicht klar, wie das funktionieren sollte. Insbesondere weil das Schaubild in der Atlassian Erkl\u00e4rung genau das zeigte, was ich bef\u00fcrchtete: Der m\u00f6chte sich von der Atlassian Cloud ins Firmennetzwerk verbinden, was nicht funktionieren w\u00fcrde.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/grafik-4.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"234\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/grafik-4-1024x234.png\" alt=\"\" class=\"wp-image-12829\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/grafik-4-1024x234.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/grafik-4-300x69.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/grafik-4-768x176.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/grafik-4-1536x351.png 1536w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/grafik-4-640x146.png 640w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/grafik-4-744x170.png 744w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/grafik-4.png 1632w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<p>\u00dcber dem Bild schrieb Atlassian jedoch, genau das sei nicht n\u00f6tig. Ich entschloss, dass wir es zusammen versuchen einzurichten &#8211; vielleicht w\u00fcrde es dann klarer. Au\u00dferdem war keine Alternative in Sicht. Dem Fachbereich sind die Anwendungsverkn\u00fcpfungen enorm wichtig. Somit haben wir in der Konfigurationsdatei des integrierten Tomcat in <code class=\"\" data-line=\"\">&lt;Service&gt;<\/code> einen Connector angelegt:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-xml\" data-line=\"\">&lt;Connector port=&quot;8093&quot; connectionTimeout=&quot;20000&quot; maxThreads=&quot;200&quot; minSpareThreads=&quot;10&quot; \n           enableLookups=&quot;false&quot; acceptCount=&quot;10&quot; URIEncoding=&quot;UTF-8&quot; \/&gt;<\/code><\/pre>\n<p>Und in der Variable <code class=\"\" data-line=\"\">JVM_SUPPORT_RECOMMEND<\/code> aus \/setenv.sh der JVM das Property f\u00fcr den Port \u00fcbergeben:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">-Dsecure.tunnel.upstream.port=$portNumber<\/code><\/pre>\n<p>Schlussendlich einen Tunnel im Administrationsbereich von Jira Cloud angelegt sowie dessen Schl\u00fcssel in Bamboo DataCenter hinterlegt.<sup data-fn=\"8b9f22ae-9e86-4d64-99bf-88d34fc99fb8\" class=\"fn\"><a href=\"#8b9f22ae-9e86-4d64-99bf-88d34fc99fb8\" id=\"8b9f22ae-9e86-4d64-99bf-88d34fc99fb8-link\">6<\/a><\/sup><\/p>\n<h2 class=\"wp-block-heading\">Erfolgreich nichts abgeschlossen<\/h2>\n<p>Nach dem Anlegen passierte jedoch &#8230; nichts. Der Bamboo On-Prem Tunnel bleibt grau auf <em>unavailable<\/em>, w\u00e4hrend der Status von Jira Cloud auf <em>unvollst\u00e4ndig<\/em> steht. Das Log von Bamboo sagt &#8230; nichts. Mit Bitbucket habe ich es zuerst probiert, weil Bamboo ein Upgrade auf 9.3 verlangt und nat\u00fcrlich 9.2 LTS lief. Dort log das Log [sic], man h\u00e4tte irgendwas erfolgreich an der Verbindung aktualisiert. Da diese Meldung ohne Interaktion ungef\u00e4hr jede Minute ins Protokoll geschrieben wurde, war das ein Test, Healthcheck oder etwas anderes automatisiertes. Hergestellt werden konnte die Verbindung allerdings trotzdem nicht.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">c.a.t.m.TunnelConnectionService Successfully updated tunnel connection for node with ID XYZ<\/code><\/pre>\n<p>Dagegen war diese Fehlermeldung, welche seltener (wohl beim Anlegen der Verkn\u00fcpfung) ins Log geschrieben wurde, zwar genau so hilfreich:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">Unrecognized error while attempting to retrieve status of Application Link XXX<\/code><\/pre>\n<p>Allerdings zumindest ehrlich. Auf dem Niveau ist Atlassian angekommen, dass man sich freut, wenn Logs die Wahrheit erz\u00e4hlen&#8230; Willkommen in der Welt der <em>Enterprise Software<\/em> vom Marktf\u00fchrer! Ich habe zusammen mit einem auf Atlassian spezialisierten Beratungsunternehmen viel herum probiert. Vor allem \u00fcber das was nicht funktioniert hat wurde mir zunehmend klar, wie die Tunnel funktionieren sollten und warum sie das in der Unternehmensumgebung nicht tun.<\/p>\n<p>Bevor wir zu diesem eher frustrierenden Teil kommen, ein guter Witz von Atlassian. Zur zweiten Fehlermeldung gibt es einen Forumsbeitrag von 2018.<sup data-fn=\"f72b9aeb-f22e-4230-8864-32c004fba09a\" class=\"fn\"><a href=\"#f72b9aeb-f22e-4230-8864-32c004fba09a\" id=\"f72b9aeb-f22e-4230-8864-32c004fba09a-link\">7<\/a><\/sup> Der bezieht sich auf einen Bug in Jira Server, wie ein Atlassian-Mitarbeiter in den Antworten kommunizierte. Dazu schrieb er: Man solle im Ticket abstimmen, damit Atlassian wei\u00df, wie viele das betrifft. Ist ja nicht so, als ob ihr mit dem Kauf von Lizenzen und Wartung (Ohne aktive Wartungslizenz keine Updates!) daf\u00fcr bezahlt, damit die ihre kaputte Software in den Griff bekommen. Das muss sich schon lohnen &#8211; wenn es zu wenige betrifft, bleibt die halt kaputt. Wo kommen wir denn da hin, wenn man f\u00fcr Geld eine funktionierende propriet\u00e4re Software bekommt? Der Fehler wurde \u00fcbrigens bis heute nicht behoben. 6 Monate sp\u00e4ter hat man ihn in ein anderes Ticket verlagert<sup data-fn=\"b705c8eb-a1cc-420c-9d9b-232effaca2d0\" class=\"fn\"><a href=\"#b705c8eb-a1cc-420c-9d9b-232effaca2d0\" id=\"b705c8eb-a1cc-420c-9d9b-232effaca2d0-link\">8<\/a><\/sup>. Wer betroffen ist, hat wohl Pech. Das ist Enterprise Software Level? Ahja&#8230;<\/p>\n<h2 class=\"wp-block-heading\">Wo ist das Problem?<\/h2>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/D8gNu2CX4AAYTEQ_small.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"830\" height=\"600\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/D8gNu2CX4AAYTEQ_small.jpg\" alt=\"\" class=\"wp-image-12833\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/D8gNu2CX4AAYTEQ_small.jpg 830w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/D8gNu2CX4AAYTEQ_small-300x217.jpg 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/D8gNu2CX4AAYTEQ_small-768x555.jpg 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/D8gNu2CX4AAYTEQ_small-498x360.jpg 498w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/D8gNu2CX4AAYTEQ_small-235x170.jpg 235w\" sizes=\"auto, (max-width: 830px) 100vw, 830px\" \/><\/a><figcaption class=\"wp-element-caption\">Quelle: turnoff.us<\/figcaption><\/figure>\n<\/div>\n<p>Bitbucket machte den Anfang &#8211; ein Fehler, wie sich herausstellen sollte: Die Logs zeigen au\u00dfer einer Erfolgsmeldung nichts an. In der Admin-Oberfl\u00e4che lassen sich Debug-Meldungen aktivieren &#8211; nat\u00fcrlich nur global, wer m\u00f6chte schon nicht mit zig Meldungen eines produktiv genutzten Systems geflutet werden? Vor allem, wenn sich darin exakt 0,0 Informationen zum Problem finden. Der einzige Eintrag zu den Tunneln bleibt, dass er sie angeblich regelm\u00e4\u00dfig aktualisiert.<\/p>\n<p>Wir haben also keine Ahnung, wo das Problem sein soll. Da der Atlassian Support bisher auch nicht hilfreich war, wurde blind nach der Nadel im Heuhaufen gesucht. Das ging bis zu einem Jira-Artikel, in dem sich der Tunnel versucht, zum Standardport statt dem \u00fcbergebenen zu verbinden. Ursache laut Atlassian: Man m\u00fcsste bei diesem JVM-Property die Parameter mit Komma statt Leerzeichen trennen<sup data-fn=\"865a7555-9c03-4a11-9252-41488caa8aa2\" class=\"fn\"><a href=\"#865a7555-9c03-4a11-9252-41488caa8aa2\" id=\"865a7555-9c03-4a11-9252-41488caa8aa2-link\">9<\/a><\/sup> &#8211; WTF? Habt ihr schon mal <code class=\"\" data-line=\"\">-Da=1=b=2<\/code> gesehen? Ich habe meine Zweifel. Au\u00dferdem ist in der Installation der Standardport verwendet worden, auf dem nach dem Neustart auch ein Server lauscht. Allerdings greift man blind nach jedem Strohhalm, gebracht hat es nichts.<\/p>\n<h2 class=\"wp-block-heading\">Die Katakomben der Tunnel<\/h2>\n<p>Nachdem sich Bitbucket als Sackgasse erwies, wurde es mit Bamboo probiert. Intern sind die Atlassian-Anwendungen keineswegs so unterschiedlich, wie es Atlassian mit der Oberfl\u00e4che glaubhaft machen m\u00f6chte. Auf diese Inkonsistenz kann man sich verlassen: Im Administrationsbereich unter <strong>System &gt; Log settings<\/strong> hat jemand mitgedacht und Log-Level f\u00fcr verschiedene Namensr\u00e4ume der Atlassian-Komponenten eingebaut<sup data-fn=\"441b1c11-1e75-4157-b3ab-675a46afda6e\" class=\"fn\"><a href=\"#441b1c11-1e75-4157-b3ab-675a46afda6e\" id=\"441b1c11-1e75-4157-b3ab-675a46afda6e-link\">10<\/a><\/sup> &#8211; statt nur eines globalen Schalters, wie bei Bitbucket. Erinnert etwas an WebSphere. Nachdem der Namensraum <code class=\"\" data-line=\"\">com.atlassian.tunnel<\/code> auf <strong>ALL<\/strong> gesetzt wurde,<sup data-fn=\"ed8835a9-957c-482e-91c0-a630ba128b39\" class=\"fn\"><a href=\"#ed8835a9-957c-482e-91c0-a630ba128b39\" id=\"ed8835a9-957c-482e-91c0-a630ba128b39-link\">11<\/a><\/sup> siehe da, wir sehen etwas passieren:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">DEBUG [tunnel-executor:thread-1] [InletsClientProcessFactory] Creating process for executable com.atlassian.tunnel.file.LinuxInletsExecutable@5b7dd3ee with command [.\/inlets, client, --url=******, --upstream=******=http:\/\/127.0.0.1:8093, --token-from=\/bamboo-data\/xyz_token, --strict-forwarding]\nTRACE [tunnel-executor:thread-1] [InletsClientManager] Tunnel Process Monitor status on Before Start: RESTARTING\nDEBUG [tunnel-executor:thread-2] [InletsClientManager] [INLETS CLIENT] Upstream: ****** =&gt; http:\/\/127.0.0.1:8093\nDEBUG [tunnel-executor:thread-2] [InletsClientManager] [INLETS CLIENT] level=info msg=&quot;Connecting to proxy&quot; url=&quot;******\/tunnel&quot;\nDEBUG [tunnel-executor:thread-2] [InletsClientManager] [INLETS CLIENT] level=error msg=&quot;Failed to connect to proxy. Empty dialer response&quot; error=&quot;dial tcp 185.166.143.26:443: connect: connection refused&quot;\nDEBUG [tunnel-executor:thread-2] [InletsClientManager] [INLETS CLIENT] level=error msg=&quot;Remotedialer proxy error&quot; error=&quot;dial tcp 185.166.143.26:443: connect: connection refused&quot;<\/code><\/pre>\n<p>Fangen wir unten an. Der Tunnel versucht eine Verbindung zu 185.166.143.26:443. Das ist eine \u00f6ffentliche IP-Adresse, die zu AWS geh\u00f6rt. Das weist auf Atlassian hin, da sie keine Rechenzentren selbst betreiben. Sondern sich f\u00fcr die Atlassian Cloud blo\u00df bei Amazon etwas gemietet haben. Ruft man die IP-Adresse per HTTP im Browser auf, bekommt man mit ung\u00fcltigem Zertifikat eine Fehlerseite von Atlassian.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/grafik-5.png\"><img loading=\"lazy\" decoding=\"async\" width=\"634\" height=\"633\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/grafik-5.png\" alt=\"\" class=\"wp-image-12836\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/grafik-5.png 634w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/grafik-5-300x300.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/grafik-5-150x150.png 150w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/grafik-5-361x360.png 361w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/grafik-5-170x170.png 170w\" sizes=\"auto, (max-width: 634px) 100vw, 634px\" \/><\/a><\/figure>\n<\/div>\n<p>Warum kommt der nicht raus? Per <code class=\"\" data-line=\"\">-Dhttps.proxy*<\/code> Property ist der Proxyserver gesetzt (<code class=\"\" data-line=\"\">https.proxyHost<\/code>, <code class=\"\" data-line=\"\">https.proxyPort<\/code>, &#8230;) und dort wurden die AWS-Adressen zur Atlassian Cloud bereits freigeschaltet. Per <code class=\"\" data-line=\"\">curl<\/code> auf dem Server funktioniert die Verbindung zum in der Doku angegebenen Host tunnel.services.atlassian.com problemlos. Warum das so ist, verr\u00e4t die erste Zeile direkt: Da wird eine ausf\u00fchrbare Datei namens <code class=\"\" data-line=\"\">inlets<\/code> aus der JVM heraus gestartet. Sieht &#8230; abenteuerlich aus. Schauen wir uns die mal genauer an. Im Anwendungsverzeichnis liegen drei Jars mit <em>tunnel<\/em> im Name:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">find . -name &#039;*tunnel*&#039;\natlassian-bamboo\/WEB-INF\/lib\/atlassian-tunnel-1.8.8.jar\nlicenses\/com.atlassian.tunnel--atlassian-tunnel--1.8.8.txt\ntemp\/plugin.13183305074016480489.tunnel-client-plugin-1.2.0.jar<\/code><\/pre>\n<p>Jars sind technisch ZIP-Archive, daher kann man sie mit <code class=\"\" data-line=\"\">unzip<\/code> auspacken und hinein schauen:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">unzip temp\/plugin.13183305074016480489.tunnel-client-plugin-1.2.0.jar -d \/tmp\/tunnel-plugin\/<\/code><\/pre>\n<p>In der ersten Debug-Meldung steht, wie die Klasse hei\u00dft. Damit werden wir f\u00fcndig:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">find \/tmp\/tunnel-plugin\/ -name &#039;*LinuxInletsExecutable*&#039;\n\/tmp\/tunnel-plugin\/com\/atlassian\/tunnel\/file\/LinuxInletsExecutable.class<\/code><\/pre>\n<p>Nachdem ich die inlets Bin\u00e4rdatei nicht im Dateisystem des Anwendungsservers finden konnte, liegt sie bestimmt in der Jar. Tats\u00e4chlich liegt in inlets-binaries eine 13 MB gro\u00dfe Datei &#8211; vom Juni 2023, hat also wohl schon l\u00e4nger keiner mehr angefasst. <a href=\"https:\/\/u-labs.de\/portal\/massenhafte-sicherheitsluecken-in-atlassian-software-wie-unsicher-sind-jira-confluence-bitbucket-bamboo-co\/\">Das Pflegen von Abh\u00e4ngigkeiten geh\u00f6rt bekannterweise nicht zu den St\u00e4rken des Konzerns<\/a>.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">l \/tmp\/tunnel-plugin\/inlets-binaries\/inlets -lh\n-rw-r--r-- 1 user user 13M Jun  1  2023 \/tmp\/tunnel-plugin\/inlets-binaries\/inlets<\/code><\/pre>\n<p>Es handelt sich dabei um inlets.dev. Die Version wurde f\u00fcr Atlassian gebaut. Entweder hat Atlassian den Dienst lizenziert, oder das Unternehmen gekauft. Machen sie ja gerne mal, einige ihrer Software wurde dazu gekauft.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\"> .\/inlets\n _       _      _            _\n(_)_ __ | | ___| |_ ___   __| | _____   __\n| | &#039;_ \\| |\/ _ \\ __\/ __| \/ _` |\/ _ \\ \\ \/ \/\n| | | | | |  __\/ |_\\__ \\| (_| |  __\/\\ V \/\n|_|_| |_|_|\\___|\\__|___(_)__,_|\\___| \\_\/\nExpose your local endpoints to the Internet by creating a tunnel between\nyour local machine and an exit-server with its own public IP address.\nUsage:\n  inlets [flags]\n  inlets [command]Available Commands:\n  client      Start the tunnel client.\n  completion  generate the autocompletion script for the specified shell\n  help        Help about any command\n  server      Start the tunnel server.\n  version     Display the clients version information.Flags:\n  -h, --help   help for inletsUse &quot;inlets [command] --help&quot; for more information about a command.\n\n.\/inlets version\n _       _      _            _\n(_)_ __ | | ___| |_ ___   __| | _____   __\n| | &#039;_ \\| |\/ _ \\ __\/ __| \/ _` |\/ _ \\ \\ \/ \/\n| | | | | |  __\/ |_\\__ \\| (_| |  __\/\\ V \/\n|_|_| |_|_|\\___|\\__|___(_)__,_|\\___| \\_\/\nVersion: 2.1.0-atlassian1-31-g33b2f95\nGit Commit: 33b2f95625ada3d1346652aeb5ec8e73edcf7388<\/code><\/pre>\n<p>Diese Software macht genau das, was ich oben vermutet hatte: Eine WebSocket-Verbindung zu einem fremden Server aufbauen und \u00fcber diese Verbindung Anfragen in umgekehrter Reihenfolge erm\u00f6glichen &#8211; ohne eben daf\u00fcr eingehende Ports zu \u00f6ffnen. Nun wird auch klar, wieso ein Port als Property mitgegeben wird, denn Inlets agiert als Mittelsmann. Bamboo (oder andere On-Prem Software) verbindet sich dar\u00fcber mit der Atlassian Cloud, welche wiederum mit der lokalen Instanz kommunizieren kann.<\/p>\n<h2 class=\"wp-block-heading\">Warum funktioniert das nicht?<\/h2>\n<p>Wie anfangs erw\u00e4hnt, ist der Proxy f\u00fcr die Bamboo JVM konfiguriert gewesen. Sie hat auch <a href=\"https:\/\/u-labs.de\/portal\/eigene-tls-zertifikate-in-java-anwendungen-alles-was-du-zum-truststore-wissen-solltest\/\" data-type=\"post\" data-id=\"11345\">einen trustStore bekommen<\/a>, der das MITM Root-Zertifikat vom Proxy enth\u00e4lt. Dieses Konstrukt funktioniert nachweislich im Atlassian Marketplace der Instanz. Allerdings bekommt nur die Bamboo JVM diese Parameter. An einen daraus gestarteten Unterprozess werden sie nicht vererbt. Um sie zu setzen, m\u00fcsste ich den Start des Prozesses ver\u00e4ndern &#8211; bei propriet\u00e4rer Software nicht in vern\u00fcnftigem Ausma\u00df m\u00f6glich. Wer sehr viel Zeit hat, kann die Klassen dekompilieren und mit Javassist manipulieren. <\/p>\n<p>Halte ich f\u00fcr keinen brauchbaren Workaround, daher ein anderer Ansatz: Im Systemd-Dienst <code class=\"\" data-line=\"\">http(s)_proxy<\/code> setzen. Zur Sicherheit auch immer in Gro\u00dfbuchstaben f\u00fcr Windows. Ist theoretisch zwar egal, da wir auf einem GNU\/Linux Server unterwegs sind, aber bei Atlassian wei\u00df man ja nie. Das Problem wird damit zwar nicht gel\u00f6st, doch wir erhalten eine neue Fehlermeldung:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">level=error msg=&quot;Failed to connect to proxy. Empty dialer response&quot; error=&quot;x509: certificate signed by unknown authority&quot;<\/code><\/pre>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/got-a-new-error-progress.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"400\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/got-a-new-error-progress.jpg\" alt=\"\" class=\"wp-image-12845\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/got-a-new-error-progress.jpg 400w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/got-a-new-error-progress-300x300.jpg 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/got-a-new-error-progress-150x150.jpg 150w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/got-a-new-error-progress-360x360.jpg 360w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/got-a-new-error-progress-170x170.jpg 170w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/a><\/figure>\n<\/div>\n<p>Die Anwendung unterst\u00fctzt also diese Variablen und verwendet den Proxy. Da ihr der angepasste Java Truststore fehlt, vertraut sie dem MITM Zertifikat vom Proxy nicht. Nachdem Atlassian alles in Java macht, hatte ich darauf spekuliert, dass es auch eine Java-Anwendung sein k\u00f6nnte. Nat\u00fcrlich ist es das nicht, sondern Go. Sonst k\u00f6nnte man den globalen lib\/security\/cacerts Store um das Root-Zertifikat erweitern und wir m\u00fcssten gar keinen eigenen angeben, weil der standardm\u00e4\u00dfig geladen wird. Wie funktioniert das bei Go? Er sucht in den Zertifikatsdateien der GNU\/Linux-Distributionen.<sup data-fn=\"fd800d5a-342c-44d8-b569-16347aa88123\" class=\"fn\"><a href=\"#fd800d5a-342c-44d8-b569-16347aa88123\" id=\"fd800d5a-342c-44d8-b569-16347aa88123-link\">12<\/a><\/sup> Somit k\u00f6nnen wir das Root-Zertifikat im Betriebssystem hinterlegen und mit update-ca-certificates<sup data-fn=\"8a389c64-6959-4b44-a808-ff430a0a0d2e\" class=\"fn\"><a href=\"#8a389c64-6959-4b44-a808-ff430a0a0d2e\" id=\"8a389c64-6959-4b44-a808-ff430a0a0d2e-link\">13<\/a><\/sup> dort hin verteilen &#8211; \u00fcberraschend vern\u00fcnftig. Anschlie\u00dfend konnte der Tunnel sich mit den Cloudservern verbinden, sodass Anwendungsverkn\u00fcpfungen dar\u00fcber eingerichtet werden k\u00f6nnen.<\/p>\n<h2 class=\"wp-block-heading\">Diese <em>Qualit\u00e4t<\/em> vom Marktf\u00fchrer hat Tradition!<\/h2>\n<p>Mich wundert das kaum. <a href=\"https:\/\/u-labs.de\/portal\/massenhafte-sicherheitsluecken-in-atlassian-software-wie-unsicher-sind-jira-confluence-bitbucket-bamboo-co\/\">Die haben nicht mal ein Konzept f\u00fcr regelm\u00e4\u00dfige Aktualisierungen ihrer Drittanbieter-Abh\u00e4ngigkeiten, die sie reichlich einsetzen<\/a>. Warum soll ihr eigener Code mehr taugen? Path Traversal z.B. bekommen sie auch selbst hin &#8211; Der Fisch stinkt vom Kopf her. An einen Totalschaden (Remote Code Execution!) alle paar Wochen in einer ihrer Software hat man sich inzwischen gew\u00f6hnt. Hier liefert Atlassian: Im M\u00e4r 2024 alleine in Jira \u00fcber 20 (!) Sicherheitsl\u00fccken. Viele in Drittanbieter-Bibliotheken von 2022\/2023. Highlight: RCEs von Oktober 2022 (!!).<sup data-fn=\"8c71b859-833f-476c-a7f4-cc34f0c829b6\" class=\"fn\"><a href=\"#8c71b859-833f-476c-a7f4-cc34f0c829b6\" id=\"8c71b859-833f-476c-a7f4-cc34f0c829b6-link\">14<\/a><\/sup> Atlassian hat die fast 1,5 Jahre (!!!) bei sich einstauben lassen, bis sie sich zu einem Update erbarmten. Tja, da haben wohl leider nicht genug zahlende Kunden abgestimmt. Werden sie halt gehackt, selbst schuld&#8230; Ja ne, ist klar.<\/p>\n<p>Hier bei den Tunneln finde ich ja das geilste: Die Erweiterung daf\u00fcr gibt es seit 2 Jahren. Atlassians Plan zum Cloudzwang ist seit 2020 bekannt und seit 15.02.2024 sind alle Server-Lizenzen von Updates &amp; Support abgeschnitten.<sup data-fn=\"1afa0b66-4afb-496d-99d5-5deb612afc3c\" class=\"fn\"><a href=\"#1afa0b66-4afb-496d-99d5-5deb612afc3c\" id=\"1afa0b66-4afb-496d-99d5-5deb612afc3c-link\">15<\/a><\/sup> Theoretisch m\u00fcsste also seit \u00fcber einem Monat alles migriert sein. Wie zur H\u00f6lle kann es sein, dass dieses Ding bis heute zusammen gemurkst ist, wie von einem IT Azubi f\u00fcr den eigenen privaten Heimserver? Da w\u00e4re so was okay. Aber an gr\u00f6\u00dfere Unternehmen, wo Proxys, Endpoint Protection und anderes Zeugs eher Regel als Ausnahme ist? Geht gar nicht. F\u00fcr den Agenten haben sie die Java Standard-Properties sogar dokumentiert.<sup data-fn=\"ac9031a3-f434-4fb4-9845-04b424c362e9\" class=\"fn\"><a href=\"#ac9031a3-f434-4fb4-9845-04b424c362e9\" id=\"ac9031a3-f434-4fb4-9845-04b424c362e9-link\">16<\/a><\/sup> Bei den Tunneln wird das a) v\u00f6llig \u00fcber den Haufen geworfen und b) hat man das Error-Handling vergessen? Was ist mit Exit-Code auswerfen und wenigstens bei ungleich 0 einen Fehler ins Log schreiben? Oder der andere, der immer erfolgreich ins Log schreibt?<\/p>\n<h2 class=\"wp-block-heading\">Wir dr\u00fccken es wem anders aufs Auge<\/h2>\n<p>Da kann man sich nur wieder mal den Kopf fassen. Wir reden hier schlie\u00dflich nicht von einer Rakete zum Neptun, die ein wenig ihr Ziel verfehlt hat. Sondern von grundlegenden Dingen. Es ist seit Ewigkeiten bekannt: Man ruft kein externes Programm auf, ignoriert s\u00e4mtliche R\u00fcckmeldungen von dem, pr\u00fcft auch sonst nicht ob irgendwas davon funktioniert hat und schreibt am Ende pauschal immer <em>success<\/em> ins Log. Genau so was w\u00fcrde man auf eine Liste von &#8222;mach das blo\u00df nicht&#8220; Dingen als \u00fcberspitztes Negativbeispiel setzen. <\/p>\n<p>Bei einem FiAE Azubi w\u00fcrde man \u00fcberlegen, ob man den f\u00fcr solchen Murks durchfallen lassen sollte. Ein Konzern wie Atlassian zeigt seinen Kunden den Mittelfinger und lagert das einfach an die aus. \u00dcber 2 Tage Fehleranalyse zahlt schlie\u00dflich der, w\u00e4hrend Atlassian sich das Geld f\u00fcr vern\u00fcnftige Qualit\u00e4t und Qualit\u00e4tssicherung seit offensichtlich l\u00e4ngerem spart. Als Kunde von denen k\u00e4me ich mir nun gaaaaanz dezent \u00fcber den Tisch gezogen vor. Aber hey, ist in seiner Branche der Marktf\u00fchrer. <a href=\"https:\/\/u-labs.de\/portal\/6-windows-funktionen-die-microsoft-von-linux-geklaut-hat\/\" data-type=\"post\" data-id=\"12500\">Wenn der das nicht kann, dann doch schlie\u00dflich keiner, oder<\/a>?<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/just-keep-coding_always-fix-later_cut.jpeg\"><img loading=\"lazy\" decoding=\"async\" width=\"1016\" height=\"1024\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/just-keep-coding_always-fix-later_cut-1016x1024.jpeg\" alt=\"\" class=\"wp-image-12868\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/just-keep-coding_always-fix-later_cut-1016x1024.jpeg 1016w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/just-keep-coding_always-fix-later_cut-298x300.jpeg 298w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/just-keep-coding_always-fix-later_cut-150x150.jpeg 150w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/just-keep-coding_always-fix-later_cut-768x774.jpeg 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/just-keep-coding_always-fix-later_cut-357x360.jpeg 357w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/just-keep-coding_always-fix-later_cut-169x170.jpeg 169w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/03\/just-keep-coding_always-fix-later_cut.jpeg 1047w\" sizes=\"auto, (max-width: 1016px) 100vw, 1016px\" \/><\/a><\/figure>\n<\/div>\n<h2 class=\"wp-block-heading\">Quellen und weiterf\u00fchrende Informationen<\/h2>\n<ol class=\"wp-block-footnotes\">\n<li id=\"b84dbe92-3769-4bd2-87b2-0bb20f957e1e\">https:\/\/www.golem.de\/news\/atlassian-ausfall-von-jira-und-confluence-dauert-noch-zwei-wochen-an-2204-164566.html <a href=\"#b84dbe92-3769-4bd2-87b2-0bb20f957e1e-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 1 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"d60c7b97-1b87-4f16-992a-842a9aa921dd\">https:\/\/confluence.atlassian.com\/bamboo\/linking-to-another-application-360677713.html <a href=\"#d60c7b97-1b87-4f16-992a-842a9aa921dd-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 2 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"3b519e85-8885-49d0-8a43-3bd00a9bfd03\">https:\/\/support.atlassian.com\/jira-cloud-administration\/docs\/use-applinks-to-link-to-atlassian-products\/ <a href=\"#3b519e85-8885-49d0-8a43-3bd00a9bfd03-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 3 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"a8f887c2-41f6-46cd-a9bb-dc5bd5697917\">https:\/\/support.atlassian.com\/organization-administration\/docs\/install-application-tunnels-from-atlassian-marketplace\/ <a href=\"#a8f887c2-41f6-46cd-a9bb-dc5bd5697917-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 4 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"0df1ed2d-e955-4338-83a8-94508693c714\">https:\/\/support.atlassian.com\/organization-administration\/docs\/configure-required-connections-and-upstream-ports\/ <a href=\"#0df1ed2d-e955-4338-83a8-94508693c714-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 5 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"8b9f22ae-9e86-4d64-99bf-88d34fc99fb8\">https:\/\/support.atlassian.com\/organization-administration\/docs\/create-an-application-tunnel-to-your-self-managed-instance\/ <a href=\"#8b9f22ae-9e86-4d64-99bf-88d34fc99fb8-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 6 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"f72b9aeb-f22e-4230-8864-32c004fba09a\">https:\/\/community.atlassian.com\/t5\/Jira-Software-questions\/Jira-Application-Link-Health-Check-fails-for-no-reason\/qaq-p\/851176 <a href=\"#f72b9aeb-f22e-4230-8864-32c004fba09a-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 7 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"b705c8eb-a1cc-420c-9d9b-232effaca2d0\">https:\/\/ecosystem.atlassian.net\/browse\/ATST-923 <a href=\"#b705c8eb-a1cc-420c-9d9b-232effaca2d0-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 8 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"865a7555-9c03-4a11-9252-41488caa8aa2\">https:\/\/confluence.atlassian.com\/jirakb\/tunnelled-application-link-error-no-response-was-received-from-the-url-you-entered-it-may-not-be-valid-please-fix-the-url-below-if-needed-and-click-continue-1282249432.html <a href=\"#865a7555-9c03-4a11-9252-41488caa8aa2-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 9 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"441b1c11-1e75-4157-b3ab-675a46afda6e\">https:\/\/confluence.atlassian.com\/bamboo\/logging-in-bamboo-289277239.html <a href=\"#441b1c11-1e75-4157-b3ab-675a46afda6e-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 10 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"ed8835a9-957c-482e-91c0-a630ba128b39\">https:\/\/support.atlassian.com\/organization-administration\/docs\/troubleshoot-application-tunnels\/ <a href=\"#ed8835a9-957c-482e-91c0-a630ba128b39-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 11 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"fd800d5a-342c-44d8-b569-16347aa88123\">https:\/\/stackoverflow.com\/a\/40051432 <a href=\"#fd800d5a-342c-44d8-b569-16347aa88123-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 12 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"8a389c64-6959-4b44-a808-ff430a0a0d2e\">https:\/\/manpages.ubuntu.com\/manpages\/xenial\/man8\/update-ca-certificates.8.html <a href=\"#8a389c64-6959-4b44-a808-ff430a0a0d2e-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 13 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"8c71b859-833f-476c-a7f4-cc34f0c829b6\">https:\/\/confluence.atlassian.com\/security\/security-bulletin-march-19-2024-1369444862.html <a href=\"#8c71b859-833f-476c-a7f4-cc34f0c829b6-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 14 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"1afa0b66-4afb-496d-99d5-5deb612afc3c\">https:\/\/www.atlassian.com\/migration\/assess\/journey-to-cloud <a href=\"#1afa0b66-4afb-496d-99d5-5deb612afc3c-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 15 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"ac9031a3-f434-4fb4-9845-04b424c362e9\">https:\/\/confluence.atlassian.com\/bamkb\/how-to-configure-an-outbound-proxy-for-a-bamboo-remote-agent-1044107769.html <a href=\"#ac9031a3-f434-4fb4-9845-04b424c362e9-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 16 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Bamboo, Bitbucket &amp; co. mit Atlassian Cloud-Instanzen verkn\u00fcpfen? Dank der Tunnel gar kein Problem &#8211; zumindest in der Theorie. Praktisch ist die Software bis heute nicht ausgereift, obwohl es 5 nach 12 ist. Ich habe mich bei einer Migration damit besch\u00e4ftigt und per Reverse Engineering die Fallstricke in einer typischen Unternehmensumgebung ermittelt. Dieser Beitrag zeigt, &#8230;<\/p>\n","protected":false},"author":5,"featured_media":12903,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"[{\"content\":\"https:\/\/www.golem.de\/news\/atlassian-ausfall-von-jira-und-confluence-dauert-noch-zwei-wochen-an-2204-164566.html\",\"id\":\"b84dbe92-3769-4bd2-87b2-0bb20f957e1e\"},{\"content\":\"https:\/\/confluence.atlassian.com\/bamboo\/linking-to-another-application-360677713.html\",\"id\":\"d60c7b97-1b87-4f16-992a-842a9aa921dd\"},{\"content\":\"https:\/\/support.atlassian.com\/jira-cloud-administration\/docs\/use-applinks-to-link-to-atlassian-products\/\",\"id\":\"3b519e85-8885-49d0-8a43-3bd00a9bfd03\"},{\"content\":\"https:\/\/support.atlassian.com\/organization-administration\/docs\/install-application-tunnels-from-atlassian-marketplace\/\",\"id\":\"a8f887c2-41f6-46cd-a9bb-dc5bd5697917\"},{\"content\":\"https:\/\/support.atlassian.com\/organization-administration\/docs\/configure-required-connections-and-upstream-ports\/\",\"id\":\"0df1ed2d-e955-4338-83a8-94508693c714\"},{\"content\":\"https:\/\/support.atlassian.com\/organization-administration\/docs\/create-an-application-tunnel-to-your-self-managed-instance\/\",\"id\":\"8b9f22ae-9e86-4d64-99bf-88d34fc99fb8\"},{\"content\":\"https:\/\/community.atlassian.com\/t5\/Jira-Software-questions\/Jira-Application-Link-Health-Check-fails-for-no-reason\/qaq-p\/851176\",\"id\":\"f72b9aeb-f22e-4230-8864-32c004fba09a\"},{\"content\":\"https:\/\/ecosystem.atlassian.net\/browse\/ATST-923\",\"id\":\"b705c8eb-a1cc-420c-9d9b-232effaca2d0\"},{\"content\":\"https:\/\/confluence.atlassian.com\/jirakb\/tunnelled-application-link-error-no-response-was-received-from-the-url-you-entered-it-may-not-be-valid-please-fix-the-url-below-if-needed-and-click-continue-1282249432.html\",\"id\":\"865a7555-9c03-4a11-9252-41488caa8aa2\"},{\"content\":\"https:\/\/confluence.atlassian.com\/bamboo\/logging-in-bamboo-289277239.html\",\"id\":\"441b1c11-1e75-4157-b3ab-675a46afda6e\"},{\"content\":\"https:\/\/support.atlassian.com\/organization-administration\/docs\/troubleshoot-application-tunnels\/\",\"id\":\"ed8835a9-957c-482e-91c0-a630ba128b39\"},{\"content\":\"https:\/\/stackoverflow.com\/a\/40051432\",\"id\":\"fd800d5a-342c-44d8-b569-16347aa88123\"},{\"content\":\"https:\/\/manpages.ubuntu.com\/manpages\/xenial\/man8\/update-ca-certificates.8.html\",\"id\":\"8a389c64-6959-4b44-a808-ff430a0a0d2e\"},{\"content\":\"https:\/\/confluence.atlassian.com\/security\/security-bulletin-march-19-2024-1369444862.html\",\"id\":\"8c71b859-833f-476c-a7f4-cc34f0c829b6\"},{\"content\":\"https:\/\/www.atlassian.com\/migration\/assess\/journey-to-cloud\",\"id\":\"1afa0b66-4afb-496d-99d5-5deb612afc3c\"},{\"content\":\"https:\/\/confluence.atlassian.com\/bamkb\/how-to-configure-an-outbound-proxy-for-a-bamboo-remote-agent-1044107769.html\",\"id\":\"ac9031a3-f434-4fb4-9845-04b424c362e9\"}]"},"categories":[78],"tags":[1069],"class_list":["post-12819","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software","tag-atlassian"],"_links":{"self":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/12819","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/comments?post=12819"}],"version-history":[{"count":53,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/12819\/revisions"}],"predecessor-version":[{"id":12892,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/12819\/revisions\/12892"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media\/12903"}],"wp:attachment":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media?parent=12819"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/categories?post=12819"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/tags?post=12819"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}