Partilhar via


Rever o acesso de convidados a grupos através de APIs de revisões de acesso

A API de revisões de acesso no Microsoft Graph permite às organizações auditar e atestar o acesso que as identidades (também denominadas principais) são atribuídas aos recursos na organização. Com a colaboração B2B, pode utilizar grupos do Microsoft 365 para gerir de forma eficiente o acesso de convidados a recursos como ficheiros, notas, calendários e até conversações do Teams. E ao utilizar a API de revisões de acesso, as organizações podem atestar periodicamente os principais que têm acesso a esses grupos e, por extensão, a outros recursos na organização.

Neste tutorial, você aprende a:

  • Crie uma revisão de acesso periódica dos grupos do Microsoft 365 com convidados.
  • Investigue as decisões que são aplicadas às revisões de acesso.

Pré-requisitos

Para concluir este tutorial, precisa dos seguintes recursos e privilégios:

  • Um inquilino Microsoft Entra funcional com uma licença Microsoft Entra ID P2 ou Microsoft Entra ID Governance ativada.
  • Um convidado de teste e um grupo de teste do Microsoft 365 no seu inquilino. O convidado deve ser membro do grupo do Microsoft 365.
  • Inicie sessão num cliente de API, como o Graph Explorer para chamar o Microsoft Graph com uma conta que tenha, pelo menos, a função de Administrador de Governação de Identidades.
  • Conceda a si mesmo as seguintes permissões delegadas: AccessReview.ReadWrite.All.

Passo 1: Criar uma revisão de acesso para todos os grupos do Microsoft 365 com convidados

A seguinte série de revisão de acesso utiliza estas definições:

  • É uma revisão de acesso periódica e revista trimestralmente.
  • Os proprietários do grupo são os decisores.
  • O âmbito de revisão está limitado apenas a grupos do Microsoft 365 com convidados.
  • Define um utilizador como o revisor de contingência que pode rever o acesso caso o grupo não tenha proprietários atribuídos.
  • autoApplyDecisionsEnabled está definido como true. Neste caso, as decisões são aplicadas automaticamente assim que o revisor concluir a revisão de acesso ou a duração da revisão de acesso terminar. Se não estiver ativada, um utilizador tem de aplicar as decisões manualmente após a conclusão da revisão.
  • applyActions está definido como removeAccessApplyAction. Esta ação remove os convidados negados do grupo. O convidado ainda pode iniciar sessão no seu inquilino, mas não será membro do grupo ou terá os privilégios de acesso concedidos através do grupo.

Solicitação

Nesta chamada, substitua estes valores:

  • c9a5aff7-9298-4d71-adab-0a222e0a05e4 com o ID do revisor de contingência.
  • Valor de startDate com a data de hoje e o valor de endDate com uma data de um ano a partir da data de início.
POST https://graph.microsoft.com/v1.0/identityGovernance/accessReviews/definitions
Content-type: application/json

{
    "displayName": "Guest access to marketing group",
    "scope": {
        "@odata.type": "#microsoft.graph.accessReviewQueryScope",
        "query": "./members/microsoft.graph.user/?$count=true&$filter=(userType eq 'Guest')",
        "queryType": "MicrosoftGraph"
    },
    "instanceEnumerationScope": {
        "@odata.type": "#microsoft.graph.accessReviewQueryScope",
        "query": "/v1.0/groups?$filter=(groupTypes/any(c:c+eq+'Unified'))&$count=true",
        "queryType": "MicrosoftGraph",
        "queryRoot": null
    },
    "reviewers": [
        {
            "query": "./owners",
            "queryType": "MicrosoftGraph",
            "queryRoot": null
        }
    ],
    "fallbackReviewers": [
        {
            "query": "/users/c9a5aff7-9298-4d71-adab-0a222e0a05e4",
            "queryType": "MicrosoftGraph"
        }
    ],
    "settings": {
        "mailNotificationsEnabled": true,
        "reminderNotificationsEnabled": true,
        "justificationRequiredOnApproval": true,
        "defaultDecisionEnabled": true,
        "defaultDecision": "Deny",
        "instanceDurationInDays": 3,
        "autoApplyDecisionsEnabled": true,
        "recommendationsEnabled": true,
        "recommendationLookBackDuration": "P30D",
        "decisionHistoriesForReviewersEnabled": false,
        "recurrence": {
            "pattern": {
                "type": "absoluteMonthly",
                "interval": 3,
                "month": 0,
                "dayOfMonth": 0,
                "daysOfWeek": [],
                "firstDayOfWeek": "sunday",
                "index": "first"
            },
            "range": {
                "type": "endDate",
                "numberOfOccurrences": 0,
                "recurrenceTimeZone": null,
                "startDate": "2024-03-21",
                "endDate": "2025-03-21"
            }
        },
        "applyActions": [
            {
                "@odata.type": "#microsoft.graph.removeAccessApplyAction"
            }
        ]
    }
}

