Aprobar o denegar concesiones con Privileged Access Manager

Una vez que se ha creado un derecho, determinados principales pueden solicitar una ayuda en relación con ese derecho. Si ese derecho tiene un flujo de trabajo de aprobación especificado, los principales configurados como aprobadores pueden aprobar o denegar las solicitudes de concesión de ese derecho.

Ten en cuenta lo siguiente al aprobar o rechazar una solicitud de concesión de un derecho:

  • No puedes aprobar tu propia solicitud.

  • Si una solicitud no se aprueba ni se rechaza en un plazo de 24 horas, el estado de la concesión cambia a expired. Después, una cuenta principal debe enviar una nueva solicitud de concesión si sigue siendo necesario elevar los privilegios.

Aprobar o denegar concesiones mediante la Trusted Cloud consola

Para aprobar o denegar una solicitud de concesión que se haya hecho en relación con un derecho, sigue estas instrucciones:

  1. Ve a la página Privileged Access Manager.

    Ir a Privileged Access Manager

  2. Haz clic en la pestaña Aprobar concesiones y, a continuación, en la pestaña Pendiente de aprobación.

  3. En la fila relacionada con la solicitud que quieras aprobar o rechazar, haz clic en Aprobar o rechazar.

  4. Si se requiere una justificación, introdúcela en el campo Comentario.

  5. Haz clic en Aprobar o en Rechazar.

Puedes consultar tu historial de aprobaciones en la pestaña Mi historial de aprobaciones. El historial de aprobaciones está disponible durante 30 días después de que se haya tomado una medida de aprobación.

Aprobar o denegar concesiones mediante programación

Para aprobar o denegar las concesiones, debes completar las siguientes acciones:

  1. Busca los derechos de los que eres aprobador.

  2. Con el ID de derecho correspondiente, busca las solicitudes de concesión que puedes aprobar o rechazar.

  3. Acepta o rechaza las solicitudes de concesión.

Buscar derechos de los que eres responsable de aprobación

gcloud

El comando gcloud pam entitlements search con el tipo de acceso de la persona que llama grant-approver busca los derechos en los que eres aprobador.

Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

  • RESOURCE_TYPE: opcional. El tipo de recurso al que pertenece el derecho. Usa el valor organization, folder o project.
  • RESOURCE_ID: se usa con RESOURCE_TYPE. El ID del proyecto, la carpeta o la organización Trusted Cloud para los que quieres gestionar los derechos. Los IDs de proyecto son cadenas alfanuméricas, como my-project. Los IDs de carpetas y organizaciones son numéricos, como 123456789012.

Ejecuta el siguiente comando:

Linux, macOS o 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

Deberías recibir una respuesta similar a la siguiente:

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

El método searchEntitlements de la API Privileged Access Manager con el tipo de acceso de la persona que llama GRANT_APPROVER busca los derechos en los que eres aprobador.

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • SCOPE: la organización, la carpeta o el proyecto en el que se encuentra el derecho, con el formato organizations/ORGANIZATION_ID, folders/FOLDER_ID o projects/PROJECT_ID. Los IDs de proyecto son cadenas alfanuméricas, como my-project. Los IDs de carpetas y organizaciones son numéricos, como 123456789012.
  • FILTER: opcional. Devuelve los derechos cuyos valores de campo coinciden con una expresión AIP-160.
  • PAGE_SIZE: opcional. Número de elementos que se van a devolver en una respuesta.
  • PAGE_TOKEN: opcional. Página desde la que se inicia la respuesta, mediante un token de página devuelto en una respuesta anterior.

Método HTTP y 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 tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

[
  {
    "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="
  }
]

Buscar solicitudes de concesión que puedes aprobar o denegar

gcloud

