Sikkerhed i stof Spark

Opret et kontrolleret udførelsesmiljø, styr udgående data, og gennemtving færrest rettigheder, samtidig med at du aktiverer sikker hemmelig adgang.

Administreret privat slutpunkt (MPE)

Scenarie: Du er datatekniker, der arbejder med følsomme data i Fabric Spark. Dit sikkerhedsteam har et krav om at køre alle koderne i et netværksisoleret miljø for at øge sikkerheden.
  • Aktivér administreret virtuelt netværk (VNets). Hvis du vil aktivere administrerede VNets, skal du se offentlig dokumentation. Microsoft Fabric opretter og administrerer administrerede virtuelle netværk (VNets) for hvert Fabric-arbejdsområde. De leverer netværksisolering til Fabric Spark-arbejdsbelastninger, hvilket betyder, at Microsoft Fabric udruller beregningsklyngerne i et dedikeret netværk pr. arbejdsområde og fjerner dem fra det delte virtuelle netværk.

  • I produktion skal du bruge administrerede VNets til sikker udførelse af Spark Notebooks.

  • Når du opretter et administreret privat slutpunkt (MPE), oprettes det som standard på arbejdsområdeniveau.

  • Når du aktiverer Private Link (PL) på lejerniveau, aktiverer systemet administrerede VNet'er for alle arbejdsområder i lejeren. Når du har aktiveret PL-indstillingen, opretter systemet et administreret virtuelt netværk for arbejdsområdet, når du kører det første Spark-job (Notebook- eller Spark-jobdefinitioner). Systemet opretter også det virtuelle netværk, når du udfører en Lakehouse-operation, såsom Load to Table eller en bordvedligeholdelsesoperation (Optimer eller Vakuum).

Notat

Når du aktiverer administrerede VNets, bliver startpuljer utilgængelige, fordi de kører i et delt netværk.

Beskyttelse af udgående adgang til arbejdsområde (WS OAP)

Scenarie: Du er bekymret for, at nogen ved et uheld kan skrive produktionsdata ud til uautoriserede destinationer ved hjælp af Spark-notesbøger, og du vil styre det.

Aktivér beskyttelse af udgående adgang til arbejdsområdet (WS OAP). Dette sikrer, at udgående internetforbindelse fra Spark kun går til godkendte destinationer via administrerede private slutpunkter. 

  • Blokering af offentlige biblioteker: Dette blokerer også installationen af offentlige biblioteker (fra PyPi, Maven osv.). Derfor skal du pakke dine biblioteker som JAR'er eller hjulfiler og uploade brugerdefinerede biblioteker til miljøet eller til ressourcer og installere med % pip-installation i notesbøgerne. En ting at bemærke er, at hvis du føjer det til ressourcer og installerer med indbygget %pip installerer, er miljøets udgivelsestid kortere. Dette er nyttigt til hurtig udvikling og test. Hvis du vil genbruge pakkerne på tværs af forskellige notesbøger, anbefales det at publicere til miljøet. En anden metode er at oprette forbindelse til dit private lager. Du kan finde flere oplysninger i dokumentationen til Beskyttelse af udgående adgang til Workspace for data engineering-arbejdsbelastninger
Scenarie: Skal du aktivere WS OAP i udviklingsmiljøer?

Overvej ikke at aktivere WS OAP i udvikling eller lavere arbejdsområder, fordi det påvirker udviklingsprocessen. Når notesbogen eller Spark-jobdefinitionerne (SJD'er) er testet med offentlige biblioteker, skal du teste den samme notesbog med brugerdefinerede biblioteker. Efter korrekt kodegennemgang skal du installere til højere miljøer og derefter aktivere WS OAP. Hvis du vil beskytte selv udviklingsmiljøet, kan du aktivere WS OAP, men det kan hindre udviklingsprocessen. Startpuljer er ikke tilgængelige, når du aktiverer WS OAP.

Adgang til Azure Key Vault (AKV) fra Notebook

Scenarie: Du er datatekniker, og du vil oprette forbindelse til flere datakilder ved hjælp af sikrede legitimationsoplysninger fra Spark Notebooks.

Gem legitimationsoplysningerne sikkert i Azure Key Vault (AKV). Gem ikke en enkelt nøgleboks til at gemme alle hemmeligheder. Brug i stedet flere nøglebokse baseret på projekter/domæner, hvis det er muligt.

Adgang til Azure Key Vault (AKV) fra Notebook

  • Netværk: Vi anbefaler, at du beskytter din AKV med firewallregler for kun at tillade adgang fra kendte netværk. Du tillader dog Fabric Sparks IP-adresser i dine firewallregler. Hvis du vil oprette sikker forbindelse til beskyttede AKV'er fra Fabric Spark Notebooks, anbefaler vi, at du opretter et administreret privat slutpunkt til AKV. Én AKV kan kun understøtte op til 64 private slutpunkter (Azure-abonnement og tjenestegrænser, kvoter og begrænsninger). 

  • Godkendelse: Systemet udfører Fabric Spark-notesbøger og SJD'er i konteksten for den bruger, der sender jobbene/notesbøgerne. For at få adgang til AKV'en skal den indsendende bruger have tilstrækkelig adgang til at hente hemmeligheden ("Key Vault Secrets Officer"). Se bedste praksis for AKV: Giv tilladelse til programmer til at få adgang til en Azure-nøgleboks ved hjælp af Azure RBAC.

    • Du kan bruge notebookutils (tidligere kaldet mssparkutils) til at få adgang til AKV'en ved hjælp af legitimationsoplysningerne for den bruger, der kører Notebook/SJD:

    notebookutils.credentials.getSecret('<AKV URL>', 'Secret Name')

  • I produktion anbefaler vi ikke, at du giver brugeren adgang til AKV'er i produktionsmiljøet. Brug i stedet tjenestekonti til at få adgang til din Key Vault (KV). Send notesbøgerne/jobbene ved hjælp af tjenestekontoen. 

  • I nogle tilfælde har den tjenestekonto, der sender jobbet, adgang til læsehemmeligheder fra AKV. 

  • I nogle tilfælde er denne tjenestekonto normalt en DevOps-konto, der muligvis ikke har adgang til at læse hemmeligheder fra AKV. I sådanne tilfælde er legitimationsgenerator nyttig til at få adgang til AKV'en ved hjælp af et andet SPN (Service Principal Name).

Her er eksemplet på Scala-kodestykket:

val clientSecretCredential: ClientSecretCredential = new ClientSecretCredentialBuilder()
  .clientId("<client id here>")
  .clientSecret("<client secret here>")
  .tenantId("<tenant id here>")
  .build()

val secretClient: SecretClient = new SecretClientBuilder()
  .vaultUrl("<vault url here>")
  .credential(clientSecretCredential)
  .buildClient()

val secretName = "<your value>"
val retrievedSecret = secretClient.getSecret(secretName)
println(s"Retrieved secret: ${retrievedSecret.getValue}")

Notat

Undlad at hardcode nogen hemmeligheder eller adgangskoder i almindelig tekst i din kode. Brug altid en sikker boks (f.eks. Azure Key Vault) til at gemme og hente dine hemmeligheder.