Vain yksityinen IP-pilvi: Hyvä, huono ja ruma

-data on kaikkien yritysten uusi kultakaivos , ja tämän aarteen on oltava pidä turvassa ja suojattu . Siksi useiden vuosien ajan minkä tahansa tietokannan ylläpitäjän yleinen hyvä käytäntö on poistaa kaikki julkiset pääsyt tietokantaan , etenkin julkisen IP-osoitteen ja myöntää pääsyn vain yksityiseltä IP-osoitteelta.
Kaikki noudattavat tätä ”kultaista” sääntöä tietoturvaryhmät ja he tarvitsevat saman mallin mihin tahansa pilvipalveluun.

Cloud SQL -palvelun , Google Cloudin hallinnoidun tietokantapalvelun, avulla voit:

Näiden ominaisuuksien ansiosta voit pakottaa noudattamaan tietoturvatiimin vaatimuksia .

Mutta onko se ongelma, kun työskentelemme da eikö sinulla ole julkista IP-osoitetta Cloud SQL -esiintymissä?

Tarkistetaan tämä yli 3 käyttötapauksessa:

  1. Laske moottori -yhteydet
  2. Palvelimettomat palvelut liitettävyys
  3. Paikallinen ympäristö liitettävyys

Pilvinen SQL-välityspalvelimen binaarinen

Ennen kuin perehdyn käyttötapauksiin, haluaisin keskittyä nopeasti Pilvipalvelimen SQL-välityspalvelin

  • Tämä binääri avaa suojattu ja päästä päähän salattu tunneli . Yhteenvetona voidaan todeta, että vaikka tietokannassasi ei olisikaan SSL-varmentetta, tiedot salataan kuljetuksen aikana.
  • Ennen tunnelin avaamista binaarinen tarkistaa IAM-palvelun sovellusliittymä, jos nykyinen kirjautumistunnus on valtuutettu pääsemään Cloud SQL -esiintymään . Tämä on ylimääräinen suojaustaso tavallisen tietokannan todennuksen lisäksi käyttäjän / salasanan avulla.
  • Tunneli voidaan avata paikallisessa portissa (TCP-yhteystila) tai Unix-liitäntään (ei mahdollista Windows-ympäristö)

Hyvä: Laske moottorin liitettävyys

Koska tämä ”yksityinen IP-suojausmalli” on rakennettu vanhan arkkitehtuurin (eli on-prem VM ja yksityinen verkko) rajoitus sopii täydellisesti IaaS-maailmaan (eli Laske moottori + VPC).
Mainitsen Compute Enginen, mutta se pätee myös kaikkiin palveluihin, jotka käyttävät Compute Engine -esiintymiä: Dataflow, Dataproc, GKE,…

  • Asenna virtuaalikoneesi sama VPC kuin Cloud SQL -esiintymien yksityinen IP.
  • Käytä Cloud SQL -esiintymien yksityistä IP: tä päästäksesi siihen sovelluksestasi, joka on asennettu Compute Enginen.
  • Avaa vaaditut palomuurisäännöt, jos tarvitaan.

Se on ”hyvä” !!

Huomaa: Cloud SQL-välityspalvelimen käytöstä tässä tapauksessa voidaan keskustella. Se lisää ylimääräisen suojaustason tarkistamalla valtuutuksen IAM-palveluihin ja salattuun tietoliikenteeseen, mutta lisää myös ylimääräisen viiveen ja mahdollisen vikapisteen. Kyse on kompromisseista.

Huono: Palvelimettomat palvelut -yhteydet

Kun käytämme ”uutta maailmaa” Pilvestä, palvelimettomasta paradigmasta , asiat eivät ole niin hienoja pilvipalvelun , Pilvitoiminnot ja Sovelluskone .

Todellakin, kun otat käyttöön palvelimettomilla alustoilla määritelmän mukaan sinun ei tarvitse hallita palvelimia ja siten -palvelimet eivät ole VPC: ssäsi . Ja näin ollen ei ole mahdollista alusta alkaen päästä Cloud SQL-yksityiseen IP-osoitteeseen , joka on yhdistetty projektisi VPC: hen.

Jos kaivut pilvipalveluun , pilvitoimintoihin ja Sovelluskone , löydät kuinka yhdistää Cloud SQL -esiintymä palvelimettomaan palveluun sisäänrakennetun ominaisuuden ansiosta:

Lisää Cloud SQL -esiintymän yhteyden nimi kokoonpanoon ja tunneli luodaan automaattisesti ilmentymän käynnistyksen yhteydessä.

Todellisuudessa se on yhteys, jonka Cloud SQL -välityspalvelin -binaarinen avaa Unix-pistorasiatilassa . Mutta tämä ratkaisu toimii vain, jos Cloud SQL -esiintymällä on julkinen IP .
Jos kyseessä on vain yksityinen IP , ja vaikka yksityinen IP-yhteystila on olemassa Cloud SQL -välityspalvelimen kanssa, se ei toimi!