El comando gcloud pam grants search busca una concesión que puedes aprobar o rechazar, o que ya has aprobado o rechazado. Este método no requiere permisos específicos de Gestor de acceso privilegiado para usarse.

Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

  • ENTITLEMENT_ID: ID del derecho al que pertenece la concesión. Para obtener el ID, puedes buscar los derechos de los que seas aprobador.
  • CALLER_RELATIONSHIP_TYPE: usa uno de los siguientes valores:

    • had-approved: devuelve las concesiones que el llamante ha aprobado o denegado.
    • can-approve: las devoluciones permiten que la persona que llama apruebe o rechace la solicitud.
  • RESOURCE_TYPE: opcional. El tipo de recurso al que pertenece el derecho. Usa el valor organization, folder o project.
  • RESOURCE_ID: se usa con RESOURCE_TYPE. El ID del proyecto, la carpeta o la organización Trusted Cloud para los que quieres gestionar los derechos. Los IDs de proyecto son cadenas alfanuméricas, como my-project. Los IDs de carpetas y organizaciones son numéricos, como 123456789012.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud pam grants search \
    --entitlement=ENTITLEMENT_ID \
    --caller-relationship=CALLER_RELATIONSHIP_TYPE \
    --location=global \
    --RESOURCE_TYPE=RESOURCE_ID

Windows (PowerShell)

gcloud pam grants search `
    --entitlement=ENTITLEMENT_ID `
    --caller-relationship=CALLER_RELATIONSHIP_TYPE `
    --location=global `
    --RESOURCE_TYPE=RESOURCE_ID

Windows (cmd.exe)

gcloud pam grants search ^
    --entitlement=ENTITLEMENT_ID ^
    --caller-relationship=CALLER_RELATIONSHIP_TYPE ^
    --location=global ^
    --RESOURCE_TYPE=RESOURCE_ID

Deberías recibir una respuesta similar a la siguiente:

additionalEmailRecipients:
- bola@example.com
createTime: '2024-03-07T00:34:32.557017289Z'
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: 3600s
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

El método searchGrants de la API Privileged Access Manager busca una concesión que puedas aprobar o rechazar, o que ya hayas aprobado o rechazado. Este método no requiere permisos específicos de Gestor de acceso privilegiado para usarse.

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • SCOPE: la organización, la carpeta o el proyecto en el que se encuentra el derecho, con el formato organizations/ORGANIZATION_ID, folders/FOLDER_ID o projects/PROJECT_ID. Los IDs de proyecto son cadenas alfanuméricas, como my-project. Los IDs de carpetas y organizaciones son numéricos, como 123456789012.
  • ENTITLEMENT_ID: ID del derecho al que pertenece la concesión. Para obtener el ID, puedes buscar los derechos de los que seas aprobador.
  • RELATIONSHIP_TYPE: los valores válidos son los siguientes:
    • HAD_APPROVED: devuelve las concesiones que el llamante ha aprobado o denegado previamente.
    • CAN_APPROVE: las devoluciones permiten que la persona que llama apruebe o rechace la solicitud.
  • FILTER: opcional. Devuelve las concesiones cuyos valores de campo coinciden con una expresión AIP-160.
  • PAGE_SIZE: opcional. Número de elementos que se van a devolver en una respuesta.
  • PAGE_TOKEN: opcional. Página desde la que se inicia la respuesta, mediante un token de página devuelto en una respuesta anterior.

Método HTTP y URL:

GET https://privilegedaccessmanager.googleapis.com/v1/SCOPE/locations/global/entitlements/ENTITLEMENT_ID/grants:search?callerRelationship=RELATIONSHIP_TYPE&filter=FILTER&pageSize=PAGE_SIZE&pageToken=PAGE_TOKEN

Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

{
  "grants": [
    {
      "name": "projects/my-project/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/my-project",
          "roleBindings": [
            {
              "role": "roles/storage.admin"
            }
          ]
        }
      },
      "additionalEmailRecipients": [
        "bola@google.com"
      ]
    }
  ]
}

Aprobar concesiones de forma programática

gcloud

