Você pode usar nossa API NerdGraph para visualizar e gerenciar grupos de usuários e o que esses grupos podem acessar. Para saber como fazer isso na interface, consulte a documentação da interface de gerenciamento do usuário.
Para usar o NerdGraph para criar usuários e visualizar suas informações, consulte Gerenciar usuários com NerdGraph.
Requisitos
Alguns requisitos para gerenciamento de usuários e grupos via NerdGraph:
- Pro ou edição Enterprise é necessária para personalizar grupos e funções de usuários
- Se você estiver usando o provisionamento SCIM: para esse domínio de autenticação, você não poderá criar grupos ou adicionar usuários a grupos, porque seus grupos e usuários são gerenciados via SCIM.
- Tipo de usuário: usuário core ou usuário full platform
- Função: Authentication Domain Manager
Antes que você comece
Antes de usar o NerdGraph para gerenciar o usuário:
- Certifique-se de ter uma compreensão adequada de nossos conceitos de gerenciamento de usuários
- Se ainda não o fez, sugerimos que consulte a interface Access management para melhorar sua compreensão de como funciona o acesso de grupos e usuários e para entender os grupos que já existem. Antes de fazer isso, recomendamos criar um plano para o acesso ao grupo que você precisa criar: aqui está um exemplo de planilha de planejamento.
- Observe que o NerdGraph Explorer possui documentos integrados que definem os campos usados nessas solicitações.
- Observe que você pode acompanhar as alterações em sua conta New Relic.
Fluxo de trabalho sugerido para criação de grupos
Você pode usar essas consultas e mutações de várias maneiras e em várias ordens, mas aqui está um fluxo de trabalho comum para configurar grupos:
- consulte as informações do seu usuário e as funções disponíveis: este pode ser um primeiro lugar útil para começar a ter certeza de que você entende qual usuário você tem no New Relic e as funções disponíveis. Se você está apenas começando, talvez ainda não tenha adicionado o usuário e talvez tenha apenas nossas funções padrão.
- Opcional: Crie um novo grupo: Not available if using SCIM provisioning. Você pode usar grupos existentes ou criar um novo grupo. Depois de criar um grupo, você deverá conceder-lhe acesso a funções e contas. Observe que um grupo, por si só, não concede nenhum acesso ao usuário desse grupo: somente quando ele tem uma função e uma conta atribuídas é que o usuário pode realmente acessar o New Relic.
- Conceder acesso a um grupo: é isso que atribui aos grupos acesso a funções e contas.
Quando terminar, se já houver usuários no grupo que você criou e esse grupo tiver acesso a pelo menos uma função e conta, eles deverão ter acesso em alguns minutos (embora para contas do New Relic das regiões EU e JP, isso possa levar cerca de 20 minutos). Se os seus usuários ainda não estiverem nesse grupo (o que seria verdade se você acabou de criar um novo grupo), você pode adicionar usuários a esse grupo.
Grupos de consulta
Aqui está um exemplo de consulta de grupos existentes em um determinado domínio de autenticação:
{ actor { organization { userManagement { authenticationDomains(id: "YOUR_AUTHENTICATION_DOMAIN_ID") { authenticationDomains { groups { groups { displayName id } } } } } } }}Consultar funções existentes
Aqui está um exemplo de retorno de informações sobre funções:
{ actor { organization { authorizationManagement { authenticationDomains { authenticationDomains { groups { groups { roles { roles { accountId displayName id name organizationId type } } } } } } } } }}Aqui está um exemplo de resultado:
{ "data": { "actor": { "organization": { "authorizationManagement": { "authenticationDomains": { "authenticationDomains": [ { "groups": { "groups": [ { "roles": { "roles": [ { "accountId": "account-id", "displayName": "name", "id": "id", "name": "role-name", "organizationId": null, "type": "role-type" }, { "accountId": null, "displayName": "name", "id": "id", "name": "role-name", "organizationId": "organization-id", "type": "role-type" } ] } } ] } } ] } } } } }}Consulte o usuário
Consultar informações do usuário
Aqui está um exemplo de consulta de informações sobre seu usuário:
{ actor { organization { userManagement { authenticationDomains { authenticationDomains { groups { groups { users { users { id email name timeZone } } } } } } } } }}Aqui está um exemplo de resultado:
{ "data": { "actor": { "organization": { "userManagement": { "authenticationDomains": { "authenticationDomains": [ { "groups": { "groups": [ { "users": { "users": [ { "email": "example@newrelic.com", "id": "123456789", "name": "Example Relic", "timeZone": "Etc/UTC" } ] } } ] } } ] } } } } }}Consulte as associações de grupo do seu usuário
Aqui está um exemplo de consulta aos grupos aos quais seu usuário pertence:
{ actor { organization { userManagement { authenticationDomains { authenticationDomains { users { users { groups { groups { displayName } } email } } } } } } }}Aqui está um exemplo de resposta:
{ "data": { "actor": { "organization": { "userManagement": { "authenticationDomains": { "authenticationDomains": [ { "users": { "users": [ { "email": "pete@example.com", "groups": { "groups": [ { "displayName": "Admin" }, { "displayName": "Basic Sub Account" } ] } },Criar uma função
Antes de criar uma função personalizada, você precisa identificar as permissões que deseja atribuir a ela.
Recuperar IDs de permissão
Use a seguinte consulta para recuperar a lista de permissões com escopo de conta:
query { customerAdministration { permissions { items { category feature id product subsetIds } nextCursor } }}Para permissões com escopo em uma organização, execute a seguinte consulta:
query { customerAdministration { permissions(filter: { scope: { eq: "organization" } }) { items { category feature id product subsetIds } nextCursor } }}Observe os seguintes campos:
items: Uma matriz de objetos de permissão, cada um contendo o seguinte atributo:category: (String) A categoria ou agrupamento ao qual a permissão pertence.feature: (String) O recurso específico ao qual a permissão está associada.id: (String) Um identificador exclusivo para cada permissão.product: (String) O produto ao qual a permissão se aplica.subsetIds: (matriz) Uma lista de IDs que representam subconjuntos ou permissões relacionadas.
Criar a função personalizada
Depois de ter o identificador exclusivo para cada permissão que deseja atribuir à nova função, use a seguinte mutação para criar uma função. Você pode criar funções em três escopos diferentes: nível da conta, da organização ou da entidade. O tipo de função que você cria deve corresponder ao escopo das permissões que você está atribuindo.
Função com escopo de conta
mutation { customRoleCreate( container: { id: "YOUR_ORGANIZATION_ID", type: "ORGANIZATION" } name: "MY CUSTOM ACCOUNT ROLE" permissionIds: [1, 2, 3] scope: "account" ) { id }}Função com escopo de organização
mutation { customRoleCreate( container: { id: "YOUR_ORGANIZATION_ID", type: "ORGANIZATION" } name: "MY CUSTOM ORGANIZATION ROLE" permissionIds: [4, 5, 6] scope: "organization" ) { id }}Função com escopo de entidade
mutation { customRoleCreate( container: { id: "YOUR_ORGANIZATION_ID", type: "ORGANIZATION" } name: "MY CUSTOM ENTITY ROLE" permissionIds: [7, 8, 9] scope: "entity" ) { id }}Parâmetro
container:id: (String) O identificador exclusivo da sua organização. SubstituaYOUR_ORGANIZATION_IDpelo ID real da sua organização.type: (String) O tipo de contêiner. Atualmente, o único tipo suportado é"ORGANIZATION".
name: (String) O nome atribuído à função personalizada.permissionIds: (Array) Uma lista de IDs de permissão representando os recursos atribuídos à função personalizada. Use os IDs recuperados da consulta de permissões acima.scope: (String) O nível em que as permissões da função se aplicam. Valores suportados:"account": As permissões da função se aplicam no nível da conta"organization": As permissões da função se aplicam no nível da organização"entity": As permissões da função se aplicam no nível da entidade
Resposta
id: Retorna o ID único da função personalizada recém-criada.Importante
- Substitua
YOUR_ORGANIZATION_IDpelo ID específico da sua organização antes de executar a mutação. - Substitua o exemplo
permissionIdspelos IDs de permissão reais que você recuperou da consulta de permissões. - Certifique-se de que os IDs de permissão que você usa correspondam ao escopo que você está criando. Use permissões com escopo de organização para funções de organização e permissões com escopo de conta para funções de conta.
- Substitua
Atualizar função
Aqui está um exemplo de atualização de uma função.
mutation { customRoleUpdate( id: ROLE_ID name: "MY NEW CUSTOM ROLE NAME" permissionIds: [4, 5, 6] ) { id }}Parâmetro
id: O identificador exclusivo da função personalizada que você deseja modificar. SubstituaROLE_IDpelo ID real da função.name: O novo nome que você deseja atribuir à função personalizada. Neste exemplo, éMY NEW CUSTOM ROLE NAME.permissionIds: Uma matriz de IDs de permissão que você deseja atribuir a esta função. Certifique-se de que esses IDs sejam válidos e correspondam às permissões que você pretende implementar.
Excluir uma função
Aqui está um exemplo de exclusão de uma função:
mutation { customRoleDelete(id: ROLE_ID) { id }}Parâmetro
id: O identificador exclusivo da função que você deseja excluir. SubstituaROLE_IDpelo ID real da função que você deseja remover.
Resposta
id: Retorna o ID da função que foi excluída, confirmando a execução bem-sucedida da mutação.
Crie um grupo
Aqui está um exemplo de criação de um grupo:
mutation { userManagementCreateGroup( createGroupOptions: { authenticationDomainId: "YOUR_AUTH_DOMAIN_ID" displayName: "GROUP_DISPLAY_NAME" } ) { group { displayName id } }}Resposta bem-sucedida:
{ "data": { "userManagementCreateGroup": { "group": { "displayName": "GROUP_DISPLAY_NAME" "id": "GROUP_ID" } } }}Atualizar grupo de usuários
Aqui está um exemplo de atualização de um grupo.
mutation { userManagementUpdateGroup( updateGroupOptions: { displayName: "YOUR_UPDATED_GROUP_NAME" id: "YOUR_GROUP_ID" } ) { group { id displayName } }}Resposta para o sucesso:
{ "data": { "userManagementUpdateGroup": { "group": { "displayName": "YOUR_UPDATED_GROUP_NAME", "id": "GROUP_ID" } } }}Resposta para falha:
{ "data": { "userManagementUpdateGroup": null }, "errors": [ { "extensions": { "errorClass": "SERVER_ERROR" }, "locations": [ { "column": 3, "line": 2 } ], "message": "Group could not be found", "path": ["userManagementUpdateGroup"] } ]}Excluir um grupo
Aqui está um exemplo de exclusão de um grupo:
mutation { userManagementDeleteGroup(groupOptions: { id: "YOUR_GROUP_ID" }) { group { id } }}Resposta para o sucesso:
{ "data": { "userManagementDeleteGroup": { "group": { "id": "GROUP_ID" } } }}Resposta para falha:
{ "data": { "userManagementDeleteGroup": null }, "errors": [ { "extensions": { "errorClass": "SERVER_ERROR" }, "locations": [ { "column": 3, "line": 2 } ], "message": "Couldn't find Group with 'id'='ENTERED_GROUP_ID", "path": ["userManagementDeleteGroup"] } ]}Adicionar usuário aos grupos
Aqui está um exemplo de adição de usuário a grupos:
mutation { userManagementAddUsersToGroups( addUsersToGroupsOptions: { groupIds: [FIRST_GROUP_ID, SECOND_GROUP_ID] userIds: [YOUR_USERS_IDS] } ) { groups { displayName id } }}Resposta para o sucesso:
{ "data": { "userManagementAddUsersToGroups": { "groups": [ { "displayName": "GROUP_1_NAME", "id": "GROUP_ID_1" }, { "displayName": "GROUP_NAME_2", "id": "GROUP_ID_2" } ] } }}Resposta para falha:
{ "data": { "userManagementAddUsersToGroups": null }, "errors": [ { "extensions": { "errorClass": "SERVER_ERROR" }, "locations": [ { "column": 3, "line": 2 } ], "message": "The following ids were not found: group_ids: 'NON_EXISTENT_GROUP_ID'", "path": ["userManagementAddUsersToGroups"] } ]}Remover usuário dos grupos
Aqui está um exemplo de remoção de usuários de grupos:
mutation { userManagementRemoveUsersFromGroups( removeUsersFromGroupsOptions: { groupIds: [YOUR_GROUP_IDS] userIds: [YOUR_USER_IDS] } ) { groups { displayName id } }}Resposta para o sucesso:
{ "data": { "userManagementRemoveUsersFromGroups": { "groups": [ { "displayName": "YOUR_GROUP_NAME", "id": "YOUR_GROUP_ID" } ] } }}Resposta para falha:
{ "data": { "userManagementRemoveUsersFromGroups": null }, "errors": [ { "extensions": { "errorClass": "SERVER_ERROR" }, "locations": [ { "column": 3, "line": 2 } ], "message": "The following ids were not found: user_ids: 'NON-EXISTENT_USER_ID'", "path": ["userManagementRemoveUsersFromGroups"] } ]}Conceder acesso a um grupo ou usuário
As concessões de acesso conectam grupos ou usuários a funções e definem o que eles podem acessar. Ao criar uma concessão de acesso, você está concedendo aos usuários ou grupos as permissões definidas em uma função, aplicadas a um destino específico (organização, contas, entidades ou outros grupos).
Para especificar quem recebe a concessão de acesso:
- Para usuários: Use o parâmetro
granteecomidetype: USER - Para grupos: Substitua
granteeporgroupId: "YOUR_GROUP_ID"
Concessão com escopo de conta
Aqui está um exemplo de concessão de acesso a uma função com escopo de conta:
mutation { authorizationManagementGrantAccess( grantAccessOptions: { accountAccessGrants: { accountId: YOUR_ACCOUNT_ID dataAccessPolicyId: "YOUR_DATA_ACCESS_POLICY_ID" roleId: "YOUR_ROLE_ID" grantee: { id: "YOUR_USER_ID", type: USER } } } ) { accessGrants { id } roles { name } }}Concessão com escopo de organização
Aqui está um exemplo de concessão de acesso a uma função com escopo de organização:
mutation { authorizationManagementGrantAccess( grantAccessOptions: { organizationAccessGrants: { roleId: "YOUR_ROLE_ID" grantee: { id: "YOUR_USER_ID", type: USER } } } ) { accessGrants { id } roles { name } }}Concessão com escopo de entidade
Aqui está um exemplo de concessão de acesso a uma função com escopo de entidade:
mutation { authorizationManagementGrantAccess( grantAccessOptions: { entityAccessGrants: { entity: { id: "YOUR_ENTITY_ID", type: "YOUR_ENTITY_TYPE" } roleId: "YOUR_ROLE_ID" grantee: { id: "YOUR_USER_ID", type: USER } } } ) { accessGrants { id } roles { name } }}Concessão com escopo de grupo
Aqui está um exemplo de concessão de acesso a uma função com escopo de grupo:
mutation { authorizationManagementGrantAccess( grantAccessOptions: { groupAccessGrants: { groupId: "YOUR_TARGET_GROUP_ID" roleId: "YOUR_ROLE_ID" grantee: { id: "YOUR_USER_ID", type: USER } } } ) { accessGrants { id } roles { name } }}Exemplos de resposta
Resposta para o sucesso:
{ "data": { "authorizationManagementGrantAccess": { "accessGrants": [ { "id": "ACCESS_GRANT_ID" } ], "roles": [ { "name": "ROLE_NAME" } ] } }}Resposta para falha:
{ "data": { "authorizationManagementGrantAccess": null }, "errors": [ { "extensions": { "errorClass": "SERVER_ERROR" }, "locations": [ { "column": 3, "line": 2 } ], "message": "Validation failed: Role must exist, Role can't be blank, Role scope does not match granted_on type", "path": ["authorizationManagementGrantAccess"] } ]}Atualizar concessões de acesso
Você pode atualizar as concessões de acesso de conta existentes para alterar a política de acesso a dados. Use a mutação authorizationManagementUpdateAccess com os IDs de concessão que você deseja atualizar.
Importante
A atualização de concessões de acesso está disponível no momento apenas para concessões com escopo de conta.
Aqui está um exemplo de atualização de uma concessão de acesso de conta:
mutation { authorizationManagementUpdateAccess( updateAccessOptions: { accountAccessGrant: { dataAccessPolicyId: "YOUR_NEW_DATA_ACCESS_POLICY_ID" } ids: "YOUR_ACCESS_GRANT_ID" } ) { grants { id } }}Encontre um ID de função
Para alguns casos de uso, como conceder acesso a um grupo, você pode precisar de um ID de função: o ID numérico que representa essa função no New Relic.
Aqui estão alguns IDs para nossas funções padrão e configurações de administração:
All product admin:
1254.Standard user:
1253.Read only:
1252.Organization manager setting
1994- Read only:
1995
- Read only:
Authentication domain setting:
- Manage:
1996 - Read only:
1997 - Add users:
14517 - Read users:
14603
- Manage:
Group admin:
14516
Aqui está uma consulta para encontrar o ID de uma função personalizada:
{ actor { organization { authorizationManagement { authenticationDomains(id: "YOUR_AUTHENTICATION_DOMAIN_ID") { authenticationDomains { groups { groups { displayName id roles { roles { roleId name } } } } } } } } }}Revogar concessões de grupo ou usuário
A revogação de concessões de acesso remove a conexão entre grupos ou usuários e funções, retirando as permissões que eles tinham. Você pode revogar concessões no nível da organização, conta, entidade ou grupo. Ao revogar, especifique quem está perdendo o acesso usando grantee (para usuários) ou groupId (para grupos), de forma semelhante à concessão de acesso.
Revogação com escopo de conta
Aqui está um exemplo de revogação de acesso a uma função com escopo de conta:
mutation { authorizationManagementRevokeAccess( revokeAccessOptions: { accountAccessGrants: { accountId: YOUR_ACCOUNT_ID dataAccessPolicyId: "YOUR_DATA_ACCESS_POLICY_ID" roleId: "YOUR_ROLE_ID" grantee: { id: "YOUR_USER_ID", type: USER } } } ) { accessGrants { id } roles { id } }}Revogação com escopo de organização
Aqui está um exemplo de revogação de acesso a uma função com escopo de organização:
mutation { authorizationManagementRevokeAccess( revokeAccessOptions: { organizationAccessGrants: { roleId: "YOUR_ROLE_ID" grantee: { id: "YOUR_USER_ID", type: USER } } } ) { accessGrants { id } roles { id } }}Revogação com escopo de entidade
Aqui está um exemplo de revogação de acesso a uma função com escopo de entidade:
mutation { authorizationManagementRevokeAccess( revokeAccessOptions: { entityAccessGrants: { entity: { id: "YOUR_ENTITY_ID", type: "YOUR_ENTITY_TYPE" } roleId: "YOUR_ROLE_ID" grantee: { id: "YOUR_USER_ID", type: USER } } } ) { accessGrants { id } roles { id } }}Revogação com escopo de grupo
Aqui está um exemplo de revogação de acesso a uma função com escopo de grupo:
mutation { authorizationManagementRevokeAccess( revokeAccessOptions: { groupAccessGrants: { groupId: "YOUR_TARGET_GROUP_ID" roleId: "YOUR_ROLE_ID" grantee: { id: "YOUR_USER_ID", type: USER } } } ) { accessGrants { id } roles { id } }}Exemplos de resposta
Resposta para o sucesso:
{ "data": { "authorizationManagementRevokeAccess": { "accessGrants": [ { "id": "ACCESS_GRANT_ID" } ], "roles": [ { "id": "ROLE_ID" } ] } }}