Yhdistä palvelimettomat palvelut Cloud SQL -palvelun yksityiseen IP-osoitteeseen

Toivottavasti ratkaisu on olemassa. Voit napsauttaa private IP -välilehti Cloud SQL -yhteysoppaiden tälle ( -esimerkki pilvitoiminnoille ).

Yhteenvetona:

  • Luo palvelimeton VPC-liitin , samalla alueella kuin palvelimeton palvelu. Ja tietysti yhdistetty samaan VPC: hen kuin Cloud SQL -esiintymänne.
    Huomaa, että tänään kaikkia alueita tukee palvelimeton VPC-liitin, mutta näin ei ollut jonkin aikaa.
  • Ota palvelimeton palvelu käyttöön tällä VPC-liittimellä , jota tukee Pilvikäyttö , Pilvitoiminnot ja Sovelluskone
  • Sovelluksessasi käytä pilvipalvelun SQL-yksityistä IP-osoitetta (Unix-liitäntäyhteyden sijaan)

Tämä ratkaisu toimii, mutta tuo käyttöön uuden verkkoelementin , lisäkustannukset ja mahdollinen uusi epäonnistumispiste yhteysketjussa.

Se on ”huono” !!

Ruma: Paikallisen ympäristön liitettävyys

Kun haluat tehdä kyselyn tietokannastasi , joskus tuotannossa, tietokoneellesi asennetun ensisijaisen tietokannan IDE: n kautta , sinun on yhdistettävä paikallinen ympäristösi pilveen SQL-ilmentymä ja siten yksityisen IP: n kautta.

Koska Cloud SQL -instanssilla ei ole julkista IP-osoitetta, et pääse siihen suoraan Internet (tietokoneesi) ja Pilvinen SQL-välityspalvelin eivät myöskään voi . Ratkaisu on luoda linnakkeen isäntä : silta-virtuaalikone ulkomaailman (julkinen IP) ja sisämaailman (yksityinen IP) välillä.

Tätä varten luo pieni Compute Engine -esiintymä , esimerkiksi f1-mikro ( erittäin edullinen, alle 5 dollaria kuukaudessa) tämän saavuttamiseksi.

Turvatiimin vaatimus : Kaikilla virtuaalikoneilla ei saa olla julkista IP-osoitetta. Tietysti 0.0.0.0/0 palomuurisäännöt eivät ole sallittuja, etenkään portissa 22 (ssh)

Bastion-isäntä ilman julkista IP-osoitetta

Uudet rajoitukset käsiteltäväksi ! Mutta se on johdonmukaista: jos suljet oven, se on tarkoitus antaa ikkunan auki!
Joten ei hätää, Google Cloud tarjoaa upean ja helpon ratkaisun tähän: Identity-Aware Proxy (IAP)

IAP: n kanssa sinun on myönnettävä vain Google Cloud IAP IP-alue

35.235.240.0/20 , jotta pääset Compute Engine -laitteeseen palomuurisääntöjen portissa 22 . Näin ollen ei tarvitse avata 0.0.0.0/0 (koko Internet) päästä Compute Engine ssh -porttiin!

Käytä sitten gcloud SDK: ta muodostaaksesi yhteyden linnakkeen isäntäkoneeseen Moottoriesitys
gcloud compute ssh --zone=
Ja taika tapahtuu! gcloud SDK havaitsee automaattisesti Compute Enginen julkisen IP-osoitteen puuttumisen ilmentymä ja avaa automaattisesti IAP-tunnelin yhteyden muodostamiseksi SSH: ssä ilmentymän . Se on näkymätön käyttäjälle!

Tunnistetiedot (tässä käyttäjätili, mutta se voi olla palvelutili) tarvitsee riittävän luvan luoda IAP-tunneli . Roolit ovat roolit / iap.tunnelResourceAccessor tunnelin luomiseksi ja roolit / compute.instanceAdmin.v1 virtuaalikoneen käyttöoikeuksiin

Nyt olet yhdistetty bastion-isäntään, mutta et ole vielä yhdistänyt pilvi-SQL-ilmentymää

IAP-tunnelointi, SSL-portin edelleenlähetys ja Pilvinen SQL-välityspalvelin

Ja siellä “ruma” osa alkaa . Meillä on 2 saavutettavaa asiaa.

  1. Yhdistä linnake-isäntä Cloud SQL -esiintymään kautta yksityinen IP-osoite
  2. Välitä paikallisen ympäristön tietokantayhteyspyyntö linnakkeen isännälle osoitteeseen päästä Cloud SQL -esiintymään Cloud SQL -välityspalvelintunnelin kautta

