Controlar o acesso aos endpoints da Vertex AI

Nesta página, você verá como controlar o acesso a um endpoint da Vertex AI configurando uma política do IAM. Ela pressupõe que você já conheça os conceitos do IAM, como políticas, papéis, permissões e principais, conforme descrito em Controle de acesso da Vertex AI com IAM e Conceitos relacionados ao gerenciamento de acesso.

Uma política do IAM inclui uma ou mais vinculações de papel que definem quais papéis do IAM são associados a quais principais. Um papel é um conjunto de permissões concedidas a um principal. A Vertex AI fornece papéis predefinidos que podem ser usados nas suas políticas. Também é possível criar papéis personalizados.

Receber uma política do IAM

É possível visualizar a política atual do IAM em um endpoint da Vertex AI usando a API REST. Para fazer isso, você precisa ter a permissão endpoints.getIamPolicy no endpoint ou no projeto. O papel de administrador da Vertex AI (roles/aiplatform.admin) concede essa permissão.

REST

Para receber a política do IAM de um recurso, envie uma solicitação POST que use o método getIamPolicy.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • LOCATION_ID: a região em que o endpoint está localizado, por exemplo, us-central1.
  • PROJECT_ID pelo ID do projeto no Google Cloud.
  • ENDPOINT_ID: o ID do endpoint.

Método HTTP e URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:getIamPolicy

Para enviar a solicitação, escolha uma destas opções:

curl

execute o seguinte comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d "" \
"https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:getIamPolicy"

PowerShell

execute o seguinte comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:getIamPolicy" | Select-Object -Expand Content

Você receberá uma resposta JSON com a política atual do IAM:

{
  "version": 1,
  "etag": "BwXTmICm7mI",
  "bindings": [
    {
      "role": "roles/aiplatform.user",
      "members": [
        "user:example@example.com"
      ]
    }
  ]
}

Definir uma política do IAM.

É possível definir uma política do IAM em um endpoint usando a API REST. Para fazer isso, você precisa ter a permissão endpoints.setIamPolicy no endpoint ou no projeto. O papel de administrador da Vertex AI (roles/aiplatform.admin) concede essa permissão.

REST

Para definir a política do IAM em um recurso, envie uma solicitação POST que use o método setIamPolicy.

A definição de uma política do IAM modifica qualquer política atual. As alterações não são anexadas. Para modificar a política de um recurso, use o método getIamPolicy para receber a política e faça modificações. Inclua a política modificada com etag na solicitação setIamPolicy.

Se você receber um código de erro 409, isso significa que uma solicitação setIamPolicy simultânea já atualizou a política. Use o método getIamPolicy para receber o etag atualizado da política e, em seguida, tente fazer a solicitação setIamPolicy novamente com o novo etag.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • LOCATION_ID: a região em que o endpoint está localizado, por exemplo, us-central1.
  • PROJECT_ID pelo ID do projeto no Google Cloud.
  • ENDPOINT_ID: o ID do endpoint.
  • ROLE: um papel do IAM que inclui as permissões a serem concedidas, como roles/aiplatform.user.
  • PRINCIPAL: o principal que tem as permissões do papel, como user:myuser@example.com.
  • ETAG: um valor de string usado para evitar que atualizações simultâneas de uma política sejam substituídas. Esse valor é retornado como parte da resposta de getIamPolicy.

Método HTTP e URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:setIamPolicy

Corpo JSON da solicitação:

{
  "policy": {
    "bindings": [
      {
        "role": "ROLE",
        "members": [
          "PRINCIPAL"
        ]
      },
      ...
    ],
    "etag": "ETAG"
  }
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:setIamPolicy"

PowerShell

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:setIamPolicy" | Select-Object -Expand Content

Você receberá uma resposta JSON com a política atual do IAM:

{
  "version": 1,
  "etag": "BwXTmICm7mI",
  "bindings": [
    {
      "role": "roles/aiplatform.user",
      "members": [
        "user:example@example.com"
      ]
    }
  ]
}

Verificar as permissões de IAM de um usuário em um endpoint

É possível verificar se o usuário autenticado no momento tem permissões específicas do IAM para um endpoint.

REST

Para verificar se um usuário tem permissões específicas do IAM para um recurso, envie uma solicitação POST que use o método testIamPermissions. O exemplo a seguir permite testar se o usuário autenticado no momento tem um conjunto de permissões do IAM para um endpoint.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • LOCATION_ID: a região em que o endpoint está localizado, por exemplo, us-central1.
  • PROJECT_ID pelo ID do projeto no Google Cloud.
  • ENDPOINT_ID: o ID do endpoint.

Método HTTP e URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:testIamPermissions -d

Corpo JSON da solicitação:

{
  "permissions": [
    "aiplatform.googleapis.com/aiplatform.endpoints.get",
    "aiplatform.googleapis.com/aiplatform.endpoints.predict"
  ]
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:testIamPermissions -d"

PowerShell

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:testIamPermissions -d" | Select-Object -Expand Content
Você receberá uma resposta JSON semelhante a seguinte. A resposta inclui apenas as permissões do corpo JSON da solicitação que estão disponíveis para o usuário autenticado no momento.
{
  "permissions": [
    "aiplatform.googleapis.com/aiplatform.endpoints.get",
    "aiplatform.googleapis.com/aiplatform.endpoints.predict"
  ]
}