Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las cargas de trabajo de AWS se pueden autenticar en Azure Databricks sin secretos a largo plazo intercambiando un token de identidad OIDC firmado por AWS. La ruta de acceso recomendada llama a la API de AWS STS GetWebIdentityToken , que funciona en cualquier lugar donde la carga de trabajo tenga credenciales de AWS.
Casos de uso
- Funciones lambda que llaman a las API de Azure Databricks (desencadenamiento de trabajos, consulta de almacenes SQL)
- Pipelines de ETL basados en EC2/ECS que se autentican con Azure Databricks sin usar secretos
- Cargas de trabajo de ML basadas en EKS que acceden a puntos de conexión de servicio de modelos
- Patrones entre cuentas en los que las cargas de trabajo de una cuenta de AWS se federan en una cuenta de Azure Databricks administrada por otro equipo
- Mejora de la postura de seguridad mediante la eliminación de PAT o secretos de Azure Databricks de larga duración de AWS Secrets Manager
Requisitos previos de AWS
Se deben completar los siguientes pasos para habilitar la federación de identidades de cargas de trabajo para cargas de trabajo de AWS IAM.
Paso 1: Habilitación de la federación de identidades salientes de AWS IAM
Active la federación de identidades de salida en su cuenta de AWS:
import boto3
boto3.client('iam').enable_outbound_web_identity_federation()
También puede habilitarlo en la consola de IAM en Configuración de la cuenta>Habilitar Federación de identidades web salientes.
Paso 2: Conceder sts:GetWebIdentityToken permiso
Conceda al rol de IAM de la carga de trabajo el permiso sts:GetWebIdentityToken:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["sts:GetWebIdentityToken"],
"Resource": "*",
"Condition": {
"ForAllValues:StringEquals": {
"sts:IdentityTokenAudience": "databricks"
},
"NumericLessThanEquals": {
"sts:DurationSeconds": 300
}
}
}
]
}
Note
La condición de destinatarios garantiza que el rol solo pueda solicitar tokens dirigidos a Azure Databricks. La condición de duración limita la duración del token a 300 segundos. Puede ajustar la duración hasta un máximo de 3600 segundos según las necesidades de su carga de trabajo, pero se recomiendan duraciones más cortas.
Paso 3: Anote la dirección URL del emisor específica de la cuenta
Recupere la dirección URL del emisor específica de la cuenta:
import boto3
info = boto3.client('iam').get_outbound_web_identity_federation_info()
print(info['IssuerUrl']) # https://<uuid>.tokens.sts.global.api.aws
Creación de una directiva de federación
Important
Las directivas de federación de Azure Databricks se crean a nivel de cuenta (no a nivel de espacio de trabajo). El host de la CLI de Azure Databricks debe establecerse en https://accounts.azuredatabricks.net y el usuario debe ser administrador de la cuenta.
Cree una política de federación de identidades de cargas de trabajo mediante la Databricks CLI. Establezca el emisor en la URL del emisor específica de su cuenta del paso 3. Para obtener instrucciones detalladas, consulte Configurar una directiva de federación de una entidad de servicio.
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>"
}
}'
Autenticación en Databricks
Después de crear la directiva de federación, use el SDK de Databricks para autenticar las cargas de trabajo de AWS. En el ejemplo siguiente se usa el patrón del IdTokenSource SDK para recuperar un token stS de AWS y intercambiarlo por un token de OAuth de Azure Databricks.
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
Se recomienda la duración del token de 300 segundos. Puede ajustar hasta 3600 segundos en función de las necesidades de carga de trabajo.
Para ver un ejemplo de intercambio de tokens manual, consulte Autenticación con un token de proveedor de identidades.