Skyporten med Databricks - Maskinporten for deling av skyressurser
For deg som skal tilby via Databricks
OIDC Oppsett
For å sette opp Databricks til å bruke Maskinporten, kan man bruke deres oppsett for M2M OIDC delta sharing, se oppsett her.
OIDC Federation Policy må være satt opp på følgende måte:
- Policy name: Valgfritt
- Issuer URL: Skyporten issuer url, se .well-known her
- Subject claim:
sub - Subject: sub på skyportens format
0192:[RECIPIENT ORGNO];[SKYPORTEN SCOPE]feks:0192:310175838;difitest:test2 - Audiences: Valgfritt, feks https://difitest.no
Tildel tabeller til den nyopprettede recipienten som ved vanlig delta sharing
For deg som skal konsumere fra Databricks
Oppsett
Prosjektet krever at man har et ekte Maskinporten-token mot det rette miljøet. Her er informasjon om hvordan du kommer i gang med Maskinporten. Her er et node.js eksempel på token-generering for skyporten.
Ettersom databricks har integrert pålogging og uthenting av data, krever denne pt signering med nøkler, og ikke virksomhetssertifikat. Konsumentbiblioteket er opensource og pull requests er ønsket!
Pakken for automatisert uthenting gjennom python er releaset her
pip3 install delta-sharing
Create a Databricks profile
Følgende må oppgis fra tilbyder basert på oppsett i pakken :
- endpoint
- audience
- scope
Lagre som oauth_config.share
{
"shareCredentialsVersion": 2,
"type": "oauth_jwt_bearer_private_key_jwt",
"endpoint": "[FROM PROVIDER]",
"auth": {
"tokenEndpoint": "[SKYPORTEN TOKEN ENDPOINT]",
"clientId": "[SKYPORTEN CLIENT ID]",
"issuer": "[SKYPORTEN ISSUER]",
"audience": "[AUDIENCE SET IN PROVIDERS DATABRICKS OIDC Federation Policy]",
"scope": "[PROVIDER SCOPE]",
"privateKey": {
"privateKeyFile": "[PATH TO PRIVATE KEY FILE]",
"keyId": "[SKYPORTEN KEY ID]",
"algorithm": "RS256"
}
}
}
Run
Kjør pakken med følgende kommandoer i et python-miljø eller som en del av en notebook
import delta_sharing
# Point to the profile file. It can be a file on the local file system or a file on a remote storage.
profile_file = "oauth_config.share"
# Create a SharingClient.
client = delta_sharing.SharingClient(profile_file)
#
# List all shared tables.
tables = client.list_all_tables()
print(tables)