Cómo aprobar o rechazar otorgamientos con Privileged Access Manager

Después de crear un derecho, los principales seleccionados pueden solicitar una concesión en función de ese derecho. Si ese derecho tiene especificado un flujo de trabajo de aprobación, los principales seleccionados configurados como responsables de aprobación pueden aprobar o rechazar las solicitudes de otorgamiento de ese derecho.

Ten en cuenta lo siguiente cuando apruebes o rechaces una solicitud de concesión en función de un derecho:

  • No puedes aprobar tu propia solicitud.

  • Si una solicitud no se aprueba ni se rechaza en 24 horas, el estado de la concesión cambia a expired. Después de esto, un principal debe realizar una nueva solicitud de otorgamiento si aún se requiere la elevación de privilegios.

Aprueba o rechaza las concesiones con la consola de Google Cloud

Para aprobar o rechazar una solicitud de otorgamiento que se realizó en función de un derecho, completa las siguientes instrucciones:

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

    Ir a Privileged Access Manager

  2. Haz clic en la pestaña Aprobar subvenciones y, luego, en la pestaña Aprobación pendiente.

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

  4. Si se requiere una justificación, ingrésala en el campo Comentario.

  5. Haz clic en Aprobar o Rechazar.

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

Aprueba o rechaza las concesiones de forma programática

Para aprobar o rechazar las subvenciones, debes completar las siguientes acciones:

  1. Busca los derechos para los que tienes permiso de aprobación.

  2. Con el ID de derecho relevante, busca las solicitudes de otorgamiento que puedes aprobar o rechazar.

  3. Aprobar o rechazar las solicitudes de otorgamiento.

Busca los derechos para los que tienes permiso de aprobación

gcloud

El comando gcloud beta pam entitlements search con el tipo de acceso del emisor grant-approver busca derechos en los que eres revisor.

Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:

  • RESOURCE_TYPE: Opcional Es el tipo de recurso al que pertenece el derecho. Usa el valor organization, folder o project.
  • RESOURCE_ID: Se usa con RESOURCE_TYPE. Es el ID del proyecto, la carpeta o la organización de Google Cloud para el que deseas administrar los derechos. Los IDs de proyecto son cadenas alfanuméricas, como my-project. Los IDs de carpeta y organización son numéricos, como 123456789012.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud beta pam entitlements search \
    --caller-access-type=grant-approver \
    --location=global \
    --RESOURCE_TYPE=RESOURCE_ID

Windows (PowerShell)

gcloud beta pam entitlements search `
    --caller-access-type=grant-approver `
    --location=global `
    --RESOURCE_TYPE=RESOURCE_ID

Windows (cmd.exe)

gcloud beta pam entitlements search ^
    --caller-access-type=grant-approver ^
    --location=global ^
    --RESOURCE_TYPE=RESOURCE_ID

Deberías recibir una respuesta similar a la que figura a continuación:

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 de Privileged Access Manager con el tipo de acceso del emisor GRANT_APPROVER busca derechos en los que eres responsable de aprobación.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • SCOPE: La organización, la carpeta o el proyecto en el que se encuentra el derecho, en 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 carpeta y organización son numéricos, como 123456789012.
  • FILTER: Opcional Muestra los derechos cuyos valores de campo coinciden con una expresión de AIP-160.
  • PAGE_SIZE: Opcional Es la cantidad de elementos que se mostrarán en una respuesta.
  • PAGE_TOKEN: Opcional La página desde la que se debe iniciar la respuesta, con un token de página que se muestra en una respuesta anterior.

Método HTTP y URL:

GET https://privilegedaccessmanager.googleapis.com/v1beta/SCOPE/locations/global/entitlements:search?callerAccessType=GRANT_APPROVER&filter=FILTER&pageSize=PAGE_SIZE&pageToken=PAGE_TOKEN

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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

Busca solicitudes de otorgamiento que puedas aprobar o rechazar

gcloud

El comando gcloud beta pam grants search busca una subvención que puedas aprobar o rechazar o que ya hayas aprobado o rechazado. Este método no requiere permisos específicos de Privileged Access Manager para usarlo.

Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:

  • ENTITLEMENT_ID: Es el ID del derecho al que pertenece la concesión. Para recuperar el ID, puedes buscar los derechos de los que eres revisor.
  • CALLER_RELATIONSHIP_TYPE: Usa uno de los siguientes valores:

    • had-approved: Muestra los permisos que el emisor aprobó o rechazó.
    • can-approve: Muestra las concesiones que el emisor puede aprobar o rechazar.
  • RESOURCE_TYPE: Opcional Es el tipo de recurso al que pertenece el derecho. Usa el valor organization, folder o project.
  • RESOURCE_ID: Se usa con RESOURCE_TYPE. Es el ID del proyecto, la carpeta o la organización de Google Cloud para el que deseas administrar los derechos. Los IDs de proyecto son cadenas alfanuméricas, como my-project. Los IDs de carpeta y organización son numéricos, como 123456789012.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

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

Windows (PowerShell)

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

Windows (cmd.exe)

gcloud beta 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 que figura a continuación:

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 de Privileged Access Manager busca un otorgamiento que puedas aprobar o rechazar o que ya hayas aprobado o rechazado. Este método no requiere permisos específicos de Privileged Access Manager para usarlo.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • SCOPE: La organización, la carpeta o el proyecto en el que se encuentra el derecho, en 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 carpeta y organización son numéricos, como 123456789012.
  • ENTITLEMENT_ID: Es el ID del derecho al que pertenece la concesión. Para recuperar el ID, puedes buscar los derechos de los que eres revisor.
  • RELATIONSHIP_TYPE: Estos son los valores válidos:
    • HAD_APPROVED: Muestra las concesiones que el emisor aprobó o denegó anteriormente.
    • CAN_APPROVE: Muestra las concesiones que el emisor puede aprobar o rechazar.
  • FILTER: Opcional Muestra las subvenciones cuyos valores de campo coinciden con una expresión de AIP-160.
  • PAGE_SIZE: Opcional Es la cantidad de elementos que se mostrarán en una respuesta.
  • PAGE_TOKEN: Opcional La página desde la que se debe iniciar la respuesta, con un token de página que se muestra en una respuesta anterior.

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

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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

Cómo aprobar otorgamientos de manera programática

gcloud

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

Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:

  • GRANT_ID: Es el ID de la subvención que apruebas. Para recuperar el ID, puedes buscar solicitudes de subvenciones que puedas aprobar o rechazar.
  • ENTITLEMENT_ID: Es el ID del derecho al que pertenece la concesión.
  • APPROVAL_REASON: Por qué se aprobó el otorgamiento.
  • RESOURCE_TYPE: Opcional Es el tipo de recurso al que pertenece el derecho. Usa el valor organization, folder o project.
  • RESOURCE_ID: Se usa con RESOURCE_TYPE. Es el ID del proyecto, la carpeta o la organización de Google Cloud para el que deseas administrar los derechos. Los IDs de proyecto son cadenas alfanuméricas, como my-project. Los IDs de carpeta y organización son numéricos, como 123456789012.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud beta pam grants approve \
    GRANT_ID \
    --entitlement=ENTITLEMENT_ID \
    --reason="APPROVAL_REASON" \
    --location=global \
    --RESOURCE_TYPE=RESOURCE_ID

Windows (PowerShell)

gcloud beta pam grants approve `
    GRANT_ID `
    --entitlement=ENTITLEMENT_ID `
    --reason="APPROVAL_REASON" `
    --location=global `
    --RESOURCE_TYPE=RESOURCE_ID