Resposta

Observação: o objeto de resposta mostrado aqui pode ser encurtado para legibilidade.

HTTP/1.1 201 Created
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#identityGovernance/accessReviews/definitions/$entity",
    "id": "c22ae540-b89a-4d24-bac0-4ef35e6591ea",
    "displayName": "Guest access to marketing group",
    "createdDateTime": null,
    "lastModifiedDateTime": null,
    "status": "NotStarted",
    "descriptionForAdmins": null,
    "descriptionForReviewers": null,
    "scope": {
        "@odata.type": "#microsoft.graph.accessReviewQueryScope",
        "query": "./members/microsoft.graph.user/?$count=true&$filter=(userType eq 'Guest')",
        "queryType": "MicrosoftGraph",
        "queryRoot": null
    },
    "instanceEnumerationScope": {
        "@odata.type": "#microsoft.graph.accessReviewQueryScope",
        "query": "/groups?$filter=(groupTypes/any(c:c+eq+'Unified'))&$count=true",
        "queryType": "MicrosoftGraph",
        "queryRoot": null
    },
    "reviewers": [
        {
            "query": "./owners",
            "queryType": "MicrosoftGraph",
            "queryRoot": null
        }
    ],
    "fallbackReviewers": [
        {
            "query": "/users/c9a5aff7-9298-4d71-adab-0a222e0a05e4",
            "queryType": "MicrosoftGraph",
            "queryRoot": null
        }
    ],
    "settings": {
        "mailNotificationsEnabled": true,
        "reminderNotificationsEnabled": true,
        "justificationRequiredOnApproval": true,
        "defaultDecisionEnabled": true,
        "defaultDecision": "Deny",
        "instanceDurationInDays": 3,
        "autoApplyDecisionsEnabled": true,
        "recommendationsEnabled": true,
        "recommendationLookBackDuration": "P30D",
        "decisionHistoriesForReviewersEnabled": false,
        "recurrence": {
            "pattern": {
                "type": "absoluteMonthly",
                "interval": 3,
                "month": 0,
                "dayOfMonth": 0,
                "daysOfWeek": [],
                "firstDayOfWeek": "sunday",
                "index": "first"
            },
            "range": {
                "type": "endDate",
                "numberOfOccurrences": 0,
                "recurrenceTimeZone": null,
                "startDate": "2024-03-21",
                "endDate": "2025-03-21"
            }
        },
        "applyActions": [
            {
                "@odata.type": "#microsoft.graph.removeAccessApplyAction"
            }
        ],
        "recommendationInsightSettings": []
    },
    "stageSettings": [],
    "additionalNotificationRecipients": []
}

Passo 2: listar instâncias da revisão de acesso

A consulta seguinte lista todas as instâncias da definição de revisão de acesso. Se existir mais do que um grupo do Microsoft 365 com convidados no seu inquilino, este pedido devolve uma instância para cada grupo.

Solicitação

GET https://graph.microsoft.com/v1.0/identityGovernance/accessReviews/definitions/c22ae540-b89a-4d24-bac0-4ef35e6591ea/instances

