Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
AWS-Workloads können sich bei Azure Databricks ohne langfristige Geheimnisse authentifizieren, indem sie ein AWS-signiertes OIDC-Identitätstoken austauschen. Der empfohlene Pfad ruft die AWS STS-API GetWebIdentityToken auf, die überall funktioniert, wo die Workload AWS-Anmeldeinformationen enthält.
Anwendungsfälle
- Lambda-Funktionen, die Azure Databricks APIs aufrufen (Auslösen von Aufträgen, Abfragen von SQL Warehouses)
- EC2/ECS-basierte ETL-Pipelines zur Authentifizierung bei Azure Databricks ohne Geheimnisse
- EKS-basierte ML-Workloads, die auf Endpunkte für die Modellbereitstellung zugreifen
- Kontoübergreifende Muster, bei denen Workloads in einem AWS-Konto mit einem von einem anderen Team verwalteten Azure Databricks Konto verbunden sind
- Verbesserung des Sicherheitsstatus durch Beseitigung langlebiger Azure Databricks PATs oder Geheimnisse vom AWS Secrets Manager
AWS-Voraussetzungen
Die folgenden Schritte müssen ausgeführt werden, um den Workload-Identitätsverbund für AWS IAM-Workloads zu aktivieren.
Schritt 1: Aktivieren Sie die ausgehende AWS IAM-Verbundidentität
Aktivieren Des ausgehenden Identitätsverbunds für Ihr AWS-Konto:
import boto3
boto3.client('iam').enable_outbound_web_identity_federation()
Sie können dies auch in der IAM-Konsole unter Kontoeinstellungen>"Ausgehender Webidentitätsverbund aktivieren" aktivieren.
Schritt 2: Erteilen der sts:GetWebIdentityToken Berechtigung
Erteilen Sie der IAM-Rolle der Workload die sts:GetWebIdentityToken-Berechtigung:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["sts:GetWebIdentityToken"],
"Resource": "*",
"Condition": {
"ForAllValues:StringEquals": {
"sts:IdentityTokenAudience": "databricks"
},
"NumericLessThanEquals": {
"sts:DurationSeconds": 300
}
}
}
]
}
Hinweis
Die Zielgruppenbedingung stellt sicher, dass die Rolle nur Token anfordern kann, die auf Azure Databricks ausgerichtet sind. Die Dauerbedingung begrenzt die Tokenlebensdauer auf 300 Sekunden. Sie können die Dauer bis zu 3600 Sekunden basierend auf Ihren Workloadanforderungen anpassen, aber kürzere Lebensdauern werden empfohlen.
Schritt 3: Beachten Sie die kontospezifische Aussteller-URL
Abrufen der kontospezifischen Aussteller-URL:
import boto3
info = boto3.client('iam').get_outbound_web_identity_federation_info()
print(info['IssuerUrl']) # https://<uuid>.tokens.sts.global.api.aws
Erstellen einer Verbundrichtlinie
Important
Azure Databricks Verbundrichtlinien werden auf Kontoebene (nicht auf Arbeitsbereichsebene) erstellt. Der Azure Databricks CLI-Host muss auf https://accounts.azuredatabricks.net festgelegt sein, und der Benutzer muss Kontoadministrator sein.
Erstellen Sie eine Workload-Identitätsverbundrichtlinie mithilfe der Databricks CLI. Legen Sie den Aussteller auf Ihre kontospezifische Aussteller-URL aus Schritt 3 fest. Ausführliche Anweisungen finden Sie unter Konfigurieren einer Dienstprinzipalverbundrichtlinie.
databricks account service-principal-federation-policy create ${SP_ID} --json '{
"oidc_policy": {
"issuer": "https://<uuid>.tokens.sts.global.api.aws",
"audiences": ["databricks"],
"subject": "arn:aws:iam::<account-id>:role/<workload-role-name>"
}
}'
Authentifizieren bei Databricks
Nachdem Sie die Verbundrichtlinie erstellt haben, verwenden Sie das Databricks SDK, um Ihre AWS-Workloads zu authentifizieren. Im folgenden Beispiel wird das SDK-Muster IdTokenSource verwendet, um ein AWS STS-Token abzurufen und es für ein Azure Databricks OAuth-Token auszutauschen.
import boto3
from databricks.sdk import WorkspaceClient
from databricks.sdk import oidc
from databricks.sdk.core import Config, credentials_strategy, oidc_credentials_provider
class AwsStsTokenSource(oidc.IdTokenSource):
def __init__(self, audience="databricks", region="us-east-1"):
self._audience = audience
self._region = region
def id_token(self) -> oidc.IdToken:
sts = boto3.client("sts", region_name=self._region)
resp = sts.get_web_identity_token(
Audience=[self._audience],
SigningAlgorithm="RS256",
DurationSeconds=300,
)
return oidc.IdToken(jwt=resp["WebIdentityToken"])
@credentials_strategy("aws-sts-wif", [])
def aws_sts_wif_strategy(cfg: Config):
return oidc_credentials_provider(cfg, AwsStsTokenSource())
w = WorkspaceClient(
host="https://my-workspace.cloud.databricks.com",
client_id="<service-principal-uuid>",
credentials_strategy=aws_sts_wif_strategy
)
# No secrets needed
clusters = w.clusters.list()
Hinweis
Die Tokendauer von 300 Sekunden wird empfohlen. Sie können bis zu 3600 Sekunden je nach Workloadanforderungen anpassen.
Ein Beispiel für einen manuellen Tokenaustausch finden Sie unter Authentifizieren mit einem Identitätsanbietertoken.