Quando um direito tem um fluxo de trabalho de aprovação, os principais especificados como aprovadores podem aprovar ou negar solicitações de concessão desse direito.
Se o nível Premium ou Enterprise do Security Command Center estiver ativado no nível da organização, o fluxo de trabalho de aprovação poderá ter dois níveis de aprovação. Um aprovador pode estar em um ou nos dois níveis de aprovação, mas só pode aprovar uma vez. Depois que o número necessário de aprovações de primeiro nível for recebido, as notificações por e-mail serão enviadas aos aprovadores de segundo nível. Depois que o número necessário de aprovações de segundo nível
for recebido, a concessão passará para o estado active. Se um aprovador negar a concessão, ela vai para o estado denied
e não será enviada a outros aprovadores. Esse recurso está disponível
em pré-lançamento.
Considere o seguinte ao aprovar ou negar um pedido de concessão de um direito de acesso:
- Não é possível aprovar sua própria solicitação. 
- Se uma solicitação não for aprovada ou negada em 24 horas, o status de concessão será alterado para - expired. Depois disso, um principal precisa fazer uma nova solicitação de concessão se a elevação de privilégio ainda for necessária.
Aprovar ou negar concessões usando o console do Google Cloud
Para aprovar ou negar um pedido de concessão feito em relação a um direito, siga estas instruções:
- Acesse a página Privileged Access Manager. 
- Clique na guia Aprovar concessões e, em seguida, na guia Aprovação pendente. 
- Na linha relacionada à solicitação que você quer aprovar ou negar, clique em Aprovar/negar. 
- Se for necessário, insira uma justificativa no campo Comentário. Confira o histórico da concessão na guia Histórico. 
- Clique em Aprovar ou Negar. 
Visualize o histórico de aprovação na guia Meu histórico de aprovação. O histórico de aprovação fica disponível por 30 dias após uma ação de aprovação. As concessões criadas em direitos herdados de um recurso pai aparecem no histórico de aprovação do recurso pai.
Aprovar ou negar permissões de forma programática
Para aprovar ou negar permissões, faça as seguintes ações:
- Pesquisar direitos de acesso que você aprovou. 
- Com o ID de direito relevante, pesquise solicitações de concessão para aprovar ou negar. 
- Aprovar ou negar as solicitações de concessão. 
Pesquisar direitos de acesso que você aprovou
gcloud
  O comando
  
  gcloud pam entitlements search
  
  com o tipo de acesso de chamador grant-approver
  procura direitos a que você tem acesso de aprovação.
