Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Você pode usar os utilitários de credenciais para obter tokens de acesso e gerenciar segredos no Azure Key Vault. O notebookutils.credentials módulo se integra à ID do Microsoft Entra para aquisição de token e ao Azure Key Vault para gerenciamento de segredo, para que você possa se conectar aos recursos do Azure com segurança sem expor credenciais no código.
Os utilitários de credenciais estão disponíveis nos notebooks Python, PySpark, Scala e R. Os exemplos nesta página usam Python como o idioma principal, com equivalentes Scala e R mostrados em que a API pública dá suporte a eles.
Importante
Nunca codifique segredos ou credenciais diretamente no código do notebook. Sempre use o Azure Key Vault para armazenar valores confidenciais e recuperá-los em runtime com notebookutils.credentials.getSecret.
Restrições e segurança
Antes de usar utilitários de credenciais, lembre-se dessas restrições:
- Expiração do token – os tokens expiram após um período. Para operações de execução prolongada, implemente a lógica de atualização para solicitar um novo token antes da expiração.
-
Limitações de escopo do principal de serviço – ao executar sob um principal de serviço, os tokens para o
pbidestinatário têm escopos restritos em comparação com a identidade do usuário. -
MSAL para escopo completo – Se você precisar do escopo de serviço completo do Fabric em um principal de serviço, use a autenticação MSAL em vez de
getToken. - Redação secreta – o Notebook redige automaticamente valores secretos para evitar a exposição acidental.
- Permissões do Key Vault – Você deve ter permissões apropriadas (Obter para leitura, Definir para gravação) no Azure Key Vault para acessar ou armazenar segredos.
- Alterações de audiência – os escopos de audiência dos tokens podem evoluir ao longo do tempo. Verifique os escopos atuais na documentação.
Execute o seguinte comando para obter uma visão geral dos métodos disponíveis:
A tabela a seguir lista os métodos de credenciais disponíveis:
| Método | Signature | Descrição |
|---|---|---|
getToken |
getToken(audience: String): String |
Retorna um token do Microsoft Entra para o público-alvo especificado. |
getSecret |
getSecret(akvName: String, secret: String): String |
Retorna o valor de um segredo do Azure Key Vault especificado. |
putSecret |
putSecret(akvName: String, secretName: String, secretValue: String): String |
Armazena um segredo no cofre de chaves Azure especificado. Esse método não está disponível na API scala pública. |
isValidToken |
isValidToken(token: String): Boolean |
Verifica se o token fornecido é válido e não expirou. Esse método não está disponível na API scala pública. |
Obter o token
getToken retorna um token do Microsoft Entra para um determinado público-alvo. A tabela a seguir mostra as chaves de público disponíveis no momento:
| Chave de audiência | Recurso | Caso de uso |
|---|---|---|
storage |
Armazenamento do Azure | Acessar o ADLS Gen2 e o Blob Storage |
pbi |
Power BI | Chamar APIs REST do Power BI e do Fabric |
keyvault |
Azure Key Vault | Recuperar segredos do Key Vault |
kusto |
BD KQL do Synapse RTA | Conectar o Azure Data Explorer |
Execute o seguinte comando para obter o token:
Exemplos de uso de tokens
Você pode usar o token retornado para se autenticar em vários serviços do Azure.
Armazenamento do Azure
storage_token = notebookutils.credentials.getToken('storage')
APIs REST do Power BI e do Fabric
import requests
pbi_token = notebookutils.credentials.getToken('pbi')
headers = {
'Authorization': f'Bearer {pbi_token}',
'Content-Type': 'application/json'
}
response = requests.get(
'https://api.powerbi.com/v1.0/myorg/datasets',
headers=headers
)
if response.status_code == 200:
datasets = response.json()
print(f"Found {len(datasets['value'])} datasets")
Azure Data Explorer (Kusto)
kusto_token = notebookutils.credentials.getToken('kusto')
Azure Key Vault
keyvault_token = notebookutils.credentials.getToken('keyvault')
Usar tokens com o SDK do Azure
Blocos de anotações de malha não dão suporte DefaultAzureCredential diretamente. Você pode usar uma classe de credencial personalizada como uma solução alternativa para passar tokens NotebookUtils para clientes do SDK do Azure.
from azure.core.credentials import AccessToken, TokenCredential
import jwt
class NotebookUtilsCredential(TokenCredential):
"""Custom credential that uses notebookutils tokens for Azure SDK."""
def __init__(self, audience="storage"):
self.audience = audience
def get_token(self, *scopes, claims=None, tenant_id=None, **kwargs):
token = notebookutils.credentials.getToken(self.audience)
# Decode token to get expiration time
token_json = jwt.decode(
token, algorithms="RS256",
options={"verify_signature": False}
)
return AccessToken(token, int(token_json.get("exp", 0)))
# Example: use with Azure Blob Storage
from azure.storage.blob import BlobServiceClient
account_url = "https://mystorageaccount.blob.core.windows.net"
credential = NotebookUtilsCredential(audience="storage")
blob_client = BlobServiceClient(account_url=account_url, credential=credential)
for container in blob_client.list_containers():
print(f"Container: {container.name}")
Dica
Os tokens expiram após um período de tempo. Se o laptop executar operações longas, implemente a lógica de atualização para obter um novo token antes que o atual expire.
Considerações
Escopos de token com
pbicomo audiência podem mudar ao longo do tempo.Quando você chama
notebookutils.credentials.getToken("pbi"), o token retornado tem escopo limitado se o notebook for executado em uma entidade de serviço. O token não tem o escopo de serviço completo do Fabric. Se o notebook for executado sob a identidade do usuário, o token ainda terá o escopo completo do serviço fabric, mas isso poderá mudar com melhorias de segurança. Para garantir que o token tenha o escopo de serviço completo do Fabric, use a autenticação MSAL em vez danotebookutils.credentials.getTokenAPI. Para obter mais informações, consulte Authenticate with Microsoft Entra ID.Os escopos a seguir estão disponíveis quando você chama
notebookutils.credentials.getTokencom a chave de audiênciapbisob a identidade principal do serviço:-
Lakehouse.ReadWrite.All– Acesso de leitura e gravação aos itens do Lakehouse -
MLExperiment.ReadWrite.All– Acesso de leitura e gravação aos itens do Experimento do Machine Learning -
MLModel.ReadWrite.All– Acesso de leitura e gravação a itens do Modelo do Machine Learning -
Notebook.ReadWrite.All– Acesso de leitura e gravação a itens do Notebook -
SparkJobDefinition.ReadWrite.All– Acesso de leitura e gravação aos itens de Definição de Trabalho do Spark -
Workspace.ReadWrite.All– Acesso de leitura e gravação a itens do Workspace -
Dataset.ReadWrite.All– Acesso de leitura e gravação a itens do conjunto de dados
-
Dica
Se você precisar de acesso a serviços adicionais do Fabric ou permissões mais amplas sob um principal do serviço, use MSAL para Python para autenticar diretamente com o escopo completo do serviço do Fabric em vez de depender de getToken("pbi").
Obter segredo
getSecret retorna um segredo do Azure Key Vault para um determinado ponto de extremidade do Azure Key Vault e um nome secreto. A chamada usa suas credenciais de usuário atuais para se autenticar no Key Vault.
notebookutils.credentials.getSecret('https://<name>.vault.azure.net/', 'secret name')
Você pode recuperar vários segredos para criar cadeias de conexão ou configurar serviços:
vault_url = "https://myvault.vault.azure.net/"
db_host = notebookutils.credentials.getSecret(vault_url, "db-host")
db_user = notebookutils.credentials.getSecret(vault_url, "db-user")
db_password = notebookutils.credentials.getSecret(vault_url, "db-password")
connection_string = f"Server={db_host};User={db_user};Password={db_password}"
Observação
As saídas do notebook ocultam automaticamente valores secretos para segurança. Se você imprimir ou exibir um segredo recuperado, a saída mostrará um espaço reservado oculto em vez do valor real.
Use a URL totalmente qualificada do Key Vault no formato https://<vault-name>.vault.azure.net/. Você deve ter permissões apropriadas para acessar o Key Vault e os segredos individuais.
Melhores práticas de segurança
Siga estas recomendações ao trabalhar com credenciais em blocos de anotações do Fabric:
- Armazene todos os valores confidenciais no Azure Key Vault. Nunca insira credenciais, cadeias de conexão ou chaves de API diretamente no código do notebook.
- Não registre valores secretos. Conte com a redação automática de informações confidenciais nas saídas do notebook. Evite escrever segredos em arquivos ou passá-los como parâmetros de notebook.
- Use a chave de público correta. Corresponda a chave de audiência ao recurso do Azure de destino para que o token tenha apenas as permissões necessárias.
- Entenda o contexto de identidade. Saiba se o notebook é executado sob a identidade de usuário ou um principal de serviço, pois os escopos de token disponíveis podem diferir. Testar a autenticação em contextos interativos e de pipeline.
- Gerenciar a expiração do token. Os tokens expiram. Para operações de execução prolongada, implemente a lógica de atualização para solicitar um novo token antes que o atual expire.
- Limitar o acesso ao Key Vault. Conceda apenas as permissões mínimas necessárias ao Key Vault. Audite o acesso secreto por meio dos logs de diagnóstico do Azure Key Vault.
- Use identidades gerenciadas quando possível. As identidades gerenciadas reduzem a necessidade de gerenciar credenciais manualmente e fornecem um fluxo de autenticação mais seguro.
Inserir segredo
putSecret armazena um segredo no Azure Key Vault especificado. Se o segredo já existir, o valor será atualizado.
notebookutils.credentials.putSecret('https://<name>.vault.azure.net/', 'secret name', 'secret value')
Você deve ter permissões apropriadas (definir permissão) no Azure Key Vault para gravar segredos.
vault_url = "https://myvault.vault.azure.net/"
notebookutils.credentials.putSecret(vault_url, "api-key", "my-secret-api-key-value")
Validar token
Use isValidToken para verificar se um token é válido e não expirou antes de chamar uma API com ele.
token = notebookutils.credentials.getToken('storage')
is_valid = notebookutils.credentials.isValidToken(token)
if is_valid:
print("Token is valid")
else:
print("Token is expired or invalid, requesting a new one")
token = notebookutils.credentials.getToken('storage')