Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
As workloads AWS podem autenticar-se no Azure Databricks sem segredos de longo prazo ao trocar um token de identidade OIDC assinado pela AWS. O caminho recomendado chama a API STS GetWebIdentityToken AWS, que funciona em qualquer lugar onde a carga de trabalho tenha credenciais AWS.
Casos de uso
- funções Lambda a chamar APIs do Azure Databricks (a acionar tarefas, a consultar armazéns SQL)
- Pipelines ETL com base em EC2/ECS que se autenticam no Azure Databricks sem credenciais secretas
- Cargas de trabalho de aprendizagem automática baseadas em EKS que acedem a pontos de extremidade de disponibilização de modelos
- Padrões entre contas onde cargas de trabalho numa conta AWS federam-se numa conta Azure Databricks gerida por outra equipa
- Melhoria da postura de segurança pela eliminação de PATs ou segredos de longa duração do Azure Databricks armazenados no AWS Secrets Manager
Pré-requisitos AWS
As etapas seguintes têm de ser concluídas para ativar a federação de identidade de carga de trabalho para cargas de trabalho do AWS IAM.
Passo 1: Ativar a federação de identidades de saída AWS IAM
Ative a federação de identidade de saída na sua conta AWS:
import boto3
boto3.client('iam').enable_outbound_web_identity_federation()
Também pode ativar esta opção na Consola do IAM, em Definições da conta>Ativar "federação de identidade web de saída".
Passo 2: Conceder sts:GetWebIdentityToken permissão
Atribua permissão à função do IAM sts:GetWebIdentityToken da carga de trabalho:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["sts:GetWebIdentityToken"],
"Resource": "*",
"Condition": {
"ForAllValues:StringEquals": {
"sts:IdentityTokenAudience": "databricks"
},
"NumericLessThanEquals": {
"sts:DurationSeconds": 300
}
}
}
]
}
Note
A condição de destinatário garante que a função só pode solicitar tokens destinados ao Azure Databricks. A condição de duração limita a vida útil do token a 300 segundos. Pode ajustar a duração até 3600 segundos consoante as suas necessidades de carga de trabalho, mas recomenda-se uma vida útil mais curta.
Passo 3: Note a URL específica do emissor da conta
Recupere a URL específica do emissor da conta:
import boto3
info = boto3.client('iam').get_outbound_web_identity_federation_info()
print(info['IssuerUrl']) # https://<uuid>.tokens.sts.global.api.aws
Criar uma política de federação
Important
As políticas de federação do Azure Databricks são criadas ao nível da conta (não ao nível do espaço de trabalho). O host CLI do Azure Databricks deve ser definido como https://accounts.azuredatabricks.net e o utilizador deve ser administrador de conta.
Crie uma política de federação de identidades de cargas de trabalho usando a Databricks CLI. Defina o emissor para o URL específico da sua conta a partir do Passo 3. Para instruções detalhadas, consulte Configurar uma política de federação de principal de serviço.
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>"
}
}'
Autenticar-se no Databricks
Depois de criares a política de federação, usa o SDK Databricks para autenticar as tuas cargas de trabalho AWS. O exemplo seguinte utiliza o padrão do IdTokenSource SDK para recuperar um token AWS STS e trocá-lo por um token Azure Databricks OAuth.
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
Recomenda-se uma duração do token de 300 segundos. Pode ajustar até 3600 segundos consoante a necessidade de carga de trabalho.
Para um exemplo de troca manual de tokens, veja Autenticar com um token de fornecedor de identidade.