Antes de usar os dados do comando abaixo, faça estas substituições:
- RESOURCE_TYPE: opcional. O tipo de recurso ao qual o direito de acesso pertence. Use o valor- organization,- folderou- project.
- RESOURCE_ID: usada com- RESOURCE_TYPE. O ID do projeto, da pasta ou da organização do Google Cloud que você quer gerenciar os direitos de acesso. Os IDs do projeto são strings alfanuméricas, como- my-project. Os IDs de pastas e organizações são numéricos, como- 123456789012.
Execute o seguinte comando:
Linux, macOS ou Cloud Shell
gcloud pam entitlements search \ --caller-access-type=grant-approver \ --location=global \ --RESOURCE_TYPE=RESOURCE_ID
Windows (PowerShell)
gcloud pam entitlements search ` --caller-access-type=grant-approver ` --location=global ` --RESOURCE_TYPE=RESOURCE_ID
Windows (cmd.exe)
gcloud pam entitlements search ^ --caller-access-type=grant-approver ^ --location=global ^ --RESOURCE_TYPE=RESOURCE_ID
Você receberá uma resposta semelhante a esta:
additionalNotificationTargets: {}
approvalWorkflow:
  manualApprovals:
    requireApproverJustification: true
    steps:
    - approvalsNeeded: 1
      approvers:
      - principals:
        - user:alex@example.com
createTime: '22024-03-26T11:07:37.009498890Z'
etag: 00000000000000000000000000000000000000000000000000000000000=
maxRequestDuration: 3600s
name: projects/my-project/locations/global/entitlements/ENTITLEMENT_ID
privilegedAccess:
  gcpIamAccess:
    resource: //cloudresourcemanager.googleapis.com/projects/my-project
    resourceType: cloudresourcemanager.googleapis.com/Project
    roleBindings:
    - role: roles/storage.admin
requesterJustificationConfig:
  notMandatory: {}
state: AVAILABLE
updateTime: '2024-03-26T11:07:40.056780645Z'
REST
  O método searchEntitlements
  da API Privileged Access Manager com o tipo de acesso
  de chamador GRANT_APPROVER procura direitos de acesso a que você tem acesso para a aprovação.
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
- SCOPE: a organização, a pasta ou o projeto em que o direito de acesso está, no formato de- organizations/ORGANIZATION_ID,- folders/FOLDER_IDou- projects/PROJECT_ID. Os IDs do projeto são strings alfanuméricas, como- my-project. Os códigos de pastas e organizações são numéricos, como- 123456789012.
- FILTER: opcional. Retorna os direitos de acesso cujos valores de campo correspondem a uma expressão AIP-160.
- PAGE_SIZE: opcional. O número de itens a serem retornados em uma resposta.
- PAGE_TOKEN: opcional. A página em que a resposta vai começar, usando um token de página retornado em uma resposta anterior.
Método HTTP e URL:
GET https://privilegedaccessmanager.googleapis.com/v1/SCOPE/locations/global/entitlements:search?callerAccessType=GRANT_APPROVER&filter=FILTER&pageSize=PAGE_SIZE&pageToken=PAGE_TOKEN
Para enviar a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
[
  {
    "name": "projects/my-project/locations/global/entitlements/ENTITLEMENT_ID",
    "createTime": "2023-11-21T17:28:39.962144708Z",
    "updateTime": "2023-11-21T17:28:43.160309410Z",
    "eligibleUsers": [
      {
        "principals": [
          "user:alex@example.com"
        ]
      }
    ],
    "approvalWorkflow": {
      "manualApprovals": {
        "steps": [
          {
            "approvers": [
              {
                "principals": [
                  "user:bola@example.com"
                ]
              }
            ],
            "approvalsNeeded": 1
          }
        ]
      }
    },
    "privilegedAccess": {
      "gcpIamAccess": {
        "resourceType": "cloudresourcemanager.googleapis.com/Project",
        "resource": "//cloudresourcemanager.googleapis.com/projects/my-project",
        "roleBindings": [
          {
            "role": "roles/storage.admin"
          }
        ]
      }
    },
    "maxRequestDuration": "14400s",
    "state": "AVAILABLE",
    "requesterJustificationConfig": {
      "unstructured": {}
    },
    "additionalNotificationTargets": {
      "adminEmailRecipients": [
        "alex@example.com"
      ]
    },
    "etag": "00000000000000000000000000000000000000000000000000000000000="
  }
]
Pesquisar solicitações de benefício que você pode aprovar ou negar
gcloud
  O comando
  
  gcloud alpha pam grants search
  
  pesquisa uma concessão que pode ser aprovada ou negada ou que já
  foi aprovada ou negada. Esse método não exige permissões específicas do Privileged Access Manager
  para ser usado.
Antes de usar os dados do comando abaixo, faça estas substituições:
- ENTITLEMENT_ID: o ID do direito de acesso a que o acesso pertence. Para recuperar o ID, pesquise os direitos de acesso que você aprovou.
- 
    Use um dos seguintes valores: CALLER_RELATIONSHIP_TYPE.- had-approved: retorna as concessões que o autor da chamada aprovou ou negou.
- can-approve: retorna as permissões que o autor da chamada pode aprovar ou negar.
 
- RESOURCE_TYPE: opcional. O tipo de recurso ao qual o direito de acesso pertence. Use o valor- organization,- folderou- project.
- RESOURCE_ID: usada com- RESOURCE_TYPE. O ID do projeto, da pasta ou da organização do Google Cloud que você quer gerenciar os direitos de acesso. Os IDs do projeto são strings alfanuméricas, como- my-project. Os IDs de pastas e organizações são numéricos, como- 123456789012.
Execute o seguinte comando:
Linux, macOS ou Cloud Shell
gcloud alpha pam grants search \ --entitlement=ENTITLEMENT_ID \ --caller-relationship=CALLER_RELATIONSHIP_TYPE \ --location=global \ --RESOURCE_TYPE=RESOURCE_ID
Windows (PowerShell)
gcloud alpha pam grants search ` --entitlement=ENTITLEMENT_ID ` --caller-relationship=CALLER_RELATIONSHIP_TYPE ` --location=global ` --RESOURCE_TYPE=RESOURCE_ID
Windows (cmd.exe)
gcloud alpha pam grants search ^ --entitlement=ENTITLEMENT_ID ^ --caller-relationship=CALLER_RELATIONSHIP_TYPE ^ --location=global ^ --RESOURCE_TYPE=RESOURCE_ID
Você receberá uma resposta semelhante a esta:
additionalEmailRecipients:
- bola@example.com
createTime: '2024-03-07T00:34:32.557017289Z'
justification:
  unstructuredJustification: Renaming a file to mitigate issue #312
name: projects/PROJECT_ID/locations/global/entitlements/ENTITLEMENT_ID/grants/GRANT_ID
privilegedAccess:
  gcpIamAccess:
    resource: //cloudresourcemanager.googleapis.com/projects/PROJECT_ID
    resourceType: cloudresourcemanager.googleapis.com/Project
    roleBindings:
    - role: roles/storage.admin
      id: hwqrt_1
requestedDuration: 3600s
requestedPrivilegedAccess:
  gcpIamAccess:
    resource: //cloudresourcemanager.googleapis.com/projects/PROJECT_ID
    resourceType: cloudresourcemanager.googleapis.com/Project
    roleBindings:
    - role: roles/storage.admin
      entitlementRoleBindingId: hwqrt_1
requester: cruz@example.com
state: DENIED
timeline:
  events:
  - eventTime: '2024-03-07T00:34:32.793769042Z'
    requested:
      expireTime: '2024-03-08T00:34:32.793769042Z'
  - denied:
      actor: alex@example.com
      reason: Issue has already been resolved
    eventTime: '2024-03-07T00:36:08.309116203Z'
updateTime: '2024-03-07T00:34:32.926967128Z'
REST
  O método searchGrants
  da API Privileged Access Manager pesquisa uma concessão que você pode aprovar ou recusar ou que já
  foi aprovada ou recusada. Esse método não exige permissões específicas do Privileged Access Manager
  para ser usado.
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
- SCOPE: a organização, a pasta ou o projeto em que o direito de acesso está, no formato de- organizations/ORGANIZATION_ID,- folders/FOLDER_IDou- projects/PROJECT_ID. Os IDs do projeto são strings alfanuméricas, como- my-project. Os códigos de pastas e organizações são numéricos, como- 123456789012.
- ENTITLEMENT_ID: o ID do direito de acesso a que o acesso pertence. Para recuperar o ID, pesquise os direitos de acesso que você aprovou.
- RELATIONSHIP_TYPE: os valores válidos são:- HAD_APPROVED: retorna as concessões que o autor da chamada aprovou ou negou anteriormente.
- CAN_APPROVE: retorna as permissões que o autor da chamada pode aprovar ou negar.
 
- FILTER: opcional. Retorna as concessões cujos valores de campo correspondem a uma expressão AIP-160.
- PAGE_SIZE: opcional. O número de itens a serem retornados em uma resposta.
- PAGE_TOKEN: opcional. A página em que a resposta vai começar, usando um token de página retornado em uma resposta anterior.
Método HTTP e URL:
GET https://privilegedaccessmanager.googleapis.com/v1beta/SCOPE/locations/global/entitlements/ENTITLEMENT_ID/grants:search?callerRelationship=RELATIONSHIP_TYPE&filter=FILTER&pageSize=PAGE_SIZE&pageToken=PAGE_TOKEN
Para enviar a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{
  "grants": [
    {
      "name": "projects/PROJECT_ID/locations/global/entitlements/ENTITLEMENT_ID/grants/GRANT_ID",
      "createTime": "2024-03-06T03:08:49.330577625Z",
      "updateTime": "2024-03-06T03:08:49.625874598Z",
      "requester": "alex@example.com",
      "requestedDuration": "3600s",
      "justification": {
        "unstructuredJustification": "Emergency service for outage"
      },
      "state": "APPROVAL_AWAITED",
      "timeline": {
        "events": [
          {
            "eventTime": "2024-03-06T03:08:49.462765846Z",
            "requested": {
              "expireTime": "2024-03-07T03:08:49.462765846Z"
            }
          }
        ]
      },
      "privilegedAccess": {
        "gcpIamAccess": {
          "resourceType": "cloudresourcemanager.googleapis.com/Project",
          "resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
          "roleBindings": [
            {
              "role": "roles/storage.admin"
              "id": "hwqrt_1"
            }
          ]
        }
      },
      "requestedPrivilegedAccess": {
        "gcpIamAccess": {
          "resourceType": "cloudresourcemanager.googleapis.com/Project",
          "resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
          "roleBindings": [
            {
              "role": "roles/storage.admin",
              "entitlementRoleBindingId": "hwqrt_1"
            }
          ]
        }
      },
      "additionalEmailRecipients": [
        "bola@google.com"
      ]
    }
  ]
}
Aprovar benefícios de forma programática
gcloud
  O comando
  
  gcloud pam grants describe
  
  aprova uma solicitação de concessão específica.
Antes de usar os dados do comando abaixo, faça estas substituições:
- GRANT_ID: o ID da concessão que você está aprovando. Para recuperar o ID, pesquise as solicitações de concessão que você pode aprovar ou negar.
- ENTITLEMENT_ID: o ID do direito de acesso a que o acesso pertence.
- APPROVAL_REASON: por que a concessão foi aprovada.
- RESOURCE_TYPE: opcional. O tipo de recurso ao qual o direito de acesso pertence. Use o valor- organization,- folderou- project.
- RESOURCE_ID: usada com- RESOURCE_TYPE. O ID do projeto, da pasta ou da organização do Google Cloud que você quer gerenciar os direitos de acesso. Os IDs do projeto são strings alfanuméricas, como- my-project. Os IDs de pastas e organizações são numéricos, como- 123456789012.
Execute o seguinte comando:
Linux, macOS ou Cloud Shell
gcloud pam grants approve \ GRANT_ID \ --entitlement=ENTITLEMENT_ID \ --reason="APPROVAL_REASON" \ --location=global \ --RESOURCE_TYPE=RESOURCE_ID
Windows (PowerShell)
gcloud pam grants approve ` GRANT_ID ` --entitlement=ENTITLEMENT_ID ` --reason="APPROVAL_REASON" ` --location=global ` --RESOURCE_TYPE=RESOURCE_ID
Windows (cmd.exe)
gcloud pam grants approve ^ GRANT_ID ^ --entitlement=ENTITLEMENT_ID ^ --reason="APPROVAL_REASON" ^ --location=global ^ --RESOURCE_TYPE=RESOURCE_ID
Você receberá uma resposta semelhante a esta:
createTime: '2024-04-05T01:17:04.596455403Z'
justification:
  unstructuredJustification: Renaming a file to mitigate issue #312
