Gerenciar atributos de identidade com o SCIM da conta
A API 2.1 do System for Cross-domain Identity Management (SCIM) da conta provisiona os nove atributos de identidade para usuários da conta Databricks, seja por meio de um conector de provisionamento ou diretamente.
Beta
Esse recurso está em Beta. Os administradores da conta podem gerenciar o acesso a esse recurso na página Prévias do console da conta. Consulte Gerenciar prévias em nível de conta.
O Databricks recomenda a gestão automática de identidades em vez do SCIM para gerenciar atributos de identidade. Para obter mais informações, consulte Gestão automática de identidades.
Pré-requisitos
- Você deve ser um administrador da account.
- Configure o provisionamento SCIM no nível da conta para sua conta. Consulte Sincronizar usuários e grupos com sua conta Databricks.
- Os atributos de identidade são gerenciados no account SCIM 2.1 , em
https://accounts.cloud.databricks.com/api/2.1/accounts/<account-id>/scim/v2/. Esta é a única superfície que faz a leitura e a gravação do conjunto completo de atributos. - Você não precisa habilitar a prévia do recurso Identity Attribute Control List para gravar atributos por meio do SCIM. Se a prévia estiver habilitada, certifique-se de que os atributos que você pretende enviar estejam na lista de controle de atributos da sua conta, ou a gravação será rejeitada. Consulte Identity Attribute Control List.
Configurar um conector SCIM
Os atributos de identidade chegam ao Databricks a partir do seu provedor de identidade por meio de um conector de provisionamento SCIM que os envia (push), ou por meio do gerenciamento automático de identidade, que os recupera (pull). Esta seção aborda a rota do conector para o Okta e o Microsoft Entra ID.
Em ambos os provedores, o trabalho é o mesmo em linhas gerais: estenda o esquema de saída do provedor para que ele saiba que os nove atributos do Databricks existem, mapeie cada um para um atributo de origem no perfil do usuário e, em seguida, sincronize. Você pode atualizar seu aplicativo de conector SCIM existente para fazer isso; não é necessário criar um novo aplicativo em seu provedor de identidade.
Okta
Crie primeiro o aplicativo de conector SCIM do Databricks, seguindo a configuração padrão do Okta para o Databricks. Em seguida, estenda seu esquema de saída.
- Acesse Applications > seu aplicativo Databricks > Provisionamento > To App , depois abra Go to Profile Editor .
- Escolha Adicionar atributo e adicione os nove atributos na tabela a seguir. Todos os nove são do tipo de dados string .
- Para Namespace externo , use
urn:ietf:params:scim:schemas:core:2.0:Userpara os primeiros cinco atributos (Título até País de trabalho) eurn:ietf:params:scim:schemas:extension:enterprise:2.0:Userpara os últimos quatro (Centro de custo até Departamento). - Retorne à tab Provisionamento e edite a seção Mapeamentos para mapear cada atributo do Databricks ao atributo de perfil de usuário do Okta do qual ele deve ser extraído.
O External name e o External namespace são o que o Okta envia na rede, portanto, eles devem corresponder exatamente aos caminhos SCIM.
Nome de exibição | Nome da variável | Nome externo |
|---|---|---|
Título |
|
|
Tipo de usuário |
|
|
Localidade de trabalho |
|
|
Região de trabalho |
|
|
País de trabalho |
|
|
Centro de custo |
|
|
Organização |
|
|
Divisão |
|
|
Departamento |
|
|
Para testar o resultado, crie um usuário em Diretório > Pessoas > Adicionar pessoa , defina os atributos mapeados em seu perfil e, em seguida, atribua-os ao aplicativo na tab Atribuições . Abra a tab provisionamento e escolha Force Sync se precisar que os atributos sejam sincronizados imediatamente. Os atributos aparecem no usuário no console da conta do Databricks em cerca de cinco minutos.
O conector Okta se comporta da seguinte maneira:
- Os valores de atributo diferenciam maiúsculas de minúsculas e são armazenados exatamente como enviados.
- Os símbolos
_,-,.e espaços são sincronizados sem problemas. - Atributos com valores de matriz não são compatíveis. O mapeamento de um produz um erro no Okta e o valor no Databricks permanece inalterado. Isso se aplica até mesmo a uma matriz de elemento único.
Microsoft Entra ID
Crie o aplicativo de provisionamento SCIM no Microsoft Entra ID seguindo a configuração padrão do Microsoft Entra ID para o Databricks.
O editor de esquema não é exposto por default. Acrescente ?Microsoft_AAD_Connect_Provisioning_forceSchemaEditorEnabled=true ao URL do portal e mantenha-o definido durante toda a sessão de configuração. Sem isso, a opção Editar esquema não aparecerá.
-
Abra seu aplicativo e vá para Provisionamento > Mapeamento de atributos .
-
Em Opções avançadas , escolha Editar atributos de usuário do Databricks .
-
Adicione os nove atributos a seguir, todos do tipo String :
titleuserTypeaddresses[type eq "work"].localityaddresses[type eq "work"].regionaddresses[type eq "work"].countryurn:ietf:params:scim:schemas:extension:enterprise:2.0:User:costCenterurn:ietf:params:scim:schemas:extension:enterprise:2.0:User:organizationurn:ietf:params:scim:schemas:extension:enterprise:2.0:User:divisionurn:ietf:params:scim:schemas:extension:enterprise:2.0:User:department
-
Retorne à tela de mapeamento de atributos e escolha Adicionar Mapeamento de Atributo para cada atributo, usando um tipo de mapeamento Direto e os atributos de origem na tabela a seguir.
O Microsoft Entra ID não possui um campo de origem nativo para centro de custo ou divisão, portanto, deixe esses dois não mapeados, a menos que você tenha um atributo de extensão personalizado ou expressão adequada para vinculá-los.
Destino Databricks | Atributo de origem do Microsoft Entra ID |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| não mapeado |
| não mapeado |
Para testar, crie um usuário em Users > New User e preencha os campos mapeados. Adicione-os ao aplicativo em Provisioning > Users and Groups , depois abra Provision on demand e selecione o usuário. Os atributos aparecem então na tab Identity attributes do usuário no console account do Databricks. Limpar o valor de um atributo no usuário do Microsoft Entra ID e realizar o provisionamento sob demanda novamente remove o valor no Databricks, para que os dois lados permaneçam em sincronia.
Se um conector anteriormente íntegro começar a falhar após a lista de controle de atributos ser habilitada ou restringida, a causa é quase sempre que o conector ainda está enviando um atributo que a account não permite mais. O Databricks rejeita toda a solicitação com um 400, portanto, a sincronização falha em vez de ser aplicada parcialmente. Para corrigir, adicione o atributo de volta à lista de controle ou remova esse atributo do mapeamento do conector e, em seguida, force uma sincronização novamente. Um conector que reenvia um valor inalterado não é rejeitado, pois a imposição se aplica apenas a valores que realmente mudam. Consulte Lista de Controle de Atributos de Identidade.
Gerenciar atributos com a API SCIM
Os atributos de identidade são gerenciados no account SCIM 2.1. Cinco dos atributos residem no esquema de usuário principal do SCIM, e os outros quatro residem na extensão de usuário corporativo padrão, cujo URN é urn:ietf:params:scim:schemas:extension:enterprise:2.0:User.
Atributo | Onde ele reside no SCIM |
|---|---|
| Usuário principal: |
| Usuário principal: |
| Usuário principal: |
| Usuário principal: |
| Usuário principal: |
| Extensão corporativa: |
| Extensão corporativa: |
| Extensão corporativa: |
| Extensão corporativa: |
Em solicitações e respostas, os quatro atributos corporativos são endereçados por seu caminho totalmente qualificado. Por exemplo, urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:costCenter.
Criar um usuário com atributos de identidade
POST /api/2.1/accounts/<account-id>/scim/v2/Users
Authorization: Bearer <token>
Content-Type: application/scim+json
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"userName": "jane.doe@example.com",
"displayName": "Jane Doe",
"title": "Staff Engineer",
"userType": "Employee",
"addresses": [
{ "locality": "Mountain View", "region": "CA", "country": "US" }
],
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
"costCenter": "4130",
"organization": "Databricks",
"division": "Platform",
"department": "Identity"
}
}
O Databricks responde 201 Created com o registro completo do usuário. A forma da resposta tem as seguintes características:
schemassempre anuncia tanto o URN de usuário principal quanto o URN de extensão corporativa, mesmo quando nenhum atributo corporativo está definido.- Atributos sem valor armazenado são omitidos completamente em vez de retornados como
null. - Exatamente um endereço é armazenado por usuário, portanto
addressessempre contém um único elemento. O Databricks o marca como"type": "work"e"primary": trueautomaticamente; ambos são somente leitura e não podem ser mapeados a partir de um provedor de identidade. - O SCIM 2.1 da conta não retorna
metaouentitlementsem usuários.
Ler atributos de identidade
GET /api/2.1/accounts/<account-id>/scim/v2/Users/<user-id>
Authorization: Bearer <token>
A resposta tem a mesma forma que a resposta de criação. As leituras nunca são filtradas pela lista de controle de atributos . Um atributo armazenado anteriormente permanece totalmente visível em um GET mesmo após ser removido da lista de controle. Apenas as gravações são controladas.
Atualizar atributos de identidade
Todas as três formas de operação PATCH (add, replace e remove) funcionam para cada atributo, incluindo os caminhos corporativos totalmente qualificados.
PATCH /api/2.1/accounts/<account-id>/scim/v2/Users/<user-id>
Authorization: Bearer <token>
Content-Type: application/scim+json
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{ "op": "replace", "path": "title", "value": "Principal Engineer" },
{ "op": "replace", "path": "userType", "value": "Contractor" },
{
"op": "replace",
"path": "addresses",
"value": [{ "locality": "Seattle", "region": "WA", "country": "US" }]
},
{
"op": "replace",
"path": "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:costCenter",
"value": "9001"
}
]
}
O Databricks responde 200 OK com o usuário atualizado. addresses é substituído como um valor complexo inteiro, portanto, envie todos os subcampos que você deseja manter. Omitir country do valor acima o limparia.
Remover atributos de identidade
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{ "op": "remove", "path": "userType" },
{
"op": "remove",
"path": "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:division"
}
]
}
O Databricks responde 200 OK, e os atributos removidos não aparecem mais no registro do usuário. As remoções sempre são bem-sucedidas, independentemente da lista de controle de atributos , portanto, um administrador sempre pode retirar um valor armazenado, inclusive para um atributo que a conta não tem mais permissão para gravar.
Quando a lista de controle de atributos rejeita uma gravação
Assim que sua conta for inscrita na visualização da Lista de Controle de Atributos de Identidade, a gravação de um atributo que não esteja na lista será rejeitada. Por exemplo, enviar {"op": "replace", "path": "userType", "value": "Vendor"} quando userType está fora da lista retorna 400 Bad Request:
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"],
"status": "400",
"scimType": "invalidValue",
"detail": "The following identity attributes are not on this account's attribute control list and cannot be created or updated: userType. Add them to the control list, or remove them from the request. Existing values can still be removed."
}
Antes de integrar, entenda os seguintes comportamentos de imposição:
- A imposição é por atributo, não por esquema. Um atributo corporativo fora da lista, como
division, é rejeitado mesmo quando outros atributos corporativos na mesma solicitação são permitidos. - Um PATCH é atômico. Se qualquer operação tiver como alvo um atributo fora da lista, toda a solicitação será rejeitada e nenhuma das alterações permitidas será aplicada. Execuções de validação ocorrem antes que o registro de usuário seja alterado.
- Apenas valores alterados são verificados. O reenvio de um valor idêntico ao armazenado é uma operação nula (no-op) e passa mesmo para um atributo fora da lista. Isso é importante para conectores de provedor de identidade, que reenviam valores inalterados a cada sincronização.
- Os subcampos de endereço são verificados individualmente.
locality,regionecountryprecisam, cada um, de sua própria entrada na lista de controle.
Para saber como configurar a lista, consulte Lista de controle de atributos de identidade.
Descubra atributos compatíveis
GET /api/2.1/accounts/<account-id>/scim/v2/Schemas retorna um SCIM ListResponse. Quando os atributos de identidade estão habilitados para a superfície, ela contém quatro recursos de esquema: User (que suporta os atributos adicionais descritos nesta página), Group, ServicePrincipal e a extensão de usuário enterprise.
O esquema de usuário principal anuncia title, userType e addresses. Dentro de addresses, os três subatributos provenientes do provedor de identidade são readWrite, enquanto type e primary são readOnly porque o Databricks os define:
{
"name": "addresses",
"type": "complex",
"multiValued": true,
"description": "A physical mailing address for this user.",
"mutability": "readWrite",
"returned": "default",
"subAttributes": [
{ "name": "locality", "type": "string", "mutability": "readWrite" },
{ "name": "region", "type": "string", "mutability": "readWrite" },
{ "name": "country", "type": "string", "mutability": "readWrite" },
{ "name": "type", "type": "string", "mutability": "readOnly", "canonicalValues": ["work"] },
{ "name": "primary", "type": "boolean", "mutability": "readOnly" }
]
}
A extensão enterprise também pode ser resolvida por conta própria em GET /api/2.1/accounts/<account-id>/scim/v2/Schemas/urn:ietf:params:scim:schemas:extension:enterprise:2.0:User, que retorna os quatro atributos enterprise como strings readWrite:
{
"id": "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User",
"name": "EnterpriseUser",
"description": "Enterprise User",
"attributes": [
{ "name": "costCenter", "type": "string", "mutability": "readWrite" },
{ "name": "department", "type": "string", "mutability": "readWrite" },
{ "name": "division", "type": "string", "mutability": "readWrite" },
{ "name": "organization", "type": "string", "mutability": "readWrite" }
],
"meta": { "resourceType": "Schema" }
}
A saída /Schemas é estática. Ele não é afetado pela lista de controle de atributos ou pelo que qualquer usuário individual definiu. Isso reflete apenas se a superfície gerencia atributos de identidade.
Ler seus próprios atributos
O SCIM da conta para workspaces é servido a partir do host do workspace em https://<workspace-host>/api/2.0/account/scim/v2/. Esta superfície não expõe atributos de identidade em leituras ou gravações, e os administradores do workspace não têm permissão para ler ou modificar atributos de identidade de outros usuários.
As gravações em atributos de identidade nesta superfície retornam 2xx, mas são descartadas silenciosamente , não rejeitadas. Uma resposta bem-sucedida não significa que o atributo foi armazenado. Para gravar atributos de identidade, use o SCIM 2.1 da conta. Consulte Gerenciar atributos com a API SCIM.
/Me é a única exceção. Como ele retorna apenas o perfil do próprio chamador, um usuário pode ler seus próprios atributos de identidade lá:
GET /api/2.0/account/scim/v2/Me
Authorization: Bearer <workspace-token>
{
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
],
"id": "1234567890123456",
"userName": "jane.doe@example.com",
"displayName": "Jane Doe",
"active": true,
"emails": [{ "type": "work", "primary": true, "value": "jane.doe@example.com" }],
"name": { "givenName": "Jane", "familyName": "Doe" },
"title": "Staff Engineer",
"userType": "Employee",
"addresses": [
{
"locality": "Mountain View",
"region": "CA",
"country": "US",
"type": "work",
"primary": true
}
],
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
"costCenter": "4130",
"organization": "Databricks",
"division": "Platform",
"department": "Identity"
},
"groups": [{ "value": "987654321098765", "display": "engineering" }]
}
Considere o seguinte sobre /Me:
/Meé somente leitura aqui.POST,PUT,PATCHeDELETEretornam501com"detail": "Endpoint not supported."groupsé sempre retornado em/Me, ao contrário de uma leitura de usuário administrativo.- A lista de controle de atributos não tem efeito sobre
/Me, uma vez que a lista rege as gravações e/Menão pode gravar. - O SCIM no nível do workspace (
/api/2.0/preview/scim/v2/) é uma API diferente e nunca expõe atributos de identidade no nível da conta em nenhum endpoint, incluindo seu próprio/Me.