1. Pilvinen SQL-ilmentymän yhteys bastionin isännästä
Tätä varten tarvitsemme Cloud SQL-välityspalvelimen avaamaan tunnelin bastionin isännän ja Cloud SQL -esiintymän välille.

Ensimmäinen numero: Koska sinulla ei ole julkista IP-osoitetta, et pääse Internetiin!
Voit valita luoda pilvipalvelun NAT bastion-isäntälaskennan ilmentymän IP-alueella. Helpoin tapa on kuitenkin ladata se paikalliseen ympäristöönsi ja sitten kopioi se linnake-isännälle . Voit saavuttaa tämän käyttämällä tätä komentoa.
gcloud compute scp /local/path/to/cloud_sql_proxy :/tmp
Koska voit avata SSH-yhteyden IAP: n kautta, voit käyttää myös scp protokolla (ssh-kopio) kohteeseen kopioi tiedostot IAP: n kautta! Taika !!

Hienoa, nyt sinulla on bastionin isäntäkoneen Compute Engine -esiintymän binääri ja sinulla haluat testata, toimiiko yhteys . Voit suorittaa komennot

#Connect to bastion host
gcloud compute ssh --zone=
#Change the permission of the Cloud SQL proxy binary (do it only once)
chmod +x /tmp/cloud_sql_proxy
#Connect to your Cloud SQL instance
/tmp/cloud_sql_proxy --instances==tcp:3306

Löydät div id = ”069e1dc73b”>

pilvipohjaisen SQL-ilmentymän sivulla

Toinen numero: se ei toimi! Ja syitä on monia!

  • Jos olet luonut linnakkeen isännän Laske moottori oletusparametreilla , erityisesti sovellusliittymän laajuusosassa, sinulla ei ole tarpeeksi laajuutta päästäksesi Cloud SQL -sovellusliittymiin.
    Tämän ratkaisemiseksi sinun on pysäytettävä Compute Engine , muokattava sitä ja muokkaa laajuuksia
  • Kun Cloud SQL -tunneli luodaan, IAM-käyttöoikeudet nykyisiin tunnistetietoihin (tässä Laske moottorin tunnistetiedot ) tarkistetaan . Compute Engine -palvelutilillä ei voi olla tarpeeksi käyttöoikeuksia.
    Tämän ratkaisemiseksi varmista, että palvelun tilillä on vähimmäisroolit : Cloud SQL client, Cloud SQL editor tai Cloud SQL admin
    Compute Enginen oletuspalvelutilillä on roolit / editori rooli. Liian laaja, mutta tarpeeksi käyttötapauksemme varten.
  • Lopuksi oletuksena, kun pyydät Google Cloud -sovellusliittymää, julkista DNS: ää pyydetään . Se tapahtuu, kun Cloud SQL -välityspalvelin pyytää Cloud SQL -sovellusliittymää tai IAM-palvelua, kun tunneli luodaan. Ja koska linnakkeen isäntäkoneella ei ole julkista IP-osoitetta, se voi tavoittaa Internetin ja googleapis.com julkinen DNS.
    Tämän ratkaisemiseksi sinulla on kaksi ratkaisua.Joko määritä Cloud NAT kuten aiemmin ehdotettiin, tai käytä Google Cloud VPC: n hankalaa ominaisuutta: Salli linnakkeen isäntäkoneen nykyinen aliverkko soittaa yksityiselle

    googleapis.com DNS . Tämän saavuttamiseksi siirry VPC: hen, valitse oikea aliverkko ja muokkaa sitä. Valitse sitten On Yksityinen Google Access -valintanapille ja tallenna.

Hienoa! Nyt linnake-isäntäkone voi käyttää Cloud SQL -välityspalvelinta avaamaan tunnelin paikallisesta portista 3306 Cloud SQL -esiintymään, yksityisen IP-osoitteen kautta.

2. Välitä paikallisen ympäristöliikenne Cloud SQL -esiintymään
Tämän saavuttamiseksi emme käytä gcloud ssh sisäänrakennettu ominaisuus, mutta vaihtoehtoinen ratkaisu . Suoran yhteyden muodostamisen ssh: n ja ilmentymien lisäksi gcloud SDK: n avulla voidaan luoda tunneli mihin tahansa porttiin .

Luo siis tunneli bastionin isännän porttiin 22 div div = = d5795cfc2e”>

Laske moottori-ilmentymä ja määritä mielivaltainen paikallinen portti (tässä 4226)

gcloud compute start-iap-tunnel  22 \
--zone= --local-host-port=localhost:4226

Hienoa, tunneli on auki ja voimme käyttää sitä yhdistääksesi linnake-isännän Compute Engine -esiintymän ssh -palvelussa.

Anna tunnelin avautua ja käydä terminaalissa ja avata uusi.

