From 41f7f4cbb591fc173faad25f4b99528bbbdaa661 Mon Sep 17 00:00:00 2001 From: Johannes Passing Date: Mon, 16 Dec 2024 13:30:37 +1100 Subject: [PATCH 1/2] Draft --- doc/site/sources/docs/connect-sqlserver.md | 15 +++++++++++ .../docs/images/access-sqlserver-tunnel.png | Bin 25883 -> 25319 bytes doc/site/sources/docs/setup-cloudsql.md | 6 +++++ doc/site/sources/docs/setup-iap.md | 24 +++++++++--------- doc/site/sources/mkdocs.yml | 4 +-- 5 files changed, 35 insertions(+), 14 deletions(-) create mode 100644 doc/site/sources/docs/setup-cloudsql.md diff --git a/doc/site/sources/docs/connect-sqlserver.md b/doc/site/sources/docs/connect-sqlserver.md index 16fe5572b..473ea6773 100644 --- a/doc/site/sources/docs/connect-sqlserver.md +++ b/doc/site/sources/docs/connect-sqlserver.md @@ -27,6 +27,21 @@ You can use IAP Desktop to access SQL Server in two ways: 1. You can let IAP Desktop [open a tunnel](#open-a-tunnel). You can then use any tool to connect to that tunnel and the tunnel remains open until you close IAP Desktop. +## Prepare your project + +Depending on how you've deployed SQL Server, you might need to configure the +[Cloud SQL Auth Proxy :octicons-link-external-16:](https://cloud.google.com/sql/docs/mysql/sql-proxy) +before you can connect. + +=== "Compute Engine" + + You don't need the Cloud SQL Auth Proxy. + +=== "Cloud SQL" + + You must set up a [Cloud SQL Auth Proxy VM](setup-cloudsql.md) to connect to SQL Server. + The extra VM is necessary because IAP-TCP doesn't support direct connections to Cloud SQL + instances. ## Connect SQL Server Management Studio diff --git a/doc/site/sources/docs/images/access-sqlserver-tunnel.png b/doc/site/sources/docs/images/access-sqlserver-tunnel.png index ddf8fff7fd88cd5f95e39c7cbb6de4a37ef6ef3d..eec8eae3687aff569ab90ca481b1237cba03367c 100644 GIT binary patch literal 25319 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 o}zz^4J!_=!r^Xa*%jt zmKQXy^cZMRXFtXwet5GY$f{d5jU?S<#tD(~e}N3s4)mYFl44@jEtdnSxdRmFS97fU z6fS(QMZLqTeAiA|6gxn~KfwH7g5Ql(j}d$@zO#-4Y+Kv6UCck~ImL=dA1D#}WF5w0 z1fboCpM?f}MMA#L1m8XPd~hEO^uOMEL45K~toDUERx^R@z0c_ZL|R#@LgLf6{{wJ+ B0IC20 literal 25883 zcmb4qWmFtnw{7s?65KTecefCn;7;)1?oLB+cZZ-MxI=Jvg1dVlSa5F|UUAN+@7^Ep zWei4|qN{4}U3<+n=Ul78l@z2J>D~t5;C&ui=3s!;x>|fd8PJ zRir+=svIXi0Dgfr7nK)%^{OTo`Oydt_#M$fTHE>6E41F1AE-h5Vv|>|OsZwXMb$j? z|EwYV=$fXBoEab?J7Mlu<}%g6QZHUT-e$_Q2iw<0Jg0< z#o<8B5S0#{Ot+j7=b%6)(WU7f^ifXahvxdRXVALy_-OhtpYsT{ z^YH1&Z_{zl30JcWz6sCu+pnrlwwIv5A!o4cQ#bL?RsTh6G}MXBO>$XT+0mNEM4Jth z=RX(s?NLEKex3bKAna*y-3`~1y&13M14IBKj05g0aiIn?Izhm^p9b-kLS{OTOjhQh z#CoTzGQNoe|HPs>48p_0!gSdT$tfxG3-DPnFfo-?Q1F3c@95xBfUhKB!@yHgQp!d^ z!C+!y()54v2mY2ID`41E?5bF>xOB8r1RPg3`p97DfP^J}Is&dKKQz=+S@4gPWmb8P zopV%1lw~GVDce)Oj&~xoJK&)056h{7E#jL5i-+*a-VETW8B5H#BAU1&cln}hnTA1`1*ZFpg$}o zX0(tc9Ljn37m#i(YA+IQQis$$6mqKZ{RhJ}suQVS(;q7b5(XD2x)}@U%ay14M^jM6 z*a==H*iz4df`zTsKQ5fDy*Y_M!tzx;V!Fna z_=CfU<&;@e9wK60$xeRcY#BO}2XU%Gyrc6#n(J~ZPaP)7)ImB=Jg}6z3iJFzXgV8I zTA{&8=K+p!n#OhnK^;08xu%7D_Mc{*Q9jEj^R>S1 z4nlujYH2-h82!m2eC{~UJjqo*;*CiQW9N~X;O{yf?c&YPa1N<_sHys0dnlBY^t^Nk zC<>y$>P$X?(OqOhr-&VKqwsUF6HJ<1zC+YD1j{td4^)|jpt?8oKaXcdq@O7$vw+$? z#v8J+43J6D|3DXdu+{bd_PFUh382$zbkNkrF#5L840~CA@I7_&kS114!&<4kUvIAi zEnQMvTn%3Z2|vN~&32Kd-yYeO^`WR3f`YHR>1H(dhTXTsCLBBSC~Odv(aFi##2!OzXJUj-R{U(5!&3 zhjI*yV=BR|&(PZGoi@}dvv&^cPAMXn7HCyqdXfCP}$-o&yF$Dh= z$Kbz1ee{2ccr{$;5a!2C)#rdj1%A;~MUWNdiSPQ?q{_ic?)mc{0%wnx?wi)}uEX3R zHS2O|;LmMEW#?(yLX2#ubho77?#@kX_s}u6M6ZpU2T{%SKV@-{A02PJ2`)%g*u9<$ zO*;KBF42dKR(hXSozHj@uo@w#LYUF=+CN!6&a*{ zns`EL0UM(?#M*kkHlL^*Y6amG8C*(1KsFoeK~+g|v5%Rpw?46aQoacj_ghT#_|<}) zM6DP-15)2|AeUQu?{do5rAU2G#KkF(q{ExfDsS)!K#L{ zmmR<1kB%8_OSKx>Elu~di4d7@3CePcE=-A5s~B}>BPCq*C-du*x3M;57C$hDx@P1nQxglnFrh5N$<%Yu`jhhhs}bCkqyy`HRCpQ|;(X8kX*P6h zjMASR;{-p1hTEGTt?rr0Z&Poxcs8^JSDyHv(;@M8*z-+-=b-+tfa;d|Wm-D&EieNbk}&0xcE&#Jw|0+$utjd+gn z^u%J)aqG{3A^%SSfpl-KH$s=og|(y}Sa_Z8-N{cY9tDcIHZtvyIN{%Po__T)pAuG> zn#OMIEP0eKo7m>RY@|utK%*o~DR=kcWJjd>!w`=a?v=T~n}uT@{$SK{!d_J|lhNBS zCwN<0mwn_A{M0?u9jvM+TsyrR>stD}!XbA4b-gj!>a-_C&uVGLw2f>+B*#Y2(~Pr& z;qpBs4GFEBF$Qh^K|reU`NO)e`N5O?$1m1sSX0ILTf!)gF*#v$)j!fj{1EIuHYR2@ z#~kyBEeg7YGR@JM>r>PrcyHU1`8`2A_626B=zO=-icELvhL9{%Uim(fmCY)bO{Wml zI)XL^YKf|JqxHPB2{wY6Dj+9EKO2Cx$;hcWa!*Emcn>kwb$XMpO}x|@>KBzs3Bj8t zA8~ueuh{dRk@p`kOt{TL0Cu#qU*fa;N+o0bt0DnBKNfN0g?)IGX&%E~cb5o*@n6E< zSD0qTr16is+p}%lXZb;t55KiZ2098>8l!!2m{%Is>O?b4I%qEW=lX{R%;QO% z3Xho5vo{$RARG(k!)sF7SIU&AeyU8?Y=+jJV39%)0wYXPw8%bH`^-w(lE5&{>S<0N?Vj|*21*kK<~s4q z!B#jo=qZM}!@0gRls{SY?z)RKj4$BVzXiP0l;rDu$riz3|K@B+@8K%9nCilv{+q}B zBY*sV)4#j=pZ;eIdl;C?zG=Vii}}RGztLHCou$v?jj>VYuRehOzyj=%ujeh||KyJU zzGr?t>QjM}G)4Y)ifESuN&uS(c255o84vCEot-x|3^S&0A~rf@VMUA;WHZaHsc+(o z&ysalOFr`3Wf+t`zh$ZTYB(=0lO>nv8TRhkB+bZ!s8QGaQR{01VpD+|rCElm%FXY! zG^g`Zhl8B4^LlE5IH_C3h|^m$F3jCoQ}mmyy>UEOB|~&V6Rks&j8QT1d-Fwktk`Gv zsF+yN=wLzQi3n$rQ?^hP;@?erEj#Ds96m+tpUiL0MPUNr@_XXCqceXUuLrIll^=fr zt>O=meJNG!2#jR*MPr)2a`=uguc$nzH&5WV>h*cgdrV6Moh&4?>WPt=?R0M1aRF^J z;GmdYa<0KG_g7I>1{J06b5Ko8-P4(X-2LuKm$^dM=4zwka>Sa)YQ}Trg2O!Azzvu? z{gP&NFz>V<0@67hG!hodvbfShuxfQdpT{!P8pC8~WVg(&zM-1?b2%U{-pp}~(mTrH zt#tj6*bn>x@rv03?rQ_sk_WXEsnl4t;E1s0YKFYc{er8+? z#m@8;^~hRYPePpfs6(@7n+nrutKXO1Y@NXOnv~nbQ*71kGj-bA^kC$e22=RH$@{fi zw%}VV&keNG-$l~Z8{*$atOBHYw5r*W6sX@T1h*6P5XPdLd}Zx@pCr(Ga+P*0$LEUW zp>?Fz&*scZh!%Kjyti3xa^qVIDjYtq5y}oD&gB?p6n~O0+vd!c^T~l@P;#)Mr^tU~ zJANA;^z_K>wq-F|$84=;zCI#yPsrV8@WXH%Pktry>5-n)vp-LmY7k!@6YnG0YsqPwR7TkYI<6mx#PGmsP)b1ON)!OH7$v@ezs&1*<+yyQvica87tcT`dwRZTR*mZdE z7uqaWG(hMzZ1}OQD;o@uO3}{9vg}5yz;sQg#uvAgtLx}fi*H5!O(?&z6RFV7n2=Kb z6yft}`%w=j3q;kno*tT=6h;wGB18;PwT&2pzcC{JnT0vdN`01Y3~ZMbk8xs}{2q>s zZfMNi`F#WwCpiCteHLEq#`bm7}vz`Zj+5sh~>ee?3$7d zdY}H`u(l{*H3XKd9y;W1^aFo7JfF0#@BOZq$MX|pvC*Dv-R~K6yw<9@z^7ejHdYM{ zZ|&XadNQ~@5qo@tRfFbb$IgczGyj{ey9b?=`^IlsM9iGH90Gc{#}a%D#S)r;+F2ir z-Gjgs`no77ex%m!V#Uf?kpA4o>II1OU4?CfJ>KBuP>Q=_-g3wol-FGs4Ek(U(rPOi zemb1vJS~Fb*isF`A;BQ}HrQY}HiIB=vGJLF^g?I{L9{1>o;hnfUbw<41n{jk+%nV;f)lNm z(vX&p6PUKkaRD#hwcCX!IYi$llkjmy>1u~B%dSg)MW9s1AQQsz9KNtRb%*${INIkK08Es)J*3l%|7$brI@gCd~Y+@ zwAd!@nys6=EpDcws@Z~jI>;16e8vw7z@=c>=; zn3uPmgh{Q?(tJ2=c97*vo5x`Z?b*$Wz41i0JFERVw9s0`(~|i!>+!Amv!MM$?8N7> zZwTAb?y^@nXwSDiRA*jgzh0>+fDAeZT^eo=H)PKSQ)SOuK5ZPR!m}xWxTZxNFZZHf zhq~{qI(Pb~bBI(uttD+H<_IE^`J4%Rd3iaUbtCLF?ZogbuqPdZN7Fg3ojyA_D7h~S z?&peOq6kN68h~(+aT%kuZv{@P0j_TqIoglH$O5}2!Hh=mVt z3{R2WS9_t~&k(DYulgp2S^SD#2H~%2WkFS}gEicY3Z`$)S4QBqi>{R8JZ66&sgXP}3Yg0TC9u>3o35HQvYw4jBtWtDoKX@vaRS z8?gTpqWFJP1Ou4VxSDt0dX&G#KNM^HxaiQ2ZR`U88ok+XrFYG zH~Qf^*y|f6qw%c4RIX%FbCR!r1b7NN!NV^ z68I5sO#WyW?3bHa{9XMDTIfu6v_5J)}xrioeY%;Z)Q@ zPiuL4z~O%v*CqOZJybnMCR&R!J-Ayx(~&zklgt<;#Eh24h!R7OMA8h}=Yw;9d%C3vO($CW0<(EH1^>l~gTx9Et3CO(jd>$}+^;b0ha!O3!( ze4k#xO_S`8BH(bCmZ3e+8QXB*06mn3=R80D)~Yj$J~?Z$UEyAJo)Gc?t}sRu_Ack; zp30Za6CkvWr<+Ds?yWd6v?y?>GM36valhr5S|hN@COSHbLyJu zT);N?hZ#?^u;%u>IW6H_<5vy4BMX0BW=j5uWM|#cO-x1kv%-E(&tE1xHp5t)Ga~{1 zg`V&XhJ`tmwf>#}o{UqFJl2cH{lA*{+d#;xv3exKDxVZ!v#vUgFqxqOn@iVenC9iw zu)j}L(}zRxK52bp&!Q92I8hnKR2l>DJSSRvXm~{2o3a4CHM8jGQt%(1s;)625mp8) zWOuIIfg=e|&t_&W)QZ=cGqsef5g8d*^8|L$Cy9-P@ThuL2PpG9?{tnRC@G!d@t^|H za8Ei{h*bq#Pl9=mx0v-zJisC#w6dpNk*Vg(u3w^oNVt#k??J3VCnt7#(BDC4TrTMx zQ5_D}s6O4(L&Cw(*YC5)Dg=ApU@H6LYjjncjS-gXHe&?_2AV~S4t&=yEXx1Yo_e0A zsy~p|fp?x~pSp8a1zP(GO`H!MVjHQk8R&>$)Tx~+ZLP}U<1eY^F^bf$x)P>j9L&eP z+_Ojs`{=*CFYHM_iEkxVVM_*-OfHtHp+g$iy^tF>d zV$vRriJb;Uc<&PZ`YEJVLt(NX&7DiPrkkI?EX~{;ZkcF@ko%-1@4qLulMsuZ2c5FO9H`O|67(YBKl+NiMCB^5 zefgyqJN-I+|GIa$boE)@6S99o(<{SgeW5Xh0C);*ctk>#>A76=;sH@Dw0fiZ2bgL7 zyiE9j4*l7K!id>JF(|S&uYTNgQgO>JE30=BlQ}X5(2aju!?Q$`MCQtA|8Yy8=;ZRn z5DwKm%T7tQMfL&H=y_iM%M^wzu&#%W&RM!u3%~pl${bduI@wN9%A8smRpdyLvjIbg4h+uh2 zZXaXbT?b;eHs2yJ=KNzqw=VMXT%)xXSH!?zj|3U%g&RC{*3hqW^NJFa8?TzJl#$)@ zy75?-@2N`%$!@C;4}_H<@(a=vFYk>BU9&0f(yw214;o9gX9~x7^nQ zBx$Bz9JzZu4RZ(vxf*i=7qbl|+7J2QU)InWFb#4+D>n?)eH&$&f^GC&7E30hB%KCU zbv6k=)c`a3(p*OR_khTWZp^Md2=^3qzzjVG-vVy?u&-w4cBcUu%bZX$U=`zMi}ux)UVB zHE`q8U4H;NzFpH6{OpUqDzUV+?Z?s7HHyJh7B&X*rjAX5H0A2@7s9G*rD8%(@skdd z2yb$=Xh?`$&$*dGMD~JKm44$V<{esxR$H;f1}gAI#sRmaI36J(yXTFh+fr3f3Bj;= z4DCa<6LZu&{EFB@SlBkUdKWoCpo=W~);!@|!1rSGPw1(o2#1eiIno4F1*eB;)1uu+ zQlYLN4|37l<(GuhhV+;N4~4YAr()I2erQNr^KUmt^LSdOr}>(ef6L$IuFieozZ*Tx z6Wicq*y*as^;GhHJIR><^#&8Cz6}w7zFa#nnL$&MG|@KxFK8H=VPolhbkZ}q+m2)z zkigUX^(kSAQ0)k1mh$45P7#i9CkF>p5f199M6|xZdy>r_CTlL|=t07ptG?hr58BuoljK$G%-8Io`V!~M{cdj5x|D((rq}MaDhRhK9#;fTFoc9wo7X=% z*gj1u8FSGs*1|MA5O$8#QJ0%5)Vom-cXBu$&C#Yb*dBR#Uq;9!LfAszFfoAFmI?Kw z0%x?#ygG^YvMga)E^JV(K`oY&V^s@9!eY+t6%C+>u~+!959>9?G(Pe7-WZp7dtd~#F+kwu(c4K7s7N*P9on+{5<$;i_ zAw$B9PvLviDSh{?-wo9{ zp(OA`lPJdfZVr!u#MJ$TA3tBXI1~FX5d8MtF|Pg)=33R14q>21B6v4z?nlOkjfGs^(?S_MU1`a!F$WB9R zR(buC;*~($gN=`(WFgH>-Osh#9XgU;0$fVjcR->&3QyITbePvRmk59>arY{o0~pv^ z+Jc(Ray=rDgcwfRE){GxI@Zd^IwB-Jp;I7TdtHE8RKd19OELC(8VzebB3Jke!5hIk zpR*gZ;=27NFU1mYZ;>EQv8~O_%Ing=iW38hkqZTJB(G&F1|N%Mbzd^kYz zNGvQZyYoUxBToIE!Mrz%#x+L0@Fcv%E|a2rx;3*~y?1%hMKi530Z`X(+QhTCz&hKc z;aOtY5gcqR(~6(7g?p3Ue?VYV0CBh^hWNlcZK@(<4qcgyl-4~p#PPRQEG(hsun1r0 zkl;kmYu8Vdho|;v{GKD{lG)V8_3*iJHueq`7&~ z35+9989yW!|LQ!>cbIDs=NZd9*28}ZJy?IsFJUSF5U9<__ln==#f_${k|VoTS_(jxZ6 zNodsLOyOeUPrLBBctK=zeu`*0I4Y~Rn0LNCAV&~ySeTqA9_wpFECv390wV zIUo%LGzN|GuJ+q?YXv9;!E^B_A|5mm@Y2L+hF116H!KKbaglytd|)w2tYmJDV_}nB zTIjh|aWto?!u#B(VHm#gqlO$#65O^7)ehoAMmv{hR=XrF!9QN32!Ex?Z@rn99CCMw;QAS<&cj`$ZDi0i4u7B_T5bWhJV&M$mB+d z52R7@r*-J$_RYZiQ^8vX%`gi&h719rmNmkMU_AYS-{t!R0uw*9%}KD%iCq*&bZZ` zEYff%1{MyK^f>bmL+a?~rU3Hux1K$LPmf-ShV(-r5P!J^w59j$N%ZX0e!^QK8z<=> zWiY8O^N|Hhme@g4Er`VvGlu?QPE{7{DB-%!V_Xl}Xw#46W5nz>T<&sdtWZTczWi_H zGYSU7--)mR*0zo@C7?`R+5_G-UbM(iW`P+1)i*UXeDsAP`5&K+LnvUJz7=hVTq3MG z^rFUZyIsC8qt9I^Vi{sSiSJ&l5RpReIVmcrJ}Z`Isd~)G#G%5j%eqVnZ9H;hFz=PS%Fi8aTlZ$27!f zEQ3p{*~#=5+Y&B8s#kh;3D1U)YG()JW<_hpE0&p^vD~tEyF_9|t4Su#EA&Dz@Z@AJ z%^c9M%1`t^Q33^dwgDGt!Tjl;$x297iqtd6SLnF9SBc9!<*y6G{9^Xf-?{0zNV7ab z9Cm8#mCjmCSoD2+QX91vw;L_XIkeO|yO4J9bjRT%wEhL&@0EaCc@PVG1-cHA%~5>= zLF4$)TB53#f!+h#M9qqfDAH+8SeT@gvKjs_?#X%MS{ms%0luGQ*G)FS1dL;ZKXv}h zqEb9ln2`tx<{DF$pj!U0_Xa6Y`07x~z&($KRb50|X#wuj=ambR)Eehc!sY1W#ps8- zFA1iZ)be8u_2%H!!3b5Xt7I`A$Q(Y(mRpglk?sg3pVLsNy9Qg-Q?6k&XBxa5By+wZ zBQbre2$a;mzvDo0!jnS8D9_z0uN#kmMOHbzQev>y8E&`-Y`xD@niCSn#^1DIgcx1f z$C8D`c*a}4udRDn<^6@ys@JG5C~YG?8tqAv8vn-rvb@#EaR1^#dC-@!gcWV%!hzEM z^!*{irz)0OM#1j`W#y_QO`00%=oSf}aKQ?Wz}w{aSM4R_gS(J7m{a=(}98&+tkVzvv)@tM>&UBW^;5HOveyq$F0CSq z*7F+04<%-xWG~d>IydKp?7jM^teK0$W8qv}n~Q^8A5pS^2gD$D`zkw)IJ6+9%qXt+ za9CJ|cUbGlqVr3P0^b%6u5Y{X;yPa2f%mHoa7t_jnUnu|@-$Us!ZZXSHn6DaaemEC(pyonBmCUf(So9pg63CxmjVg#G zb*@JPtlY2&5)Kq*EG`ymz)qSPG7Nda3x1&8uNH7NfbVw5_AnbPm@cfZ3j-E6=58R{ zOeh6#KvPezVx${^tbEXXG%fF?OVBBrAOxkLwGw>VDe|3?0IqrYL*)R*Ac^}|paM<# zlk3I^9}WwJQMXA6ePlNseDh}})%@h80h8Deqlz)OsXE2%rWMi@#308NDHKY*tA zt{PnozP6^4&v|e2SEAy;-TBV-x5ik(3+dzab{)l|~MSP!U)2 zNi!OH-!Omulc8#JH`O4<1pC*VK0Uo|0(gs=b4a^=wQxx%5dN|mb6|#K>>&ewUrJ+;SQxendl{;P)0Jy3F?@-eey-|`V_jv;Sl~^9eIkO+|t+FH53oFua z&Ws{z=7dYRdeYFTi#& zsjUQ}_+WZ|zVNj1Y=|m$-wdHKAx!XXOaGxFIfS5%%c7t0u8pXgP9@{nBDom?>x~LFI%I&6#4{e9^?k z*B+mbAfPk20>1#{32GARyS4Wo!U3Kl}5z+z*X73Ex zdgJ_UDkFg&K8%;0sG_|Afq}&?JFlD&4;I40u_Wk$hGQ(Kj>fP)Vy%YJ* zH$a!(u7*AWN-(3aVbkNq$o1J11YBdkA>8)-1YT@)uc~yeH5<#=LO_||+0sdc(iG8( zRZLT7o4q2MSPY-(mFMj*uLX4VeGn8dh-e17;f>k4ufygaJ1QA?9%}5KDDEB!M$W6X z#Q?AHHJH_eJoD&h^sv_5Ch6nbHYoEuU^p?=w*f(U>vmBl+8OzU2HbM^P&UewJ z&;9)~V|)Or)CK}et#u@O^AMRC6%(_xcYpQi?ziUl0F$c2^*4Fm-Fq~ferTTxr`qhN zaG4p00MZDr+U`+dPHJDQx0smmi3voXNb%eDzjAmci>H`^>BG?>BHXMPI57IVqQUf4 zFz|e;6B-YG^$W>=z^u|;n^|tQs zt&H_+q6Vt`K&VQ4B#Xn>HZ!;0+_*WvD{X1{)aiEnxKuM^TnLUIi$ccy9+E{`5_e7? zE{Kf+e-4yJjRv9!cu$&kT=eq4bhixl+Gc@k?k-E#b|}1|#PF^0)QomxM1?fiL45r4 zEFn^{nDHe49InfPE8tugsZsZy4G`Jy8;WXme<%%@i0NJ4AkGa%7d(3p;m_}}uE}jf zf?Th?R0f#W%DymV?OlC65*NFNE=SD-I>VFL%1 z@;+rL64Ut>b9@s}O5Ir1u=}>}*V`qbO6`zi6a1*r09fScWHa^k_%C^gi30P+Y^tP5 z2x&&S9|lnV!t1e29%BIFJ+{MXC+FsZ0cQAS%Yhe*v0(cn&z}X+0CmO$OAF8=hOA+X<)>00P-86373})2$(Lm3=&ISs0TTyD%IE#$WI_939ff*~5P*EVA+H8J7 z-X<7^-=&`4h-fMEQO@YYQA~{WocBh%hiP-7&UXfl9UL$KE=lcnx?WM_S{j&zjYy3Z z|IfN`6yvFh94A7k3c_*etDhNTdlAtiQ>y0nq^~I^MF!Ivyo5jaa)Skt46v7SmgbfzkFj=|@Tb_TUGCWv289)q0|eUNrs61BQ@?wJrIUF0 z-B4M(nwr|a7msTldY{e;^qs~ouO1_opbuzZW3&bn`!E!9oA)((E|T z<7Tj5IA4uZOhz37OuS)_X@h=4)$_@RWr>5N-g2F?Wbl^0_%T3vMY&V9 znmj#3$G%E9Ft&RLQiLD2+l zC?&w^mjeaGZ{%5J)Qky6TJ;w3e0#phK|~D53GXb1kq&~iaJphdL&2^Bp(0K{ z0$il)4cZOK6glOi2kh;itT;x`XJk!Q{Ssy!jEWd}DoGYrzHFl&DP8pMj?Amlkiu~DXnE)gL zFl!Wa(U&cIKX9gR-!;HpBG5tmVqO_~rHW-qU$!nrSQdK!?pmSs!zvWq=KmM|poJEx zV<`hoK59dYq5mWZ-2rjJDASK|sNLp+Mt|(lCVLS`J#u|XlrM@8F6gfo+>L*aXSKLg zK{uHE{$t`Vc;N*#A2Oy4kVkwDl)pDiiP`@REJqUxA>BhjSIJ~rBZ!m6(4yy8%(d2N z62dN&8GdmbfZww76*@&9b#yX2HhO@i$Pa{WOo(7vt2aRSj|LJmyVZk)>Cu<_g8C>z{SK)HAMi z5t$6Z*v~PR(-9)edms5H_kde|o*<~ISIgX;W3oWg!bBjT1I?H~osfZHs@N>efSqK7 zr__^VnmjpLL-nVXS|bkucz!A1y>^|g&_ElVqwc(Ij>K!BM9sX`R!q;#0t!lYwqB*K zLo>3l|L#!fOgE-_H;caWK?z|C>Z&Wn|BO)* zfR;iX%#inEi3k&8F-kuNWByJ@&1odbloCqSkDl8jXcIP`sD}yWd^6jvyC8YjZq|-u zGw<$hjFWNz(42_pdM0$7@2&7^I8m&0F-ipTcQUUIkPo3_LKA=cGq=M#CK{SRqq60^x?FlsKP6GvorPr;rKPkYi)UYez81j zD#6GF|le=ad@Ixy^d#Q}Ul5%W)cFa5L0amVFN zaNBYqm9>}8aKul^I{Sc%%T0E}1~er4sl}~WIfjKlcfGb{JoDl2)m^;#KPh*QJeVad z9Y&KEVmX&a?|q@jB4tSJihZ^BlRxG9+vrbL@eI1cJbI#2n{(0Nht!kaqVfqQ>uxAaR3etLf)Ctg>?p>;K4v!)Ouk=%$Og!u$!2aKTF;K6 zZEuP^(HP;T_Xaq-gJ4Elh6m{Ty$71?UXZZh0H{=VLymX=5)c4O_up3Y_VMhkleuH#!4Dc!B05#|_Z!0l8@Q{=2`b7ecCo z#GrcLWV9GskD`Omu5R^(e5DrRI`3ZU!$ASUSKKm6lffxnYUK@w&`hNR0}Uv^)R_Tq zDzBhG9O3o9z4X+B^Kx67mA%%}jz|duA-w45XfxES>e*pV%`FYiS^TA-i_&CPJH~y{ z5_gzGHBj%o%xhR8<-8;L22&t8IF$enO%EyO)$J`U3U1Jk3bh8l3Y$`2$jZjXz{c1U zvPM=WyaC4dYp5)y{Sz&;oq+(-*@j>Yq}gxvRfxg{flR%VICcLVT=!=<)T8-|kNAuQ zAK4K{9(~Kb&nP%Id_zeU()1?P-fywBu!l6>q!Ym7V0&0kMj*{{!*AZ+EN3si%O82s z?kZDe_>5T8UtOkUED?}-RvpB8oHn5lHrH;~2jL8K3PLNqcs@S9pEP$dyh89ETSig` z>bq4cRZz2%+c4?4dLh8}O7$p`!gD%H9gn|YrKKRD-S9qbmqr-;7Q-*Q;l8Cw#AAGZ zZ_o>ngFKdnHlVTW>dNND{zM`>y^;$cG%{`SE=yfsx{4$l*~XD1pRsrO@xJPb9xxuUe@$y4`+eBwcqd zuMB@SEq+ACr>;{9e)7_(j&sLn zEr^8@V+YJzoXYl_PtJ@&0LzcVxmL%bGA+0%Yi|ch59@3(y$&g5qgAfXomraNiwIGu z(+wD{!35!n)eNt3gZb2X|0e5(&rXj3RMamO0H0s;mxfdU ztN*vNa+%`J{x%~}tOO=(Nw>!Nx5Dvi6S0u%O`z6m|0lkI`ngL?r21kSM!Ol4EYUmu zC|5Tg7c!Do`@y<$FZo7-H6^uh&# zY4gqpMz?>_QV>7il}oDQN<+$iJN2YxRy2!*4YLf;v+{Wd%0wY2^N156e7)%CMi1pk zfJp&`(1Otjpit?@3q8Tet|cWUQ`)f2de?ZJcl~K9CF2nQZL0j8y4AM#kCXzzt|crR z<1nRDFh8N9ja*5Y^(7g-whh{7x-JT2h4&imrofW_NV)q*l`{Rtl$>7tMVJzSe|TP+ z*{n36Dhi&%wzRZdeXHr+V$}zl3m(yNIni+!Gr0T8`D+@rZuUjI1%hlIks-}qWauFb>TBkY5_?F z@T&~|LyR0r*^_zxieGGB8T#Yq=5|QwFRou^!?{vpoAo;ds_q)904tj0X{g?5?P;Uf zDzsON7FvDk&w+&m9LrIrvRN5VK$`4m33mo&h#S9)&Or1^!yB1u$WNLxsxQs8*`|

U%jodx4{!Ag(I9S(q(@onr-%{^*3f=?Xl2aecHTrz+6MaQG`=1WA5 zvH|UCI4}TWQ@qe;;Muph9=TXrThH9;c>Ic&a#7mUcwyv-94LI$=?F#>)J?#1&PM=66{F!ZRa5!w)HRC{_03c!JL(mk?~$949Q?Py0HF2(8{juJv^{*sew`FQ(B}&*rAQ*j4cCDlB?}yq6trVCy2@ zp@ZD!RFAKu;fiwkg>aq8LjIw*AGEP9@Q?nbwyD{RV`iF}IVxXo`B&PhYkbQ$;U906 z3TbtOP{!^&QfUy2#4>ZL&u-@7eJ!l1j`F3ThyTkAIbQh6=j?DXOl$mjcYcUq`foKo z+*@2AO)e^azl$f*yi80Fe=&6Bl*Gd;@`|O+4eI9zo}q2+ij)ht;c~rYOA^4ce@G7V zms@&yjW(EoW#+5qZ5b24gMJ`a^#>G;;II7X425GuM#(yDZJ;6%t1dfJKfTP^A6Vhx-Vn>FE>LC^AI zyER!~ue17sUa;b5r;$lwUNy9`o22QtAlE6Xo@BeNC*7FhVycmmO#5p@!mowR$&Y)% zjYY#-xl7?G?}vyL-lMg+b{%F3)Tkz(#0=xJqNh1wR3Rlv6v|jiW*v$86|>HBUw3u( z0bY=^!Hy@cG3eHdQDHgau>T@@-diiW_PzS5ceVV+3$WLSs@A-Cs!NM32aEVf!48Kd zMHyT*SVCW{9G(qHaej!@Dh8HBjX1o%Jyz<4!ijba9w9F90FOs%stYt2Zy^in zF*8}R9SjUG0Xo|;Jz1Gk%$j!T-zwd1seWZeh3^#;2jPvJ>%n1-s8vs{uD$lAvNknF zc#J^+AprR@Wp0poGW184wsQCYnn>H9%&b7@3F@Rg1elVxPUshO`@bW;Kq5!uw{lGZ zdnM($y-#}&ezxb^@%JoGS1JjXEU23jh;PRk2KkapIqSJ=h&>F+*RWO($q$-yC{S0q7=u*%%DZm7ezbCXLLwr|7CV4~i}!MpYt za%S~$hx4-Rba4;~+Y4|DjO7QWE|M2%0htiWy7OP2_raw3tf$&&yR7A^@Yf5@YqD9W z=ZJBP`SjfVI18Dot-c z_o%tvJmvE}^qC1-p_v`ONo0j0nsj@I~A1AQu@b1^n=J0vtpvtR*=Dj|7Kr zxC*KEB#ZTAnX^o(%P{GCsf*TT#&9UEi16BRa9)g>BS->@`4jem$zlkLUyp{nEY-Zs zZ*ldL&ipBEAzyv4N4{mLPd@H~ZSvl0>vkNp5%H0tD%L%&y-2+$-_)0J(nTI>^3K!J z2a9Hq{H%65kmbujM}^0pupz^+5sid=sX|+xs>Z$+zdNXG$GZ#68|aSORZb|3i@7h;-rD8EAH2_0DrS`9$ML)FK7lB z&expIE&OScEQ#1tH-2(K(0aT(K$7%L_?8CMBi%zye=cV)%LQqSS=A#S;ClWfafD!qH2 z&fC_5JOml373JmSPt~6jBPJ2J=ji+y-N#eg*deBI#pLZNCxD3OF=>~IpVYzxf&4WpfvRqwL)MRY&Q zV$~f1vRjjFY!Rv}DnJLYMkp5bsWcF?Px%ZmnV_}03NI}j=>$~7Zg7^NVr%*PRT=R{ z06^QDuO&KYxsf>gyI8!tSMwhRpFDs@vYX!CLZ0g8cU%AMDF2uKRFhPZp|e46rno$# zAyoKy4{#9u+a+$Z#K7JvCUuER+h~v^og4J>f7yGrxZhdsKPOhaRZ=*&4`3jK@@t`HWxxm~YlaIbYmtxaduHeoQ1@9F{oWz~9 z(>s&C%;pc_&SL}%#J@g(nmta=%kNHY;z{}WZh+@$Ie_hG;_3A&iy3h_v-H8iIEI^N z28HA6Frs*5H(Mx99LYqw4p-NFL+rsk!6c zk@Y1k4G2+KMXseRjq+HrDsC{9G8h&_@Z=j{oTpxt#isSzo4rj&FO!2$O_?8IiYe6* z0!|kkw=IRM{cL!*&gA@j6ws+)y{)3XEqeP_-pDe!gXl8~dvrMLKnOFF62c;=vyu9y z+C}K5KvX!V`{CVMiiiE~hrGVobY3jG1eqnXhFe4bBo%1IE_IX7^x3fo%GIg=8Cv|7 z6MNOF&j4H)H+7g%;meQxSfDcA-i+*KOWwz5cVqdN`zFj(ld2~wdAp!1@E3Sk$f-?SuAf_kkwh;^WK8cpSB&)#7w~p!+Z3P;#@B z%}y=4a^QMVt8N55ga4R#lx4pW(Q^@Z&1c_+Q7F?kLi!&&Mu>KX;f>@Fdb#123|l8k zglpb_E!S*)KH#1jscvo3T_6I8c?*tsn9L6c)kpB5(?&6`rl6lt*o9C+Y5n4S-<;T` zNy$K%<=Tb-_x04r1ow$lafchm3@=!3mShPjRsT~z@yVJVTO}0`;of0ZXDfmrUUwvx+RxxZYJNjgHQ@rPKtsIy1>ch3Chzu5+ zQBIdV0-U#9gI#F@Fp{w&w5#|Uf%l6Gm9qj^q=IB>r6yuYoJybV)V7ZX^=I!07RQE82YNKfp)5wuXQ^rg1f#_$nO8sBmS)D&3 z{MpX5zGTpD*v9y1&Nvw?IirFa+@Wiloy@sIGSV1WaU`6?_99W)i(N}zO@-k_K4t8b z&>gazoA0-ZAx2(j)Ry8F6u;%toJfuGC=^-R;70&%(KyFXppImeM`xBqzDm$@z^f-u zaP^|^Qr7chvev}o-NloIeVF?|EUe%N6WRD83)RR-Fx*cX6VQ&qOQf1N#?9ErV;^-Z zj0bV;K%WFi4moT9zxX8vU;+QK^D3Z&yK{p%uCglT$MYSK@Ub}h z7h6ebk;6XBeFa_az2$o9GC>IyXs7W_gk|dkwsrPQLJLiY(P!hbHH7Vu(qvguuS44O z>^>gbXIf!dd3mHEHFKTs5Xlc}v*j@o+NLc!VbXu|<9eCnb@J7_t}jmpE3BTKtk_7K;n;4vxu#l=N@l%JLZ?dS`tQ8GS+tTf0kMHefxJ>q|R#)U&H6H(3l zI50m*K4kZP&Ljv65n7)fUQnKtC~IsWUhZ4ILMj)=F!>LKt+d>_JtTV2dA2`4ILFlZ zE6FabE8R%K=R-`xQz}XHp^PKHH?l{Db7+D#uJ8>fc?Bow~&e zG^K4Rv;)-Ezl#2qQc-zGD1NHxe{;3mUC~V!^@v(%yLAXZ!=~PF+$Eg)9Kr*@sErBVMAa&c5?I2K%C^i2`4AawmDw z*S_rwmT`Ujpdt{b9!Fx>?>l+TH2PN2foNzt0q@9ZAVpYXnDIoprp+%VpS$=6b<9O5 zy8wPxKsUW|9=F0s<5RwcIjkT{9IpbTdWMAA;Oh9eCDdXmq{diduTfjrx!Bd{mwC(n zvGUGcrDiQ%j?6ABLHRFb{Z37AhM|k5>;2AWVa*I;Mf|6LKDj?3v(AU zvHP3_ulDw<^EyWy_dgdF-=W}nI;cl{+g@o#FfTN>3hmwt_0(F;94In zHGQjR@UL>CV)95%G(N6W&R)~WRv$4mJg%sF4k3_zHf`!21O6J9_a#1_SeyfD-TvwR zOQ0gn>omqBo(^5$BS;REnB4}+$n8`(P^6;(lBi*;R^fno!#|)vx+OlLjC0NdN+K>l%`|+&Jnm(R zlgEtcm7GlOts5a5oUq~K-+(vcE*V&K2x0OeOWj(hH!uf0^Z7v|eQcA;yyo-q1%j*U!7t{ngLUs*l?=6>u0PEfM;cxN~#7tR;O$R%DFnW z$=2RWX$pvEXyM8i(ZBoeuvO6oIBVfGcQvL_Z+ttPV_9^ct&`AQ=9>n(4N`%}a58C`0?DY5<_0uYqdk>h%# zU7P6-mpeOi&TXVmB$EV<{yWme6Tx}Xl-L-!R%)Ma291$;CXAYyl^cILFVf#nJ+bg} z=4wjVqtA~?t*PUzZn3Tk6@50$6_}#$c`X4uP?3!fP^k=6asX;L$Z z*(=5Jz@OKg;7FDZsaGqvw#teoBGbUmmfi#619v-}m?fP0Ka|<0E&wOdnY)bnx34c5 znF-{;@(Hj$Wq~5f%|zAdLd4%BfpCf;OtOf{>B(iz{6qrb)k|Km1=aVx6vb0Yx$_UC zA04NWk#I~jDFdy47p_YDJ)PyQcwVG*?$$2}0#(kg?m;cpg09*8qG@sy*M3N0U3S$I z{^;j((FeFkF^g(G7q6?HQPv`Lq}huk2ue#!of2$M$C(CKOU5+{X_Ao{SK}Q6Sx?9i z-C+0k;XonDvR}%FET>uI6Q<{m`9&${xbM}QA-efRZnL}{&pAQ@6_9R2roN-SC}MmE zi>Cz5ua-*S^1*CjwxwSpkF(8T1=#^vH!_9hC8wS_4217@(6?#(?DLVzmG#XBGPwQH zAL<|A*BYg6*biQCedxSF*5NHjiLROTKk zWb1D4D?Y3)JCJd=djxSQ(DD?#`1{&iK+?)&GorZsFkAnc`PW9N$WM=`6yTWa8BAV} z#D31_f7C?|3^{VSarRcntPeuOelyl%4kV9P6)WBb@KO!kmXibjn&2MO`tGmt-b@9t-ovS{3rbQD+;gH$ z=|ZW+DSCTwsmvhd_{gbA4rX}xynxmN82JDlO#1G&q5a4NUwWiFx|-jtVAKWD@(~Aw zt06<+k_NBGL<_Yhll>yHKC2g4Q}5n&Ajt=0r*qOa`9d$yIr}f+AC3Jver-UzqI&|% zb9EM;>V+}Pd*Dhr+@TuLgii`<9v7|lgy!7Ft%AEvg5~Lcv|vGSUGA=NOh!I~r+!$Q zX;886ca|$ZTRP{4hy@>bO#R(E*b5%xYK9i)*j_C{>WPWVY@^V%APkBD4WYfYv0$Mp za6;A9--a*X=}K&&oSB+PwS6U&7?VxexMNs3Z)hR|GQ!sN=HHR~x2M7L682Fgl24_g z{w$AWagQ-sMb2jMsz7oFHd&riC))Tmn;koQDh~S|t?UURT0acCHToow*Gk;KJ~`5v zyzA^|TG2_=@H1<-TLs5Qi+1MV6_jR6w`gqSYe+fjoc*LDDmlNAuD; z(qpxEF>oLw8FtK(OiFH3Mijb`FBKUlDxJr4_eW6`sV}?T$aIv*Zn*hqcn#3c2LRi7 zCN%;x#DG1!zKLfDnI2r%fduh-IT@zIEjy?)i2O8)Ai_dQn;po1EV}r|@z0c2HbG<8 zz2D6Id%+eGYD>e_e5&leV^stsIhY*U{k}vX%8@oeTY6tGj`w*sVBTkZaVa4QDcU~s zsD3uQ=pvt7x`c1d&YM5yNXN5T)!&Zslow^zzt=aw@}xE(dO1<<>SwrdP}P%y-ulEg z@^|s?7eIXmr~$EzKGx=lo4TGTg^g$o$#-5Q+JYcS+h(4c!k{vK4N>#hlmjL(U81!` z%aGbY2Wc8Z34cG@AT?`?->^R|1QF$T)XLp{al#Eb1lmRZst6tPbms4CdGx?!Qr|AX zQ+x8uU3cWKv&ehV($dcSb|wc#aPR?kZ6)`+I$u7)#s$ayUi=w4!pRk)?0{}U@s=aY zBBL2&#^K~s>vSlcioISdTnq2!LL_O|)g;I?z#9SpO~V_N{aoX1p_-t3*F<}h(xG>W zrVU~{tiEh`HYygzyp2C8a?W;E;@SCQlmB(5F*sL=tV%vL2-o=r~60pSc`b#?Xj)svp@ z&tt{U4ByU_V|y?8vJ#4H)4P{>cmSngIj5#?lt7|i){ea@{mukGOG+H54X&Ihk%Z|i z_QVahqr`H3+o=-k7~T(sd{gc4o;OR+kiPe;iaA)by;zUU;+3ZmHImPr&s;1>giPO0 zuTZ;9iofipNI~Ojz+1NNS0zs3w$tXRId}6BvajbjKCo#^%(&jo7bp-{Gd8bZb5E>K36iIEERCQ)WY zK6;a`eRrNEt7|?NF|XTXOU9(887pC7YSu*5mY0?M$q~1sNB49RZ`5$LcW#`0KRL|8 z3_w0tdAS&379tyLB_PRWY!nrgVRsq@t5f$gK&`CK|@73 z5izB5dhE_f(iiUm;|ih^40Hjs@F@PNpiz-8nV(+941HmGhHQps zqPwK3$%ksD%YSfoML?~yBs6(dPhY$02vFkw8LS#lqqgu_y{DQkX5;`m+nWvTAd;j3 zhGRm~Sq4dimE{I9}D+v8CXuTe%Z3 zDeIps==^htOK}UR^4J>Eyl=&>@BP2UqdosEyCXBSek&edzWBFzY}S>7fO2KO5SY-4 zvZy8n0~;=jz>kyo?+mn+^Y(Iu^BS1&WA_IXtatzMN~Q8MybQAqf1{109$?G`n9}$> zOa~z3RoO#4b)J5z>o%aPq`z01_`t*jsl*H5JMRL$m$)mQf0ePnvFa;#_sFyc-^Q$# znKHy6o~P&lipa%{UEHHzDQ85_f07a%bmPq9R%`{Fr$Yhix%c+WA&KB4KuHiVdfwc- z;(tC+Bo}W-fw@?t2QLYP8!Yj`N~!sc+By_svAD#m?%wb*0MdJO+d3@dff8`v%k2Qj z>m#C!N|P#kH7x-pU`5I<<(u>&oyo_M3|vO+j+({RPz@r4FQKNMFbB;SC)jt}utJhY z8=gMzc_4q1TKrh4zAt)drWe$mN~1H&R>j{K)+__J?Ok4WBD)D9-*{HzuVZHgY`5=7 zTT_iV-l~VWm**2RiRO547!{ms#9WZZ_r0zG&YMR2rdr%79q5KH$+!Bca`!ZI7Y}sl zrW#~#_nU9Ye*L#R++L1wsDJ(4>B&y}$Li_$B}o<^p@C(0ug-943w)QCoz-cCxPQ6` zfVCRkk^a@wf(0Eu&k*z$(`7hOe}Va%S1U%*$i-ybhr|mUt;X<-J5RKv`*wq^m{2@` zkE}ud&CQG9?hjlURN)V43vNUSqu*`cOg?~ZTh`_K11#N_qr^#(llo?vuP0wl&VKS6 z_0Bt*=+`{abr-+gcaRFuoNl@cD;9d%1f`7@+vI=<>JMLCb>`YGKsZF)#6umflnHID@0IF5bza(~%^fGakjQ@J| zeC=HDEFiIaPfUwWvrWd=Ohdq=&YjV}t%xCr^=pv%dZv#g^kWZCE(+2^>%9>2^CuZv zEaHD^7w>G#gmQvABL-Qeap{bZxKr+Ux@*HvNYJzpxPFYhc~*erQ_kEzqiBH6oLSTF>E=6lZ6)6W-ErJe7P4^zngzju>0ut` zi*>F!Mk$Z%LAail$QqZgn7U7Z$t&^bMN*vl*DTE9W~Yz&MM?Fic{dW)V&wEI+sBQE zP`=O~pVXe!T#7|$Svf722P#4K) zR3h7zW68J=QE`+|j-dc{=)&f!$M`EiD`etz*hcHcNyZHg2pEDo$^oJAZ@bPz9EK97 zSwvQs#~UcE>4?kn+`+vC#|D>=`9gC$6{V$|e4Kep(F9==zHcV^-UROI4gZ?ywwp19 zsm)4K4-&cUct^p&MpI=3e}wN|IT%-N{}mUwC1eLJe&%*vr~I7NoL%Aov|UVp{o4 zsVX*N%1A7d#qvMO*(fabbDKEKLp}~B#kea007w$n7XIX-e=3!ZW48J0CvcKkpmJSx zSpE#R2WU{GQ8MQo1D3yf3p4|BnvWuz`T1Q#!pK1{H<_h@-4n)Kt~wTiD9M$TFN&7b z*V9%R{KMg}+h#_})=$52@Y<;5TUwHk_b(BZ_aaq~VP_u@0|I#xvaXQneY9`6Pe9d! z)NCYdzO0i53D=H(uFU@4KF(QGNqD=pp5Qwl3R{)`Y7-)@YA1f&U}G!X;hZu8PkDDW zNCzh4F`4aI(-IH{E6dFt;NjsRLn;Bnm8icsiO1@Wx+K~|6(XP%yH%{~vcQx^1$3G@ z+H0GUoQvLYM$jcbAuvxRZnpHn!Xg6<`DP!v#=0LhTi5oz#DRbFWgc&Y_V+|#@R)%T z*5J3G`D2$RLU9aXmAl*ZvS#+tg&pTn|I3F^v&{A|y*IOqg-`_)8ON?dGF58T(!RJM z@xH!TgrR)@#Vl*PI&S`r4)wnOdEzl7>+oM|* zo9)9NY4fZ@lYrQcg2QdPTb7WoS@M3|LM1!AJ9e5@V)!MTK-_#GjIwK&KLSf;tR}hJ z;f^kakMp+w&l`v99Kh0U4bGCvB?cnlK%3UMVG5p3>hJ#yW(kM^{ju=y+zc5QQ4%#Z z%xHfO5J+<1B&+}TBQ^@-6C}+fFAg4J5)$<`|M=IHXmeFCWDoQ#bKis&jC3x13Bi`N rS_uFOX%^R>`*NTEe{)_~7|CrNm#Plv=vUwaO|X<+tIL(iSbqF3R7;;A diff --git a/doc/site/sources/docs/setup-cloudsql.md b/doc/site/sources/docs/setup-cloudsql.md new file mode 100644 index 000000000..0f1edf88a --- /dev/null +++ b/doc/site/sources/docs/setup-cloudsql.md @@ -0,0 +1,6 @@ +# Set up Cloud SQL + +1. Create a service account +2. Grant IAM role +1. deploy a cos VM with the proxy docker image +2. Set up FW rule \ No newline at end of file diff --git a/doc/site/sources/docs/setup-iap.md b/doc/site/sources/docs/setup-iap.md index 98d99b69a..abc40ad13 100644 --- a/doc/site/sources/docs/setup-iap.md +++ b/doc/site/sources/docs/setup-iap.md @@ -49,26 +49,26 @@ To create a firewall rule, do the following: To allow RDP access to all VM instances in your network, run: gcloud compute firewall-rules create allow-rdp-ingress-from-iap \ - --direction=INGRESS \ - --action=allow \ - --rules=tcp:3389 \ - --source-ranges=35.235.240.0/20 + --direction INGRESS \ + --action allow \ + --rules tcp:3389 \ + --source-ranges 35.235.240.0/20 For SSH access, run: gcloud compute firewall-rules create allow-ssh-ingress-from-iap \ - --direction=INGRESS \ - --action=allow \ - --rules=tcp:22 \ - --source-ranges=35.235.240.0/20 + --direction INGRESS \ + --action allow \ + --rules tcp:22 \ + --source-ranges 35.235.240.0/20 For other protocols, run gcloud compute firewall-rules create allow-ingress-from-iap \ - --direction=INGRESS \ - --action=allow \ - --rules=tcp:PORT \ - --source-ranges=35.235.240.0/20 + --direction INGRESS \ + --action allow \ + --rules tcp:PORT \ + --source-ranges 35.235.240.0/20 where PORT is the port used by the protocol. diff --git a/doc/site/sources/mkdocs.yml b/doc/site/sources/mkdocs.yml index 30d3a3269..d8b162507 100644 --- a/doc/site/sources/mkdocs.yml +++ b/doc/site/sources/mkdocs.yml @@ -91,8 +91,8 @@ nav: - 'Administer VMs': - 'Use Remote Desktop': 'connect-windows.md' - 'Use SSH': 'connect-linux.md' - - 'Access server applications': - - 'Access SQL Server': 'connect-sqlserver.md' + - 'Administer databases': + - 'SQL Server': 'connect-sqlserver.md' - 'Other applications': 'connect-other-applications.md' - 'Use IAP Desktop': - 'Tool windows': From b9b35b941ba597bb32442ef14fd17a25cf4b63ed Mon Sep 17 00:00:00 2001 From: Johannes Passing Date: Mon, 16 Dec 2024 15:59:01 +1100 Subject: [PATCH 2/2] b/383645460 Extend database docs to cover Cloud SQL - Add instructions to deploy a Cloud SQL Auth Proxy VM - Add separate page for MySQL, PostgreSQL --- .../sources/docs/connect-mysql-postgresql.md | 156 ++++++++++++++++++ .../docs/connect-other-applications.md | 56 +------ doc/site/sources/docs/connect-sqlserver.md | 30 ++-- .../docs/images/connect-database-direct.png | Bin 0 -> 9635 bytes .../docs/images/connect-database-sqlproxy.png | Bin 0 -> 11420 bytes doc/site/sources/docs/setup-cloudsql.md | 112 ++++++++++++- doc/site/sources/docs/stylesheets/extra.css | 2 +- doc/site/sources/mkdocs.yml | 8 +- 8 files changed, 293 insertions(+), 71 deletions(-) create mode 100644 doc/site/sources/docs/connect-mysql-postgresql.md create mode 100644 doc/site/sources/docs/images/connect-database-direct.png create mode 100644 doc/site/sources/docs/images/connect-database-sqlproxy.png diff --git a/doc/site/sources/docs/connect-mysql-postgresql.md b/doc/site/sources/docs/connect-mysql-postgresql.md new file mode 100644 index 000000000..7d3824344 --- /dev/null +++ b/doc/site/sources/docs/connect-mysql-postgresql.md @@ -0,0 +1,156 @@ +# Access MySQL, MariaDB, or PostgreSQL + +???+ info "Required roles" + + To follow the steps in this guide, you need the following roles: + + * [ ] [Compute Viewer :octicons-link-external-16:](https://cloud.google.com/compute/docs/access/iam) on the project. + * [ ] [IAP-Secured Tunnel User :octicons-link-external-16:](https://cloud.google.com/iap/docs/managing-access#roles) on + the project or VM. + + +???+ success "Prerequisites" + + To follow the steps in this guide, make sure that you meet the following prerequisites: + + * You downloaded and installed a database client such as MySQL Shell, PostgreSQL Shell, or pgAdmin on your + local computer. + * You [created a firewall rule](setup-iap.md) that allows IAP to connect to port 3306 (MySQL, MariaDB) + or port 5432 (PostgreSQL) of the database VM. + +You can use IAP Desktop to access MySQL, MariaDB, or PostgreSQL in two ways: + +1. You can let IAP Desktop launch and [connect the database client](#connect-a-client-application) + for you. IAP Desktop automatically establishes an + [IAP TCP forwarding tunnel :octicons-link-external-16:](https://cloud.google.com/iap/docs/using-tcp-forwarding) + and keeps the tunnel open until you close the client application. + + This is the most convenient option, but it only works for client applications that allow + connection details (server name, port number) to be passed as a command line parameter. These include + the command-line clients for MySQL, MariaDB, and PostgreSQL, but not MySQL Workbench or pgAdmin. + +1. You can let IAP Desktop [open a tunnel](#open-a-tunnel). You can then use any tool to + connect to that tunnel and the tunnel remains open until you close IAP Desktop. + + This option is slightly less convenient, but works with most client applications, including MySQL Workbench and pgAdmin. + +The way IAP Desktop uses IAP-TCP to connect to MySQL, MariaDB, or PostgreSQL differs depending on +whether you're running the database on Compute Engine or using Cloud SQL: + +=== "Compute Engine" + + If you're running MySQL, MariaDB, or PostgreSQL on Compute Engine, you don't need any additional VM to + let IAP Desktop connect to the database. The only prerequisite is + [a firewall rule](setup-iap.md) that allows IAP-TCP to connect to + port 3306 (MySQL, MariaDB) + or port 5432 (PostgreSQL) of the database VM. + + ![Connect to MySQL, MariaDB, or PostgreSQL](images/connect-database-direct.png) + +=== "Cloud SQL" + + If you're using Cloud SQL for MySQL or PostgreSQL, you need an additional VM that runs the + [Cloud SQL Auth Proxy :octicons-link-external-16:](https://cloud.google.com/sql/docs/mysql/sql-proxy). This VM is necessary + because IAP-TCP doesn't support creating tunnels to managed services such as Cloud SQL. + + ![Connect to MySQL, MariaDB, or PostgreSQL](images/connect-database-sqlproxy.png) + + To deploy a Cloud SQL Auth Proxy VM, see [Set up a Cloud SQL Proxy VM](setup-cloudsql.md). + + +## Connect the database client + +To launch and connect a client application automatically, do the following: + +=== "MySQL Shell" + + 1. In the **Project Explorer** tool window, right-click your database VM and select + **Connect client application > MySQL Shell**. + + ![Connect MySQL shell](images/access-server-mysql.png){ width="400" } + + !!! note + + If you don't see the menu entry, then IAP Desktop wasn't able to + find a supported version of the MySQL command-line client on your computer. + + 1. IAP Desktop now creates an [IAP TCP forwarding tunnel :octicons-link-external-16:](https://cloud.google.com/iap/docs/using-tcp-forwarding) and + launches the MySQL command-line client. + +=== "PostgreSQL Shell" + + 1. In the **Project Explorer** tool window, right-click your database VM and select + **Connect client application > PostgreSQL Shell**. + + !!! note + + If you don't see the menu entry, then IAP Desktop wasn't able to + find a supported version of the PostgreSQL command-line client on your computer. + + 1. IAP Desktop now creates an [IAP TCP forwarding tunnel :octicons-link-external-16:](https://cloud.google.com/iap/docs/using-tcp-forwarding) and + launches the PostgreSQL command-line client. + +=== "Custom" + + You can register additional database clients by + [creating an IAP Application Protocol Configuration (IAPC)](client-application-configuration.md). + + +## Open a tunnel + +You can let IAP Desktop open a tunnel and connect to tha tunnel by doing the following: + +=== "MySQL Workbench" + + 1. In the **Project Explorer** tool window, right-click your database VM and select + **Tunnel to > MySQL/MariaDB**. + + ![Open tunnel](images/access-server-mysql-tunnel.png){ width="400" } + + A notification appears: + + ![Baloon notification](images/access-server-baloon.png){ width="300" } + + 1. Launch MySQL Workbench. + 1. In MySQL Workbench, go to **Database > Connect to database**. + 1. In the **Connect to database** dialog, configure the following: + + * **Hostname**: `127.0.0.1` + * **Port**: Enter the port number indicated in the notification. + + 1. Click **OK**. + + +=== "pgAdmin" + + 1. In the **Project Explorer** tool window, right-click your database VM and select + **Tunnel to > PostgreSQL**. + + A notification appears: + + ![Baloon notification](images/access-server-baloon.png){ width="300" } + + 1. Launch pgAdmin. + 1. Click **Add new server**. + 1. In the **Register server** dialog, enter a name for the server. + 1. Switch to the **Connection** tab and configure the following: + + * **Host name/address**: `127.0.0.1` + * **Port**: Enter the port number indicated in the notification. + + 1. Click **Save**. + +=== "Custom" + + You can register additional database clients by + [creating an IAP Application Protocol Configuration (IAPC)](client-application-configuration.md). + + +To view all active tunnels and their port numbers, select **View > Active IAP tunnels** in the main menu. + + +!!! note + + When you open a tunnel to the same VM again in the future, IAP Desktop + will use the same port number unless it's in use by a different application. + diff --git a/doc/site/sources/docs/connect-other-applications.md b/doc/site/sources/docs/connect-other-applications.md index 0e5ffde0d..e5c73c72f 100644 --- a/doc/site/sources/docs/connect-other-applications.md +++ b/doc/site/sources/docs/connect-other-applications.md @@ -12,14 +12,12 @@ To follow the steps in this guide, make sure that you meet the following prerequisites: - * Your server application runs on a Compute Engine VM. IAP Desktop currently can't connect to Cloud SQL - or applications hosted on Kubernetes Engine. * You [created a firewall rule](setup-iap.md) that allows IAP to connect to the port used by the server application. You can use IAP Desktop to access server applications in two ways: -1. You can let IAP Desktop launch and [connect a client application](#connect-a-client-application) +1. You can let IAP Desktop launch and [connect a client application](#connect-the-database-client) for you. IAP Desktop automatically establishes an [IAP TCP forwarding tunnel :octicons-link-external-16:](https://cloud.google.com/iap/docs/using-tcp-forwarding) and keeps the tunnel open until you close the client application. @@ -36,21 +34,6 @@ You can use IAP Desktop to access server applications in two ways: To launch and connect a client application automatically, do the following: -=== "MySQL Shell" - - 1. In the **Project Explorer** tool window, right-click your database VM and select - **Connect client application > MySQL Shell**. - - ![Connect MySQL shell](images/access-server-mysql.png){ width="400" } - - !!! note - - If you don't see the menu entry, then IAP Desktop wasn't able to - find a supported version of MySQL Shell on your computer. - - 1. IAP Desktop now creates an [IAP TCP forwarding tunnel :octicons-link-external-16:](https://cloud.google.com/iap/docs/using-tcp-forwarding) and - launches MySQL shell. - === "Chrome" @@ -70,45 +53,18 @@ To launch and connect a client application automatically, do the following: You can let IAP Desktop open a tunnel and connect to tha tunnel by doing the following: -=== "MySQL Workbench" +=== "Server port" 1. In the **Project Explorer** tool window, right-click your database VM and select - **Tunnel to > MySQL/MariaDB**. - - ![Open tunnel](images/access-server-mysql-tunnel.png){ width="400" } + **Tunnel to > Other server port**. + 1. On the **Forward local port** dialog, enter the port number to connect to. + 1. Click **OK**: A notification appears: ![Baloon notification](images/access-server-baloon.png){ width="300" } - 1. Launch MySQL Workbench. - 1. In MySQL Workbench, go to **Database > Connect to database**. - 1. In the **Connect to database** dialog, configure the following: - - * **Hostname**: `127.0.0.1` - * **Port**: Enter the port number indicated in the notification. - - 1. Click **OK**. - - -=== "pgAdmin" - - 1. In the **Project Explorer** tool window, right-click your database VM and select - **Tunnel to > PostgreSQL**. - - A notification appears: - - ![Baloon notification](images/access-server-baloon.png){ width="300" } - - 1. Launch pgAdmin. - 1. Click **Add new server**. - 1. In the **Register server** dialog, enter a name for the server. - 1. Switch to the **Connection** tab and configure the following: - - * **Host name/address**: `127.0.0.1` - * **Port**: Enter the port number indicated in the notification. - - 1. Click **Save**. + You can now use any client application to connect to the forwarded port. === "Custom" diff --git a/doc/site/sources/docs/connect-sqlserver.md b/doc/site/sources/docs/connect-sqlserver.md index 473ea6773..e0562cabb 100644 --- a/doc/site/sources/docs/connect-sqlserver.md +++ b/doc/site/sources/docs/connect-sqlserver.md @@ -13,11 +13,10 @@ To follow the steps in this guide, make sure that you meet the following prerequisites: - * You run SQL Server on a Compute Engine VM. IAP Desktop currently can't connect to Cloud SQL. * You downloaded and installed [SQL Server Management Studio (SSMS) :octicons-link-external-16:](https://learn.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms) on your computer. * You [created a firewall rule](setup-iap.md) that allows IAP to connect to port 1433 of your SQL Server VM. -You can use IAP Desktop to access SQL Server in two ways: +You can use IAP Desktop to access SQL Server in two ways: 1. You can let IAP Desktop launch and [connect SQL Server Management Studio](#connect-sql-server-management-studio) (SSMS) for you. IAP Desktop automatically establishes an @@ -27,21 +26,28 @@ You can use IAP Desktop to access SQL Server in two ways: 1. You can let IAP Desktop [open a tunnel](#open-a-tunnel). You can then use any tool to connect to that tunnel and the tunnel remains open until you close IAP Desktop. -## Prepare your project - -Depending on how you've deployed SQL Server, you might need to configure the -[Cloud SQL Auth Proxy :octicons-link-external-16:](https://cloud.google.com/sql/docs/mysql/sql-proxy) -before you can connect. +The way IAP Desktop uses IAP-TCP to connect to SQL Server differs depending on +whether you're running SQL Server on Compute Engine or using Cloud SQL for SQL Server: === "Compute Engine" - - You don't need the Cloud SQL Auth Proxy. + + If you're running SQL Server on Compute Engine, you don't need any additional VM to + let IAP Desktop connect to SQL Server. The only prerequisite is + [a firewall rule](setup-iap.md) that allows IAP-TCP to connect to + port 1433 of your SQL Server VM. + + ![Connect to SQL Server](images/connect-database-direct.png) === "Cloud SQL" + + If you're using Cloud SQL for SQL Server, you need an additional VM that runs the + [Cloud SQL Auth Proxy :octicons-link-external-16:](https://cloud.google.com/sql/docs/mysql/sql-proxy). This VM is necessary + because IAP-TCP doesn't support creating tunnels to managed services such as Cloud SQL. + + ![Connect to SQL Server](images/connect-database-sqlproxy.png) + + To deploy a Cloud SQL Auth Proxy VM, see [Set up a Cloud SQL Proxy VM](setup-cloudsql.md). - You must set up a [Cloud SQL Auth Proxy VM](setup-cloudsql.md) to connect to SQL Server. - The extra VM is necessary because IAP-TCP doesn't support direct connections to Cloud SQL - instances. ## Connect SQL Server Management Studio diff --git a/doc/site/sources/docs/images/connect-database-direct.png b/doc/site/sources/docs/images/connect-database-direct.png new file mode 100644 index 0000000000000000000000000000000000000000..5487d133d8fb16b300eaaa97aa97b28b5f9326db GIT binary patch literal 9635 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