name: projects/my-project/locations/global/entitlements/ENTITLEMENT_ID/grants/GRANT_ID
privilegedAccess:
  gcpIamAccess:
    resource: //cloudresourcemanager.googleapis.com/projects/my-project
    resourceType: cloudresourcemanager.googleapis.com/Project
    roleBindings:
    - role: roles/storage.admin
requestedDuration: 2700s
requester: cruz@example.com
state: SCHEDULED
timeline:
  events:
  - eventTime: '2024-04-05T01:17:04.732226659Z'
    requested:
      expireTime: '2024-04-06T01:17:04.732226659Z'
  - approved:
      actor: alex@example.com
      reason: Access allowed under existing policy
    eventTime: '2024-04-05T01:21:49.139539732Z'
  - eventTime: '2024-04-05T01:21:49.139463954Z'
    scheduled:
      scheduledActivationTime: '2024-04-05T01:21:49.139463954Z'
updateTime: '2024-04-05T01:21:49.139463954Z'
REST
  O método
  approveGrant
  da API Privileged Access Manager aprova uma solicitação de concessão específica.
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
- SCOPE: a organização, a pasta ou o projeto em que o direito de acesso está, no formato de- organizations/ORGANIZATION_ID,- folders/FOLDER_IDou- projects/PROJECT_ID. Os IDs do projeto são strings alfanuméricas, como- my-project. Os códigos de pastas e organizações são numéricos, como- 123456789012.
- ENTITLEMENT_ID: o ID do direito de acesso a que o acesso pertence.
- GRANT_ID: o ID da concessão que você está aprovando. Para recuperar o ID, pesquise as solicitações de concessão que você pode aprovar ou negar.
- REASON: o motivo pelo qual a solicitação de concessão foi aprovada.
Método HTTP e URL:
POST https://privilegedaccessmanager.googleapis.com/v1/SCOPE/locations/global/entitlements/ENTITLEMENT_ID/grants/GRANT_ID:approve
Corpo JSON da solicitação:
{
    "reason": "REASON"
}
Para enviar a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{
  "name": "projects/my-project/locations/global/entitlements/ENTITLEMENT_ID/grants/GRANT_ID",
  "createTime": "2024-03-06T03:08:49.330577625Z",
  "updateTime": "2024-03-06T23:01:13.964619844Z",
  "requester": "alex@example.com",
  "requestedDuration": "3600s",
  "justification": {
    "unstructuredJustification": "Emergency service for outage"
  },
  "state": "SCHEDULED",
  "timeline": {
    "events": [
      {
        "eventTime": "2024-03-06T03:08:49.462765846Z",
        "requested": {
          "expireTime": "2024-03-07T03:08:49.462765846Z"
        }
      },
      {
        "eventTime": "2024-03-06T23:01:13.964685709Z",
        "approved": {
          "reason": "Approved escalation",
          "actor": "cruz@example.com"
        }
      },
      {
        "eventTime": "2024-03-06T23:01:13.964619844Z",
        "scheduled": {
          "scheduledActivationTime": "2024-03-06T23:01:13.964619844Z"
        }
      }
    ]
  },
  "privilegedAccess": {
    "gcpIamAccess": {
      "resourceType": "cloudresourcemanager.googleapis.com/Project",
      "resource": "//cloudresourcemanager.googleapis.com/projects/my-project",
      "roleBindings": [
        {
          "role": "roles/storage.admin"
        }
      ]
    }
  },
  "additionalEmailRecipients": [
    "bola@example.com.com"
  ]
}
Negar benefícios de forma programática
gcloud
  O comando
  
  gcloud pam grants describe
  
  nega uma solicitação de concessão específica.
