Reveja e aplique recomendações de funções para conjuntos de dados do BigQuery

Esta página explica como ver, compreender e aplicar recomendações de funções de IAM para conjuntos de dados do BigQuery. As recomendações de funções ajudam a aplicar o princípio do menor privilégio, garantindo que os principais têm apenas as autorizações de que realmente precisam.

Antes de começar

  • Enable the IAM and Recommender APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  • Certifique-se de que tem uma ativação ao nível da organização ou do projeto do nível Premium ou Enterprise do Security Command Center. Para mais informações, consulte o artigo Perguntas sobre faturação.

  • Compreenda as recomendações de funções.

  • Configurar autenticação.

    Select the tab for how you plan to use the samples on this page:

    gcloud

    In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    REST

    Para usar os exemplos da API REST nesta página num ambiente de desenvolvimento local, usa as credenciais que fornece à CLI gcloud.

      Instale a CLI Google Cloud. Após a instalação, inicialize a CLI gcloud executando o seguinte comando:

      gcloud init

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

    Para mais informações, consulte o artigo Autenticar para usar REST na Google Cloud documentação de autenticação.

Funções de IAM necessárias

Para receber as autorizações de que precisa para gerir as recomendações de funções ao nível do conjunto de dados, peça ao seu administrador que lhe conceda as seguintes funções do IAM:

Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Estas funções predefinidas contêm as autorizações necessárias para gerir as recomendações de funções ao nível do conjunto de dados. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:

Autorizações necessárias

São necessárias as seguintes autorizações para gerir recomendações de funções ao nível do conjunto de dados:

  • Para ver recomendações:
    • iam.roles.get no seu projeto
    • iam.roles.list no seu projeto
    • recommender.iamPolicyRecommendations.get no seu projeto
    • recommender.iamPolicyRecommendations.list no seu projeto
    • recommender.iamPolicyInsights.get no seu projeto
    • recommender.iamPolicyInsights.list no seu projeto
    • bigquery.datasets.getIamPolicy no seu conjunto de dados
  • Para aplicar e ignorar recomendações:
    • recommender.iamPolicyRecommendations.update no seu projeto
    • bigquery.datasets.setIamPolicy no seu conjunto de dados

Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.

Reveja e aplique recomendações

Pode rever e aplicar recomendações de funções ao nível do conjunto de dados com a CLI Google Cloud e a API Recommender.

gcloud

Reveja as suas recomendações:

Para apresentar as recomendações ao nível do conjunto de dados, execute o comando gcloud recommender recommendations list filtrando apenas as recomendações do conjunto de dados do BigQuery:

gcloud recommender recommendations list \
    --location=LOCATION \
    --recommender=google.iam.policy.Recommender \
    --project=PROJECT_ID \
    --format=json \
    --filter="recommenderSubtype:REMOVE_ROLE_BIGQUERY_DATASET OR recommenderSubtype:REPLACE_ROLE_BIGQUERY_DATASET"

Substitua os seguintes valores:

  • LOCATION: a região onde os seus conjuntos de dados do Cloud Storage estão localizados, por exemplo, us ou us-central1.
  • PROJECT_ID: O ID do Google Cloud projeto que contém os seus conjuntos de dados do BigQuery. Os IDs dos projetos são strings alfanuméricas, como my-project.

A resposta é semelhante ao seguinte exemplo. Neste exemplo, todos os utilizadores com a função de editor no projeto my-project (projectEditor:my-project) têm a função de editor de dados do BigQuery (roles/bigquery.dataEditor) no conjunto de dados dataset-1. No entanto, esta função não foi usada nos últimos 90 dias. Como resultado, a recomendação de função sugere que revogue a função:

[
  {
    "associatedInsights": [
      {
        "insight": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/984eccca-0241-472f-baab-2557dd0d7282"
      }
    ],
    "content": {
      "operationGroups": [
        {
          "operations": [
            {
              "action": "remove",
              "path": "/iamPolicy/bindings/*/members/*",
              "pathFilters": {
                "/iamPolicy/bindings/*/condition/expression": "",
                "/iamPolicy/bindings/*/members/*": "projectEditor:my-project",
                "/iamPolicy/bindings/*/role": "roles/bigquery.dataEditor"
              },
              "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1",
              "resourceType": "bigquery.googleapis.com/Dataset"
            }
          ]
        }
      ],
      "overview": {
        "addedRoles": [],
        "member": "projectEditor:my-project",
        "minimumObservationPeriodInDays": "0",
        "removedRole": "roles/bigquery.dataEditor",
        "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
      }
    },
    "description": "This role has not been used during the observation window.",
    "etag": "\"3b123bc08d028128\"",
    "lastRefreshTime": "2024-02-04T08:00:00Z",
    "name": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/0e9831fe-6810-476b-b14d-2b64bda17288",
    "primaryImpact": {
      "category": "SECURITY",
      "securityProjection": {
        "details": {
          "revokedIamPermissionsCount": 37
        }
      }
    },
    "priority": "P4",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    "stateInfo": {
      "state": "ACTIVE"
    },
    "targetResources": [
      "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
    ]
  },
  {
    "associatedInsights": [
      {
        "insight": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/9d11057e-9c71-410f-ad55-fc82d87761d0"
      }
    ],
    "content": {
      "operationGroups": [
        {
          "operations": [
            {
              "action": "remove",
              "path": "/iamPolicy/bindings/*/members/*",
              "pathFilters": {
                "/iamPolicy/bindings/*/condition/expression": "",
                "/iamPolicy/bindings/*/members/*": "user:alicexz@google.com",
                "/iamPolicy/bindings/*/role": "roles/bigquery.dataOwner"
              },
              "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1",
              "resourceType": "bigquery.googleapis.com/Dataset"
            }
          ]
        }
      ],
      "overview": {
        "addedRoles": [],
        "member": "user:alicexz@google.com",
        "minimumObservationPeriodInDays": "0",
        "removedRole": "roles/bigquery.dataOwner",
        "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
      }
    },
    "description": "This role has not been used during the observation window.",
    "etag": "\"1da285f7aa6438f1\"",
    "lastRefreshTime": "2024-02-04T08:00:00Z",
    "name": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/56013294-cf81-402a-8cde-25489545777c",
    "primaryImpact": {
      "category": "SECURITY",
      "securityProjection": {
        "details": {
          "revokedIamPermissionsCount": 64
        }
      }
    },
    "priority": "P4",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    "stateInfo": {
      "state": "ACTIVE"
    },
    "targetResources": [
      "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
    ]
  }
]

Reveja cuidadosamente cada recomendação e considere como vai alterar o acesso do principal aos recursos do Google Cloud . Para saber como rever as recomendações da CLI gcloud, consulte o artigo Reveja as recomendações nesta página.

