Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
AWS-arbetsbelastningar kan autentisera till Azure Databricks utan långsiktiga hemligheter genom att utbyta en AWS-signerad OIDC-identitetstoken. Den rekommenderade sökvägen anropar AWS STS GetWebIdentityToken API, som fungerar överallt där arbetsbelastningen har AWS-autentiseringsuppgifter.
Användningsfall
- Lambda-funktioner som anropar Azure Databricks API:er (utlöser jobb, frågar SQL-lager)
- EC2/ECS-baserade ETL-pipelines som autentiserar till Azure Databricks utan hemligheter
- EKS-baserade ML-arbetslaster med åtkomst till slutpunkter för modellservering
- Korskontomönster där arbetsbelastningar i ett AWS-konto federeras till ett Azure Databricks konto som hanteras av ett annat team
- Förbättring av säkerhetsläget genom att ta bort långlivade Azure Databricks-PAT:ar eller hemligheter ur AWS Secrets Manager
AWS-krav
Följande steg måste slutföras för att aktivera arbetsbelastningsidentitetsfederation för AWS IAM-arbetsbelastningar.
Steg 1: Aktivera utgående identitetsfederation för AWS IAM
Aktivera utgående identitetsfederation på ditt AWS-konto:
import boto3
boto3.client('iam').enable_outbound_web_identity_federation()
Du kan också aktivera detta i IAM-konsolen under Kontoinställningar>Aktivera "Utgående webbidentitetsfederation".
Steg 2: Bevilja sts:GetWebIdentityToken behörighet
Bevilja arbetsbelastningens IAM-rollbehörighet sts:GetWebIdentityToken :
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["sts:GetWebIdentityToken"],
"Resource": "*",
"Condition": {
"ForAllValues:StringEquals": {
"sts:IdentityTokenAudience": "databricks"
},
"NumericLessThanEquals": {
"sts:DurationSeconds": 300
}
}
}
]
}
Note
Målgruppsvillkoret säkerställer att rollen endast kan begära token som är riktade till Azure Databricks. Varaktighetsvillkoret begränsar tokens livslängd till 300 sekunder. Du kan justera varaktigheten upp till 3 600 sekunder baserat på dina arbetsbelastningsbehov, men kortare livslängd rekommenderas.
Steg 3: Observera url:en för den kontospecifika utfärdaren
Hämta url:en för den kontospecifika utfärdaren:
import boto3
info = boto3.client('iam').get_outbound_web_identity_federation_info()
print(info['IssuerUrl']) # https://<uuid>.tokens.sts.global.api.aws
Skapa en federationsprincip
Important
Azure Databricks federationsprinciper skapas på kontonivå (inte på arbetsytenivå). Azure Databricks CLI-värden måste ställas in på https://accounts.azuredatabricks.net och användaren måste vara kontoadministratör.
Skapa en identitetsfederationsprincip för arbetsbelastning med hjälp av Databricks CLI. Ange utfärdaren till din kontospecifika utfärdar-URL från steg 3. Detaljerade instruktioner finns i Konfigurera en federationsprincip för ett tjänsthuvudnamn.
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>"
}
}'
Autentisera till Databricks
När du har skapat federationsprincipen använder du Databricks SDK för att autentisera dina AWS-arbetsbelastningar. I följande exempel används SDK:ns IdTokenSource mönster för att hämta en AWS STS-token och byta ut den mot en Azure Databricks OAuth-token.
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()
Note
Tokenvaraktighet på 300 sekunder rekommenderas. Du kan justera upp till 3 600 sekunder baserat på arbetsbelastningsbehov.
Ett exempel på manuell tokenutbyte finns i Autentisera med en identitetsprovidertoken.