Antes de usar os dados do comando abaixo, faça estas substituições:
- GRANT_ID: o ID da concessão que você está negando. É possível recuperar o ID pesquisando permissões que podem ser aprovadas ou negadas.
- ENTITLEMENT_ID: o ID do direito de acesso a que o acesso pertence.
- DENIAL_REASON: por que a concessão foi recusada.
- RESOURCE_TYPE: opcional. O tipo de recurso ao qual o direito de acesso pertence. Use o valor- organization,- folderou- project.
- RESOURCE_ID: usada com- RESOURCE_TYPE. O ID do projeto, da pasta ou da organização do Google Cloud que você quer gerenciar os direitos de acesso. Os IDs do projeto são strings alfanuméricas, como- my-project. Os IDs de pastas e organizações são numéricos, como- 123456789012.
Execute o seguinte comando:
Linux, macOS ou Cloud Shell
gcloud pam grants deny \ GRANT_ID \ --entitlement=ENTITLEMENT_ID \ --reason="DENIAL_REASON" \ --location=global \ --RESOURCE_TYPE=RESOURCE_ID
Windows (PowerShell)
gcloud pam grants deny ` GRANT_ID ` --entitlement=ENTITLEMENT_ID ` --reason="DENIAL_REASON" ` --location=global ` --RESOURCE_TYPE=RESOURCE_ID
Windows (cmd.exe)
gcloud pam grants deny ^ GRANT_ID ^ --entitlement=ENTITLEMENT_ID ^ --reason="DENIAL_REASON" ^ --location=global ^ --RESOURCE_TYPE=RESOURCE_ID
Você receberá uma resposta semelhante a esta:
createTime: '2024-04-05T01:29:13.129192816Z'
justification:
  unstructuredJustification: Renaming a file to mitigate issue #312
name: projects/my-project/locations/global/entitlements/ENTITLEMENT_ID/grants/GRANT_ID
privilegedAccess:
  gcpIamAccess:
    resource: //cloudresourcemanager.googleapis.com/projects/my-project
    resourceType: cloudresourcemanager.googleapis.com/Project
    roleBindings:
    - role: roles/storage.admin
requestedDuration: 2700s
requester: cruz@example.com
state: DENIED
timeline:
  events:
  - eventTime: '2024-04-05T01:29:13.267878626Z'
    requested:
      expireTime: '2024-04-06T01:29:13.267878626Z'
  - denied:
      actor: alex@example.com
      reason: Access denied under existing policy
    eventTime: '2024-04-05T01:29:49.492161363Z'
updateTime: '2024-04-05T01:29:49.492097724Z'
REST
  O método denyGrant da API Privileged Access Manager
  nega uma solicitação de concessão específica.
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
- SCOPE: a organização, a pasta ou o projeto em que o direito de acesso está, no formato de- organizations/ORGANIZATION_ID,- folders/FOLDER_IDou- projects/PROJECT_ID. Os IDs do projeto são strings alfanuméricas, como- my-project. Os códigos de pastas e organizações são numéricos, como- 123456789012.
- ENTITLEMENT_ID: o ID do direito de acesso a que o acesso pertence.
- GRANT_ID: o ID da concessão que você está negando. Para recuperar o ID, pesquise as permissões que você pode aprovar ou negar.
- REASON: o motivo de recusa da solicitação de concessão.
Método HTTP e URL:
POST https://privilegedaccessmanager.googleapis.com/v1/SCOPE/locations/global/entitlements/ENTITLEMENT_ID/grants/GRANT_ID:deny
Corpo JSON da solicitação:
{
    "reason": "REASON"
}
Para enviar a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{
  "name": "projects/my-project/locations/global/entitlements/ENTITLEMENT_ID/grants/GRANT_ID",
  "createTime": "2024-03-07T00:34:32.557017289Z",
  "updateTime": "2024-03-07T00:36:08.309046580Z",
  "requester": "alex@example.com",
  "requestedDuration": "3600s",
  "justification": {
    "unstructuredJustification": "Emergency service for outage"
  },
  "state": "DENIED",
  "timeline": {
    "events": [
      {
        "eventTime": "2024-03-07T00:34:32.793769042Z",
        "requested": {
          "expireTime": "2024-03-08T00:34:32.793769042Z"
        }
      },
      {
        "eventTime": "2024-03-07T00:36:08.309116203Z",
        "denied": {
          "reason": "Outage already resolved",
          "actor": "cruz@example.com"
        }
      }
    ]
  },
  "privilegedAccess": {
    "gcpIamAccess": {
      "resourceType": "cloudresourcemanager.googleapis.com/Project",
      "resource": "//cloudresourcemanager.googleapis.com/projects/my-project",
      "roleBindings": [
        {
          "role": "roles/storage.admin"
        }
      ]
    }
  },
  "additionalEmailRecipients": [
    "bola@example.com"
  ]
}