Para aplicar uma recomendação:

  1. Use o comando gcloud recommender recommendations mark-claimed para alterar o estado da recomendação para CLAIMED,, o que impede que a recomendação seja alterada enquanto a aplica:

    gcloud recommender recommendations mark-claimed \
        RECOMMENDATION_ID \
        --location=LOCATION \
        --recommender=google.iam.policy.Recommender \
        --project=PROJECT_ID \
        --format=FORMAT \
        --etag=ETAG \
        --state-metadata=STATE_METADATA
    

    Substitua os seguintes valores:

    • RECOMMENDATION_ID: o identificador exclusivo da recomendação. Este valor aparece no final do campo name na recomendação. Por exemplo, se o campo name for projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, o ID da recomendação é fb927dc1-9695-4436-0000-f0f285007c0f.
    • LOCATION: a região onde o seu conjunto de dados do BigQuery está localizado, por exemplo, us ou us-central1.
    • PROJECT_ID: o ID do Google Cloud projeto que contém os seus conjuntos de dados do BigQuery. Os IDs dos projetos são strings alfanuméricas, como my-project.
    • FORMAT: o formato da resposta. Use json ou yaml.
    • ETAG: o valor do campo etag na recomendação, como "dd0686e7136a4cbb". Tenha em atenção que este valor pode incluir aspas.
    • STATE_METADATA: opcional. Pares de chave-valor separados por vírgulas que contêm a sua escolha de metadados sobre a recomendação. Por exemplo, --state-metadata=reviewedBy=alice,priority=high. Os metadados substituem o campo stateInfo.stateMetadata na recomendação.

    Se o comando for bem-sucedido, a resposta mostra a recomendação no estado CLAIMED, conforme mostrado no exemplo seguinte. Para esclarecer, o exemplo omite a maioria dos campos:

    ...
    "priority": "P1",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    "stateInfo": {
      "state": "CLAIMED"
    }
    ...
  2. Obtenha a política de permissão para o conjunto de dados e, em seguida, modifique e defina a política de permissão para que reflita a recomendação.

  3. Atualize o estado da recomendação para SUCCEEDED, se conseguiu aplicar a recomendação, ou FAILED, se não conseguiu aplicar a recomendação:

    gcloud recommender recommendations COMMAND \
        RECOMMENDATION_ID \
        --location=LOCATION \
        --recommender=google.iam.policy.Recommender \
        --project=PROJECT_ID \
        --format=FORMAT \
        --etag=ETAG \
        --state-metadata=STATE_METADATA
    

    Substitua os seguintes valores:

    • COMMAND: use mark-succeeded se conseguiu aplicar a recomendação ou mark-failed se não conseguiu aplicar a recomendação.
    • RECOMMENDATION_ID: o identificador exclusivo da recomendação. Este valor aparece no final do campo name na recomendação. Por exemplo, se o campo name for projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, o ID da recomendação é fb927dc1-9695-4436-0000-f0f285007c0f.
    • LOCATION: a região onde o seu conjunto de dados do BigQuery está localizado, por exemplo, us ou us-central1.
    • PROJECT_ID: o ID do Google Cloud projeto que contém os seus conjuntos de dados do BigQuery. Os IDs dos projetos são strings alfanuméricas, como my-project.
    • FORMAT: o formato da resposta. Use json ou yaml.
    • ETAG: o valor do campo etag na recomendação, como "dd0686e7136a4cbb". Tenha em atenção que este valor pode incluir aspas.
    • STATE_METADATA: opcional. Pares de chave-valor separados por vírgulas que contêm a sua escolha de metadados sobre a recomendação. Por exemplo, --state-metadata=reviewedBy=alice,priority=high. Os metadados substituem o campo stateInfo.stateMetadata na recomendação.

    Por exemplo, se marcou a recomendação como tendo sido bem-sucedida, a resposta mostra a recomendação num estado SUCCEEDED. Para esclarecer, este exemplo omite a maioria dos campos:

    ...
    "priority": "P1",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    "stateInfo": {
      "state": "SUCCEEDED"
    }
    ...

REST

Reveja as suas recomendações:

Para listar todas as recomendações disponíveis para os seus conjuntos de dados do BigQuery, use o método recommendations.list da API Recommender.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • PROJECT_ID: o ID do projeto do Google Cloud que contém os seus conjuntos de dados do BigQuery.Google Cloud Os IDs dos projetos são strings alfanuméricas, como my-project.
  • LOCATION: a região onde os seus conjuntos de dados do BigQuery estão localizados, por exemplo, us ou us-central1.
  • PAGE_SIZE: opcional. O número máximo de resultados a devolver deste pedido. Se não for especificado, o servidor determina o número de resultados a devolver. Se o número de recomendações for superior ao tamanho da página, a resposta contém um token de paginação que pode usar para obter a página seguinte de resultados.
  • PAGE_TOKEN: opcional. O token de paginação devolvido numa resposta anterior deste método. Se for especificado, a lista de recomendações começa onde o pedido anterior terminou.
  • PROJECT_ID: O ID do Google Cloud projeto. Os IDs dos projetos são strings alfanuméricas, como my-project.

Método HTTP e URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations?filter=recommenderSubtype%20%3D%20REMOVE_ROLE_BIGQUERY_DATASET%20OR%20recommenderSubtype%20%3D%20REPLACE_ROLE_BIGQUERY_DATASET&pageSize=PAGE_SIZE&pageToken=PAGE_TOKEN

Para enviar o seu pedido, expanda uma destas opções:

A resposta é semelhante ao seguinte exemplo. Neste exemplo, todos os utilizadores com a função de editor no projeto `my-project` (projectEditor:my-project) têm a função de editor de dados do BigQuery (roles/bigquery.dataEditor) no conjunto de dados dataset-1. No entanto, esta função não foi usada nos últimos 90 dias. Como resultado, a recomendação de função sugere que revogue a função:

{
  "recommendations": [
    {
      "name": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/0e9831fe-6810-476b-b14d-2b64bda17288",
      "description": "This role has not been used during the observation window.",
      "lastRefreshTime": "2024-02-02T08:00:00Z",
      "primaryImpact": {
        "category": "SECURITY",
        "securityProjection": {
          "details": {
            "revokedIamPermissionsCount": 37
          }
        }
      },
      "content": {
        "operationGroups": [
          {
            "operations": [
              {
                "action": "remove",
                "resourceType": "bigquery.googleapis.com/Dataset",
                "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1",
                "path": "/iamPolicy/bindings/*/members/*",
                "pathFilters": {
                  "/iamPolicy/bindings/*/condition/expression": "",
                  "/iamPolicy/bindings/*/members/*": "projectEditor:my-project",
                  "/iamPolicy/bindings/*/role": "roles/bigquery.dataEditor"
                }
              }
            ]
          }
        ],
        "overview": {
          "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1",
          "member": "projectEditor:my-project",
          "removedRole": "roles/bigquery.dataEditor",
          "addedRoles": [],
          "minimumObservationPeriodInDays": "0"
        }
      },
      "stateInfo": {
        "state": "ACTIVE"
      },
      "etag": "\"d008ad3780bad5e0\"",
      "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
      "associatedInsights": [
        {
          "insight": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/984eccca-0241-472f-baab-2557dd0d7282"
        }
      ],
      "priority": "P4",
      "targetResources": [
        "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
      ]
    }
  ]
}

Reveja cuidadosamente cada recomendação e considere como vai alterar o acesso do principal aos recursos do Google Cloud . Para saber como rever as recomendações da API REST, consulte o artigo Reveja as recomendações nesta página.