Resposta

Nesta resposta, o âmbito inclui o grupo de teste porque tem um convidado. A instância de revisão de acesso é atualmente InProgress. Uma vez que é uma revisão trimestral, uma nova instância de revisão é criada automaticamente a cada três meses e os revisores podem aplicar novas decisões.

Observação: o objeto de resposta mostrado aqui pode ser encurtado para legibilidade.

HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#identityGovernance/accessReviews/definitions('c22ae540-b89a-4d24-bac0-4ef35e6591ea')/instances",
    "value": [
        {
            "id": "6392b1a7-9c25-4844-83e5-34e23c88e16a",
            "startDateTime": "2024-03-21T17:00:36.96Z",
            "endDateTime": "2024-03-24T17:00:36.96Z",
            "status": "InProgress",
            "scope": {
                "query": "/groups/59ab642a-2776-4e32-9b68-9ff7a47b7f6a/members/microsoft.graph.user/?$count=true&$filter=(userType eq 'Guest')",
                "queryType": "MicrosoftGraph"
            }
        }
    ]
}

Passo 3: Obter decisões

Obtenha as decisões da instância de uma revisão de acesso. Numa revisão trimestral como esta, enquanto a revisão de acesso estiver ativa:

  • É criada uma nova instância de revisão a cada três meses.
  • Os revisores têm de aplicar novas decisões para novas instâncias.

Solicitação

GET https://graph.microsoft.com/v1.0/identityGovernance/accessReviews/definitions/c22ae540-b89a-4d24-bac0-4ef35e6591ea/instances/6392b1a7-9c25-4844-83e5-34e23c88e16a/decisions

Resposta

A resposta seguinte mostra a decisão da instância da revisão.

Observação: o objeto de resposta mostrado aqui pode ser encurtado para legibilidade.

HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#identityGovernance/accessReviews/definitions('c22ae540-b89a-4d24-bac0-4ef35e6591ea')/instances('6392b1a7-9c25-4844-83e5-34e23c88e16a')/decisions",
    "@odata.count": 1,
    "value": [
        {
            "id": "0e76ee07-b4c6-469e-bc9d-e73fc9a8d660",
            "accessReviewId": "6392b1a7-9c25-4844-83e5-34e23c88e16a",
            "reviewedDateTime": "2021-02-10T17:06:26.147Z",
            "decision": "Approve",
            "justification": "",
            "appliedDateTime": null,
            "applyResult": "New",
            "recommendation": "Deny",
            "reviewedBy": {
                "id": "00000000-0000-0000-0000-000000000000",
                "displayName": "AAD Access Reviews",
                "userPrincipalName": "AAD Access Reviews"
            },
            "appliedBy": {
                "id": "00000000-0000-0000-0000-000000000000",
                "displayName": "",
                "userPrincipalName": ""
            },
            "target": {
                "@odata.type": "#microsoft.graph.accessReviewInstanceDecisionItemUserTarget",
                "userId": "baf1b0a0-1f9a-4a56-9884-6a30824f8d20",
                "userDisplayName": "John Doe (Tailspin Toys)",
                "userPrincipalName": "john@tailspintoys.com"
            },
            "principal": {
                "@odata.type": "#microsoft.graph.userIdentity",
                "id": "baf1b0a0-1f9a-4a56-9884-6a30824f8d20",
                "displayName": "John Doe (Tailspin Toys)",
                "userPrincipalName": "john@tailspintoys.com"
            }
        }
    ]
}

Passo 4: Limpar recursos

Neste passo, elimine a definição de revisão de acesso. Uma vez que a definição de agenda da revisão de acesso é o esquema para a revisão de acesso, eliminar a definição remove as definições, instâncias e decisões relacionadas. O pedido devolve uma 204 No Content resposta.

DELETE https://graph.microsoft.com/v1.0/identityGovernance/accessReviews/definitions/c22ae540-b89a-4d24-bac0-4ef35e6591ea