Privileged Access Manager で権限付与を承認または拒否する

利用資格が作成されたら、特定のプリンシパルは、その利用資格に対して権限付与をリクエストできます。その利用資格に承認ワークフローが指定されている場合、承認者として設定されたプリンシパルは、その利用資格の権限付与リクエストを承認または拒否できます。

利用資格に対する権限付与リクエストを承認または拒否する際は、次の点に注意してください。

  • 自分のリクエストを承認することはできません。

  • リクエストが 24 時間以内に承認または拒否されなかった場合、権限付与ステータスは expired に変更されます。その後、権限の昇格がまだ必要な場合は、プリンシパルが新しい権限付与リクエストを行う必要があります。

Google Cloud コンソールを使用して付与を承認または拒否する

利用資格に対して行われた権限付与リクエストを承認または拒否するには、次の操作を行います。

  1. [Privileged Access Manager] ページに移動します。

    Privileged Access Manager に移動

  2. [権限付与を承認] タブ、[承認待ち] タブの順にクリックします。

  3. 承認または拒否するリクエストに関連する行で、[承認 / 拒否] をクリックします。

  4. 理由が必要な場合は、[コメント] フィールドに入力します。

  5. [承認] または [拒否] をクリックします。

承認履歴は [承認履歴] タブで確認できます。承認履歴は、承認アクションが行われた後 30 日間利用できます。

プログラムで権限付与を承認または拒否する

権限付与の承認または拒否を行うには、次の操作を行う必要があります。

  1. 自分が承認者になっている利用資格を検索します。

  2. 関連する利用資格 ID を使用して、承認または拒否できる権限付与リクエストを検索します。

  3. 権限付与リクエストを承認または拒否します。

自身が承認者である利用資格を検索する

gcloud

grant-approver 呼び出し元のアクセスタイプを指定した gcloud beta pam entitlements search コマンドは、自身が承認者である利用資格を検索します。

後述のコマンドデータを使用する前に、次のように置き換えます。

  • RESOURCE_TYPE: 省略可。利用資格が属するリソースタイプ。値 organizationfolder、または project を使用します。
  • RESOURCE_ID: RESOURCE_TYPE とともに使用します。利用資格を管理する Google Cloud プロジェクト、フォルダ、または組織の ID。プロジェクト ID は英数字からなる文字列です(例: my-project)。フォルダ ID と組織 ID は数値です(例: 123456789012)。

次のコマンドを実行します。

Linux、macOS、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

次のようなレスポンスが返されます。

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

GRANT_APPROVER 呼び出し元のアクセスタイプを指定した Privileged Access Manager API の searchEntitlements メソッドは、自身が承認者になっている利用資格を検索します。

リクエストのデータを使用する前に、次のように置き換えます。

  • SCOPE: 利用資格が含まれる組織、フォルダ、またはプロジェクト。organizations/ORGANIZATION_IDfolders/FOLDER_ID、または projects/PROJECT_ID の形式です。プロジェクト ID は英数字からなる文字列です(例: my-project)。フォルダ ID と組織 ID は数値です(例: 123456789012)。
  • FILTER: 省略可。フィールド値が AIP-160 式と一致する利用資格を返します。
  • PAGE_SIZE: 省略可。レスポンスで返すアイテムの数。
  • PAGE_TOKEN: 省略可。前のレスポンスで返されたページトークンを使用して、レスポンスの開始ページを指定します。

HTTP メソッドと URL:

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

リクエストを送信するには、次のいずれかのオプションを開きます。

次のような JSON レスポンスが返されます。

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

承認または拒否できる権限付与リクエストを検索する

gcloud

gcloud beta pam grants search コマンドは、承認または拒否できる、またはすでに承認または拒否した権限付与を検索します。この方法では、Privileged Access Manager の特定の権限は必要ありません。

後述のコマンドデータを使用する前に、次のように置き換えます。

  • ENTITLEMENT_ID: 権限付与の利用資格の ID。ID は、自分が承認者である利用資格を検索することで取得できます。
  • CALLER_RELATIONSHIP_TYPE: 次のいずれかの値を使用できます。

    • had-approved: 呼び出し元が承認または拒否した権限を返します。
    • can-approve: 呼び出し元が承認または拒否できる権限を返します。
  • RESOURCE_TYPE: 省略可。利用資格が属するリソースタイプ。値 organizationfolder、または project を使用します。
  • RESOURCE_ID: RESOURCE_TYPE とともに使用します。利用資格を管理する Google Cloud プロジェクト、フォルダ、または組織の ID。プロジェクト ID は英数字からなる文字列です(例: my-project)。フォルダ ID と組織 ID は数値です(例: 123456789012)。

次のコマンドを実行します。

Linux、macOS、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

次のようなレスポンスが返されます。

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

Privileged Access Manager API の searchGrants メソッドは、承認または拒否できる権限付与と、すでに承認または拒否した権限付与を検索します。この方法では、Privileged Access Manager の特定の権限は必要ありません。