Para aplicar uma recomendação:

  1. Marque a recomendação como CLAIMED:

    Para marcar uma recomendação como CLAIMED, o que impede que a recomendação seja alterada enquanto a aplica, use o método recommendations.markClaimed da API Recommender.

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • PROJECT_ID: o ID do projeto do Google Cloud que contém os seus conjuntos de dados do BigQuery.Google Cloud Os IDs dos projetos são strings alfanuméricas, como my-project.
    • LOCATION: a região onde o seu conjunto de dados do BigQuery está localizado, por exemplo, us ou us-central1.
    • RECOMMENDATION_ID: o identificador exclusivo da recomendação. Este valor aparece no final do campo name na recomendação. Por exemplo, se o campo name for projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, o ID da recomendação é fb927dc1-9695-4436-0000-f0f285007c0f.
    • ETAG: o valor do campo etag na recomendação, como "dd0686e7136a4cbb". Use barras invertidas para escapar as aspas, por exemplo, "\"df7308cca9719dcc\"".
    • STATE_METADATA: opcional. Um objeto que contém pares de chave-valor com os metadados à sua escolha sobre a recomendação. Por exemplo, {"reviewedBy": "alice", "priority": "high"}. Os metadados substituem o campo stateInfo.stateMetadata na recomendação.

    Método HTTP e URL:

    POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations/RECOMMENDATION_ID:markClaimed

    Corpo JSON do pedido:

    {
      "etag": "ETAG",
      "stateMetadata": {
        "STATE_METADATA"
      }
    }
    

    Para enviar o seu pedido, expanda uma destas opções:

    A resposta mostra a recomendação no estado CLAIMED, conforme mostrado no exemplo seguinte. Para esclarecer, este exemplo omite a maioria dos campos:

    ...
    "stateInfo": {
      "state": "CLAIMED"
    },
    "etag": "\"7caf4103d7669e12\"",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    ...
    

  2. Obtenha a política de autorização para o projeto e, em seguida, modifique a política de autorização para que reflita a recomendação.

  3. Atualize o estado da recomendação para SUCCEEDED, se conseguiu aplicar a recomendação, ou FAILED, se não conseguiu aplicar a recomendação:

    SUCCEEDED

    Para marcar uma recomendação como SUCCEEDED, indicando que a conseguiu aplicar, use o método recommendations.markSucceeded da API Recommender.

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • PROJECT_ID: o ID do projeto do Google Cloud que contém os seus conjuntos de dados do BigQuery.Google Cloud Os IDs dos projetos são strings alfanuméricas, como my-project.
    • LOCATION: a região onde o seu conjunto de dados do BigQuery está localizado, por exemplo, us ou us-central1.
    • RECOMMENDATION_ID: o identificador exclusivo da recomendação. Este valor aparece no final do campo name na recomendação. Por exemplo, se o campo name for projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, o ID da recomendação é fb927dc1-9695-4436-0000-f0f285007c0f.
    • ETAG: o valor do campo etag na recomendação, como "dd0686e7136a4cbb". Use barras invertidas para escapar as aspas, por exemplo, "\"df7308cca9719dcc\"".
    • STATE_METADATA: opcional. Um objeto que contém pares de chave-valor com os metadados à sua escolha sobre a recomendação. Por exemplo, {"reviewedBy": "alice", "priority": "high"}. Os metadados substituem o campo stateInfo.stateMetadata na recomendação.

    Método HTTP e URL:

    POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations/RECOMMENDATION_ID:markSucceeded

    Corpo JSON do pedido:

    {
      "etag": "ETAG",
      "stateMetadata": {
        "STATE_METADATA"
      }
    }
    

    Para enviar o seu pedido, expanda uma destas opções:

    A resposta mostra a recomendação no estado SUCCEEDED, conforme mostrado no exemplo seguinte. Para esclarecer, este exemplo omite a maioria dos campos:

    ...
    "stateInfo": {
      "state": "SUCCEEDED"
    },
    "etag": "\"7caf4103d7669e12\"",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    ...
    

    FAILED

    Para marcar uma recomendação como FAILED, indicando que não a conseguiu aplicar, use o método recommendations.markFailed da API Recommender.

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • PROJECT_ID: o ID do projeto do Google Cloud que contém os seus conjuntos de dados do BigQuery.Google Cloud Os IDs dos projetos são strings alfanuméricas, como my-project.
    • LOCATION: a região onde o seu conjunto de dados do BigQuery está localizado, por exemplo, us ou us-central1.
    • RECOMMENDATION_ID: o identificador exclusivo da recomendação. Este valor aparece no final do campo name na recomendação. Por exemplo, se o campo name for projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, o ID da recomendação é fb927dc1-9695-4436-0000-f0f285007c0f.
    • ETAG: o valor do campo etag na recomendação, como "dd0686e7136a4cbb". Use barras invertidas para escapar as aspas, por exemplo, "\"df7308cca9719dcc\"".
    • STATE_METADATA: opcional. Um objeto que contém pares de chave-valor com os metadados à sua escolha sobre a recomendação. Por exemplo, {"reviewedBy": "alice", "priority": "high"}. Os metadados substituem o campo stateInfo.stateMetadata na recomendação.

    Método HTTP e URL:

    POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations/RECOMMENDATION_ID:markFailed

    Corpo JSON do pedido:

    {
      "etag": "ETAG",
      "stateMetadata": {
        "STATE_METADATA"
      }
    }
    

    Para enviar o seu pedido, expanda uma destas opções:

    A resposta mostra a recomendação no estado FAILED, conforme mostrado no exemplo seguinte. Para esclarecer, este exemplo omite a maioria dos campos:

    ...
    "stateInfo": {
      "state": "FAILED"
    },
    "etag": "\"7caf4103d7669e12\"",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    ...
    

Compreenda as recomendações

Cada recomendação inclui informações para ajudar a compreender o motivo pelo qual a recomendação foi feita.

Para ver detalhes sobre os campos de uma recomendação, consulte a Recommendation referência.

Para ver a utilização de autorizações em que esta recomendação se baseia, consulte as estatísticas de políticas associadas à recomendação. Estas estatísticas estão listadas no campo associatedInsights. Para ver uma estatística de políticas associada à recomendação, faça o seguinte:

  1. Copie o ID da estatística associada. O ID é tudo o que está depois de insights/ no campo insight. Por exemplo, se o campo insight indicar projects/123456789012/locations/us/insightTypes/google.iam.policy.Insight/insights/7849add9-73c0-419e-b169-42b3671173fb, o ID da estatística é 7849add9-73c0-419e-b169-42b3671173fb.
  2. Siga as instruções para obter uma estatística de políticas através do ID da estatística que copiou.

O que se segue?