El comando gcloud pam grants describe aprueba una solicitud de concesión específica.

Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

  • GRANT_ID: ID de la concesión que vas a aprobar. Puedes obtener el ID de las siguientes formas: Buscando solicitudes de concesión que puedas aprobar o denegar.
  • ENTITLEMENT_ID: ID del derecho al que pertenece la concesión.
  • APPROVAL_REASON: por qué se ha aprobado la subvención.
  • RESOURCE_TYPE: opcional. El tipo de recurso al que pertenece el derecho. Usa el valor organization, folder o project.
  • RESOURCE_ID: se usa con RESOURCE_TYPE. El ID del proyecto, la carpeta o la organización Trusted Cloud para los que quieres gestionar los derechos. Los IDs de proyecto son cadenas alfanuméricas, como my-project. Los IDs de carpetas y organizaciones son numéricos, como 123456789012.

Ejecuta el siguiente comando:

Linux, macOS o 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

Deberías recibir una respuesta similar a la siguiente:

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

El método approveGrant de la API Privileged Access Manager aprueba una solicitud de concesión específica.

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • SCOPE: la organización, la carpeta o el proyecto en el que se encuentra el derecho, con el formato organizations/ORGANIZATION_ID, folders/FOLDER_ID o projects/PROJECT_ID. Los IDs de proyecto son cadenas alfanuméricas, como my-project. Los IDs de carpetas y organizaciones son numéricos, como 123456789012.
  • ENTITLEMENT_ID: ID del derecho al que pertenece la concesión.
  • GRANT_ID: el ID de la concesión que vas a aprobar. Puedes obtener el ID de las siguientes formas: Buscando solicitudes de concesión que puedas aprobar o denegar.
  • REASON: el motivo por el que se ha aprobado la solicitud de concesión.

Método HTTP y URL:

POST https://privilegedaccessmanager.googleapis.com/v1/SCOPE/locations/global/entitlements/ENTITLEMENT_ID/grants/GRANT_ID:approve

Cuerpo JSON de la solicitud:

{
    "reason": "REASON"
}

Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

{
  "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"
  ]
}

Denegar concesiones de forma programática

gcloud

El comando gcloud pam grants describe deniega una solicitud de concesión específica.

Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

  • GRANT_ID: ID de la concesión que vas a rechazar. Puedes obtener el ID buscando las concesiones que puedes aprobar o rechazar.
  • ENTITLEMENT_ID: ID del derecho al que pertenece la concesión.
  • DENIAL_REASON: por qué se ha denegado la concesión.
  • RESOURCE_TYPE: opcional. El tipo de recurso al que pertenece el derecho. Usa el valor organization, folder o project.
  • RESOURCE_ID: se usa con RESOURCE_TYPE. El ID del proyecto, la carpeta o la organización Trusted Cloud para los que quieres gestionar los derechos. Los IDs de proyecto son cadenas alfanuméricas, como my-project. Los IDs de carpetas y organizaciones son numéricos, como 123456789012.

Ejecuta el siguiente comando:

Linux, macOS o 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

Deberías recibir una respuesta similar a la siguiente:

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

El método denyGrant de la API Privileged Access Manager deniega una solicitud de concesión específica.

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • SCOPE: la organización, la carpeta o el proyecto en el que se encuentra el derecho, con el formato organizations/ORGANIZATION_ID, folders/FOLDER_ID o projects/PROJECT_ID. Los IDs de proyecto son cadenas alfanuméricas, como my-project. Los IDs de carpetas y organizaciones son numéricos, como 123456789012.
  • ENTITLEMENT_ID: ID del derecho al que pertenece la concesión.
  • GRANT_ID: ID de la concesión que vas a denegar. Puedes obtener el ID buscando las concesiones que puedes aprobar o rechazar.
  • REASON: el motivo por el que se ha denegado la solicitud de concesión.

Método HTTP y URL:

POST https://privilegedaccessmanager.googleapis.com/v1/SCOPE/locations/global/entitlements/ENTITLEMENT_ID/grants/GRANT_ID:deny

Cuerpo JSON de la solicitud:

{
    "reason": "REASON"
}

Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

{
  "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"
  ]
}