リクエストのデータを使用する前に、次のように置き換えます。

  • SCOPE: 利用資格が含まれる組織、フォルダ、またはプロジェクト。organizations/ORGANIZATION_IDfolders/FOLDER_ID、または projects/PROJECT_ID の形式です。プロジェクト ID は英数字からなる文字列です(例: my-project)。フォルダ ID と組織 ID は数値です(例: 123456789012)。
  • ENTITLEMENT_ID: 権限付与の利用資格の ID。ID は、自分が承認者である利用資格を検索することで取得できます。
  • RELATIONSHIP_TYPE: 有効な値は次のとおりです。
    • HAD_APPROVED: 呼び出し元が以前に承認または拒否した権限を返します。
    • CAN_APPROVE: 呼び出し元が承認または拒否できる権限を返します。
  • FILTER: 省略可。フィールド値が AIP-160 式と一致する権限付与を返します。
  • PAGE_SIZE: 省略可。レスポンスで返すアイテムの数。
  • PAGE_TOKEN: 省略可。前のレスポンスで返されたページトークンを使用して、レスポンスの開始ページを指定します。

HTTP メソッドと 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

リクエストを送信するには、次のいずれかのオプションを開きます。

次のような JSON レスポンスが返されます。

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

プログラムで権限付与を承認する

gcloud

gcloud beta pam grants describe コマンドは、特定の権限付与リクエストを承認します。

後述のコマンドデータを使用する前に、次のように置き換えます。

  • GRANT_ID: 承認する権限付与の ID。ID は、承認または拒否できる権限付与リクエストを検索することで取得できます。
  • ENTITLEMENT_ID: 権限付与の利用資格の ID。
  • APPROVAL_REASON: 権限付与が承認された理由。
  • RESOURCE_TYPE: 省略可。利用資格が属するリソースタイプ。値 organizationfolder、または project を使用します。
  • RESOURCE_ID: RESOURCE_TYPE とともに使用します。利用資格を管理する Google Cloud プロジェクト、フォルダ、または組織の ID。プロジェクト ID は英数字からなる文字列です(例: my-project)。フォルダ ID と組織 ID は数値です(例: 123456789012)。

次のコマンドを実行します。

Linux、macOS、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

次のようなレスポンスが返されます。

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

Privileged Access Manager API の approveGrant メソッドは、特定の権限付与リクエストを承認します。

リクエストのデータを使用する前に、次のように置き換えます。

  • SCOPE: 利用資格が含まれる組織、フォルダ、またはプロジェクト。organizations/ORGANIZATION_IDfolders/FOLDER_ID、または projects/PROJECT_ID の形式です。プロジェクト ID は英数字からなる文字列です(例: my-project)。フォルダ ID と組織 ID は数値です(例: 123456789012)。
  • ENTITLEMENT_ID: 権限付与の利用資格の ID。
  • GRANT_ID: 承認する権限付与の ID。ID は、承認または拒否できる権限付与リクエストを検索することで取得できます。
  • REASON: 権限付与リクエストが承認された理由。

HTTP メソッドと URL:

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

リクエストの本文(JSON):

{
    "reason": "REASON"
}

リクエストを送信するには、次のいずれかのオプションを開きます。

次のような JSON レスポンスが返されます。

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

プログラムで権限付与を拒否する

gcloud

gcloud beta pam grants describe コマンドは、特定の権限付与リクエストを拒否します。

後述のコマンドデータを使用する前に、次のように置き換えます。

  • GRANT_ID: 拒否する権限付与の ID。ID は、承認または拒否できる権限付与を検索することで取得できます。
  • ENTITLEMENT_ID: 権限付与の利用資格の ID。
  • DENIAL_REASON: 権限付与が拒否された理由。
  • RESOURCE_TYPE: 省略可。利用資格が属するリソースタイプ。値 organizationfolder、または project を使用します。
  • RESOURCE_ID: RESOURCE_TYPE とともに使用します。利用資格を管理する Google Cloud プロジェクト、フォルダ、または組織の ID。プロジェクト ID は英数字からなる文字列です(例: my-project)。フォルダ ID と組織 ID は数値です(例: 123456789012)。

次のコマンドを実行します。

Linux、macOS、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

次のようなレスポンスが返されます。

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

Privileged Access Manager API の denyGrant メソッドが特定の権限付与リクエストを拒否します。

リクエストのデータを使用する前に、次のように置き換えます。

  • SCOPE: 利用資格が含まれる組織、フォルダ、またはプロジェクト。organizations/ORGANIZATION_IDfolders/FOLDER_ID、または projects/PROJECT_ID の形式です。プロジェクト ID は英数字からなる文字列です(例: my-project)。フォルダ ID と組織 ID は数値です(例: 123456789012)。
  • ENTITLEMENT_ID: 権限付与の利用資格の ID。
  • GRANT_ID: 拒否する権限付与の ID。ID は、承認または拒否できる権限付与を検索することで取得できます。
  • REASON: 権限付与リクエストが拒否された理由。

HTTP メソッドと URL:

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

リクエストの本文(JSON):

{
    "reason": "REASON"
}

リクエストを送信するには、次のいずれかのオプションを開きます。

次のような JSON レスポンスが返されます。

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