Windows (cmd.exe)

gcloud beta 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 que figura a continuación:

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 de Privileged Access Manager aprueba una solicitud de otorgamiento específica.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • SCOPE: La organización, la carpeta o el proyecto en el que se encuentra el derecho, en 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 carpeta y organización son numéricos, como 123456789012.
  • ENTITLEMENT_ID: Es el ID del derecho al que pertenece la concesión.
  • GRANT_ID: Es el ID de la subvención que apruebas. Para recuperar el ID, puedes buscar solicitudes de subvenciones que puedas aprobar o rechazar.
  • REASON: El motivo por el que se aprobó la solicitud de otorgamiento.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
    "reason": "REASON"
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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

Cómo denegar otorgamientos de manera programática

gcloud

El comando gcloud beta pam grants describe rechaza una solicitud de subvención específica.

Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:

  • GRANT_ID: Es el ID de la concesión que rechazas. Para recuperar el ID, busca las subvenciones que puedes aprobar o rechazar.
  • ENTITLEMENT_ID: Es el ID del derecho al que pertenece la concesión.
  • DENIAL_REASON: Por qué se rechazó el otorgamiento.
  • RESOURCE_TYPE: Opcional Es el tipo de recurso al que pertenece el derecho. Usa el valor organization, folder o project.
  • RESOURCE_ID: Se usa con RESOURCE_TYPE. Es el ID del proyecto, la carpeta o la organización de Google Cloud para el que deseas administrar los derechos. Los IDs de proyecto son cadenas alfanuméricas, como my-project. Los IDs de carpeta y organización son numéricos, como 123456789012.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud beta pam grants deny \
    GRANT_ID \
    --entitlement=ENTITLEMENT_ID \
    --reason="DENIAL_REASON" \
    --location=global \
    --RESOURCE_TYPE=RESOURCE_ID

Windows (PowerShell)

gcloud beta pam grants deny `
    GRANT_ID `
    --entitlement=ENTITLEMENT_ID `
    --reason="DENIAL_REASON" `
    --location=global `
    --RESOURCE_TYPE=RESOURCE_ID

Windows (cmd.exe)

gcloud beta 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 que figura a continuación:

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 de Privileged Access Manager niega una solicitud de otorgamiento específica.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • SCOPE: La organización, la carpeta o el proyecto en el que se encuentra el derecho, en 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 carpeta y organización son numéricos, como 123456789012.
  • ENTITLEMENT_ID: Es el ID del derecho al que pertenece la concesión.
  • GRANT_ID: Es el ID de la subvención que rechazas. Para recuperar el ID, puedes buscar las subvenciones que puedes aprobar o rechazar.
  • REASON: Es el motivo por el que se rechazó la solicitud de otorgamiento.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
    "reason": "REASON"
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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