Nyt, muodostetaan yhteys ssh siihen . Yhdessä komennossa saavutat useita pakollisia asioita yhteyden muodostamiseksi :

  • Luo portti, joka välittää paikallisesta ympäristöstä linnakkeen isäntään laskentakone
    -L 3306:localhost:3306
    “oma paikallinen porttini 3306 välitetään edelleen eteenpäin kohde-virtuaalikoneelle (tässä linnake-isännälle) porttiin pääsemiseksi 3306 avattu localhost (eli kohde-virtuaalikone) ”
  • Käytä uudelleen Googlen automaattisesti luomaa -sh-avainta ensimmäisen ssh yhteys bastionin isäntäkoneeseen (tai scp). Tämä yksityinen avain on tallennettu nykyisen käyttäjän home -hakemistoon ~/.ssh
    -i ~/.ssh/google_compute_engine
  • Avaa ssh yhteys olemassa olevan IAP-tunnelin kautta ympäristössä localhost ja välittää ssh liikenne paikallisesta portista 4226
    -p 4226 localhost
  • Kun yhteys bastionin isäntäkoneeseen on haluat suorittaa Cloud SQL -välityspalvelimen tunnelin luomiseksi Cloud SQL -esiintymään portissa 3306. Suorita tätä varten haluamasi komento kaukosäätimessä (linnake-isäntä) --
    -- /tmp/cloud_sql_proxy instances==tcp:3306
  • jälkeen

Ja koota kaikki tämä yhteen

ssh -L 3306:localhost:3306 \
-i ~/.ssh/google_compute_engine \
-p 4226 localhost \
-- /tmp/cloud_sql_proxy instances==tcp:3306

Nyt sinulla on se! Käytä suosikkitietokanta IDE: täsi, liitä se localhost:3306 -palveluun ja kirjaudu sisään tietokantaan käyttäjällä / salasanalla.

Vau! Kaikki tämä, jotta voidaan noudattaa suojausmallia ! Tässä malli rakentamistamme

Se on ”ruma” !!

Muita sivuvaikutuksia

Pilvinen SQL, jolla on yksityinen IP, lisää vain varoitukset . Itse asiassa -vertailu luodaan projektin VPC: n ja Cloud SQL -verkon (hallinnoima Google Cloud) välille.
Ja -vertailuun liittyy 2 rajoitusta:

Tämä viimeisin kohta on erittäin tärkeä ja voi olla esto, jos haluat päästä tietokantatiedostoon toisesta projektista . Itse asiassa toisen projektin VPC: stä haluat luoda kumppanuuden sellaisen projektin kanssa, johon Cloud SQL -esiintymä on saavutettavissa yksityisen IP: n kautta.

Transitiivisuuden rajoituksen takia voit kuitenkin t: Pilvistä SQL-yksityistä IP-osoitetta ei näy toisen projektin VPC: stä.
Kiertotapa on luoda VPN, jolla verrataan kahta VPC: tä .
Se on euh… “rumin”?

Lisävaikutus on App Script -sovellusten kyvyttömyys käyttää Cloud SQL -esiintymiä, jos julkista IP-osoitetta ei ole määritelty.

”Smart” -suojausmallilla on merkitystä

Suojausasioilla ja tietokantojen olemassa olevilla malleilla toimivat hyvin … vanhassa maailmassa.
Nyt Cloud SQL- ja Cloud SQL -välityspalvelinten avulla on olemassa uusia suojaustasoja, jotka mitätöivät vanhat mallit.

Mikä ongelma on siinä, että on julkinen IP, jos mitään IP-alueita ei sallita muodostaa siihen yhteys ?

Se on palomuurisäännön määritelmä vanhassa maailmassa, isn onko se? Estä kaikki IP-osoitteet käyttämästä tätä aluetta / IP-osoitetta, jossa isännöidään tietokantojani

Tietoturvaryhmän huolenaihe : Kuinka olla varma, ettei IP-aluetta sallita?

Tämä kysymys on perusteltu ja siksi voit pakota organisaatiokäytäntö ( Rajoita Valtuutetut verkot Cloud SQL -esiintymissä ) estämään julkisen IP-alueen lisäämisen Cloud SQL -esiintymissä , ja tämä, koko yritys.

Lopulta sallimalla julkisen IP-osoitteen Cloud SQL -esiintymissä vältetään paljon kiertotapoja ja outoja malleja käsiteltäväksi, ja turvallisuustasoa alentamatta.
Lisäksi luotu tunneli on salattu ja varmistaa korkean turvallisuustason ja luottamuksellisuus.

Pilvi muuttaa paradigmoja (katso Beyond Corp ) ja suojausmalli on päivitettävä niiden noudattamiseksi.
Älykkäät suojausmallit ovat parempia kuin vanhat suojausmallit!

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *