Como usar o controle de acesso baseado em papéis

Nesta página, descrevemos como dar os primeiros passos no controle de acesso baseado em papéis (RBAC, na sigla em inglês) em instâncias do Cloud Data Fusion. O RBAC está disponível nas instâncias do Cloud Data Fusion em execução nas versões 6.5 e posteriores.

Para mais informações, consulte a visão geral do controle de acesso baseado em papéis (RBAC).

Recomendado: a menos que seja necessário para fins de automação, é recomendável usar o Console do Google Cloud para realizar as tarefas do RBAC.

Ativar o RBAC para uma instância existente

É possível ativar o RBAC de uma instância atual do Cloud Data Fusion, desde que a instância esteja em execução na versão 6.5 ou posterior.

Console

Para ativar o RBAC em uma instância atual do Cloud Data Fusion:

  1. No Console do Google Cloud, acesse a página Instâncias do Cloud Data Fusion.

    Acesse "Instâncias"

  2. Selecione a instância desejada.

    A página Detalhes da instância é aberta.

  3. Verifique se a instância fez upgrade para a versão 6.5 ou posterior. Se a instância for anterior à 6.5, faça upgrade dela para a versão 6.5 ou mais recente.

  4. Clique em Ativar RBAC.

  5. Clique em Save.

  6. Aguarde a conclusão da operação de atualização de instância.

API REST

É possível ativar o RBAC de uma instância atual com a API patch do Cloud Data Fusion. Defina a sinalização enableRbac como true e use o parâmetro de consulta updateMask usando o seguinte comando de exemplo:

export PROJECT=PROJECT_ID
export LOCATION=REGION
export INSTANCE=INSTANCE
export DATA_FUSION_API_NAME=datafusion.googleapis.com
alias gcurl='curl --header "Authorization: Bearer $(gcloud auth print-access-token)"'
gcurl https://$DATA_FUSION_API_NAME/v1beta1/projects/$PROJECT/locations/$LOCATION/instances/$INSTANCE_ID?updateMask=enable_rbac -X PATCH -d '{"enable_rbac": "true"}'

Desativar o RBAC de uma instância existente

Se você tiver uma instância com o RBAC ativado, poderá desativar o RBAC, se necessário. Desativar o RBAC não afeta nenhum pipeline ou configuração atual na instância. Ele apenas desativa o isolamento de segurança nos namespaces.

Console

Para desativar o RBAC em uma instância existente do Cloud Data Fusion:

  1. Acesse a página Instâncias do Cloud Data Fusion.

    Acesse "Instâncias"

  2. Selecione a instância desejada.

    A página Detalhes da instância é aberta.

  3. Clique em Desativar RBAC.

  4. Clique em Save.

  5. Aguarde a conclusão da operação de atualização de instância.

API REST

É possível desativar o RBAC de uma instância atual com a API patch do Cloud Data Fusion. Defina a sinalização enableRbac como false e use o parâmetro de consulta updateMask usando o seguinte comando de exemplo:

export PROJECT=PROJECT_ID
export LOCATION=REGION
export INSTANCE=INSTANCE
export DATA_FUSION_API_NAME=datafusion.googleapis.com
alias gcurl='curl --header "Authorization: Bearer $(gcloud auth print-access-token)"'
gcurl https://$DATA_FUSION_API_NAME/v1beta1/projects/$PROJECT/locations/$LOCATION/instances/$INSTANCE_ID?updateMask=enable_rbac -X PATCH -d '{"enable_rbac": "false"}'

Criar uma nova instância ativada para RBAC

É possível adicionar o RBAC a novas instâncias do Cloud Data Fusion.

Console

Para criar uma nova instância do Cloud Data Fusion com o RBAC ativado:

  1. Acesse a página Instâncias do Cloud Data Fusion.

    Acesse "Instâncias"

  2. Clique em Criar uma instância e insira os detalhes dela.

  3. Selecione a edição Enterprise. O RBAC só é compatível com a edição Enterprise.

  4. Em Opções avançadas, selecione Ativar controle de acesso baseado em papéis granular.

    Esse recurso está disponível apenas em instâncias que usam a versão 6.5 e posterior do Cloud Data Fusion.

  5. Clique em Criar.

API REST

Para criar uma instância ativada para RBAC usando a API REST, transmita a sinalização enableRbac definida como true nas opções da instância, conforme mostrado nos seguintes comandos:

export PROJECT=PROJECT_ID
export LOCATION=REGION
export INSTANCE=INSTANCE
export DATA_FUSION_API_NAME=datafusion.googleapis.com
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://$DATA_FUSION_API_NAME/v1beta1/projects/$PROJECT/locations/$LOCATION/instances?instanceId=$INSTANCE -X POST -d '{"description": "RBAC CDF instance created through REST", "type": "ENTERPRISE", "enableRbac": "true"}'

Conceder papéis predefinidos do Cloud Data Fusion aos usuários (obrigatório)

Depois que o RBAC é ativado, você concede papéis aos principais para permitir que eles executem ações específicas em uma instância ou um namespace. Para decidir quais papéis melhor atendem aos seus requisitos, consulte os papéis predefinidos do Cloud Data Fusion e as recomendações de segurança.

Console

Para conceder papéis predefinidos do Cloud Data Fusion aos principais:

  1. Acesse a página Permissões do Cloud Data Fusion.

    Acessar "Permissões"

  2. Clique em Add .

    A janela Adicionar acesso dos usuários será aberta.

  3. No campo Novos membros, insira uma lista de principais (usuários, grupos ou e-mails da conta de serviço) para os quais você quer conceder papéis.

  4. Marque a caixa ao lado de cada instância para a qual você quer conceder essas permissões.

    Selecionar instâncias

  5. Vá para a coluna Papel e selecione a caixa suspensa ao lado das instâncias desejadas.

    1. Para conceder permissões de administrador de instância, selecione Administrador de instâncias.

    2. Para conceder permissões no nível do namespace, selecione Usuário de namespace.

      Selecionar funções do usuário de namespace

      1. Se você estiver concedendo permissões no nível do namespace, clique em SELECIONAR.

        A janela Adicionar direitos de acesso é aberta.

      2. Selecione um namespace e selecione o papel predefinido do Cloud Data Fusion que você quer conceder ao namespace.

      3. Clique em SELECIONAR para salvar suas novas configurações.

      4. (Opcional) Para conceder permissões de namespace a outras instâncias, repita a etapa 5.

  6. Clique em Save.

    Para verificar os papéis que foram concedidos, consulte Verificar papéis no Console do Google Cloud.

gcloud

Use a ferramenta de linha de comando gcloud para controlar o acesso de maneira programática.

Para conceder um papel usando a ferramenta gcloud, use uma lista delimitada por vírgulas de identificadores de usuários no seguinte formato:

[user|group|serviceAccount][email_address]

Forneça os valores a seguir:

  • user:useremail@example.com
  • group:groupemail@example.com
  • serviceAccount:serviceaccount@project.iam.gserviceaccount.com

Para mais exemplos, consulte Conceder um papel.

Conceder o papel de acessador da instância (obrigatório)

Conceda a um usuário acesso à instância, concedendo a ele o papel de acessador em uma instância:

  1. Exporte as variáveis a seguir com o comando a seguir, substituindo as variáveis pelos valores próprios:

    export PROJECT=PROJECT_ID
    export INSTANCE=INSTANCE_ID
    export REGION=REGION
    export USER_ID=EMAIL
    export USER_TYPE=USER_TYPE
    

    Substitua as variáveis a seguir pelos seus valores:

    • PROJECT_ID: o nome do projeto.
    • INSTANCE_ID: o nome da instância.
    • REGION: a região à qual o projeto pertence.
    • EMAIL: o endereço de e-mail do principal.
    • USER_TYPE: o tipo de usuário pode ser: user, group ou serviceAccount.
  2. Execute o seguinte comando para atribuir o papel:

    gcloud beta data-fusion add-iam-policy-binding ${INSTANCE} --project ${PROJECT} --location=${REGION} --member="${USER_TYPE}:${USER_ID}" --role="roles/datafusion.accessor"
    

Concede papéis a um namespace (dependendo do caso de uso)

Dependendo do seu caso de uso, conceda papéis com os seguintes comandos:

  1. Exporte as variáveis a seguir com o comando a seguir, substituindo as variáveis pelos valores próprios:

    export PROJECT=PROJECT_ID
    export INSTANCE=INSTANCE_ID
    export REGION=REGION
    export NAMESPACE=NAMESPACE
    export USER_ID=EMAIL
    export USER_TYPE=USER_TYPE
    

    Substitua as variáveis a seguir pelos seus valores:

    • PROJECT_ID: o nome do projeto.
    • INSTANCE_ID: o nome da instância.
    • REGION: a região à qual o projeto pertence.
    • NAMESPACE: o nome do namespace.
    • EMAIL: o endereço de e-mail do principal.
    • USER_TYPE: o tipo de usuário pode ser: user, group ou serviceAccount.
  2. Execute o seguinte comando para atribuir um papel a um principal em um determinado namespace:

    gcloud beta data-fusion add-iam-policy-binding ${INSTANCE} --project ${PROJECT} --location=${REGION} --namespace=${NAMESPACE} --member="${USER_TYPE}:${USER_ID}" --role="roles/ROLE_NAME"
    

    Substitua ROLE_NAME por um dos seguintes valores:

    • Para o papel Editor em um namespace, use datafusion.editor.
    • Para o papel de operador para um namespace, use datafusion.operator.
    • Para o papel de desenvolvedor em um namespace, use datafusion.developer.
    • Para o papel de leitor de um namespace, use datafusion.viewer.

Revogar papéis de namespace (opcional)

Para revogar o papel concedido a um usuário para um determinado namespace, use o seguinte comando:

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export REGION=REGION
export NAMESPACE=NAMESPACE
export USER_ID=EMAIL
# User type can be one of: user, group, or serviceAccount.
export USER_TYPE=USER_TYPE
export ROLE=ROLE_NAME
gcloud beta data-fusion remove-iam-policy-binding ${INSTANCE} --project ${PROJECT} --location=${REGION} --namespace=${NAMESPACE} --member="${USER_TYPE}:${USER_ID}" --role="${ROLE}"

Listar papéis concedidos em um determinado namespace (opcional)

É possível listar todos os papéis concedidos em um namespace específico usando o comando a seguir para buscar a política do IAM:

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export REGION=REGION
export NAMESPACE=NAMESPACE
gcloud beta data-fusion get-iam-policy ${INSTANCE} --project ${PROJECT} --location=${REGION} --namespace=${NAMESPACE}

API REST

Conceder o papel de acessador da instância (obrigatório)

Conceda a um usuário acesso à instância, concedendo a ele o papel de acessador em uma instância.

Altamente recomendável: em vez disso, use a ferramenta gcloud para conceder o papel de acessador.

  1. Conceda o papel de acessador em uma instância:

    export PROJECT=PROJECT_ID
    export INSTANCE=INSTANCE_ID
    export REGION=REGION
    export USER_ID=EMAIL
    # User type can be one of: user, group, or serviceAccount.
    export USER_TYPE=USER_TYPE
    alias gcurl='curl --header "Authorization: Bearer $(gcloud auth print-access-token)"'
    
  2. Busque a política atual do IAM e salve-a em um arquivo:

    gcurl https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE_ID}:getIamPolicy > iam_policy.json
    
  3. Adicione uma vinculação para o papel e o usuário na política. Exemplo:

    {
      "policy": {
        "bindings": [
          {
            "role": "roles/datafusion.accessor",
            "members": [
              "${USER_TYPE}:${USER_ID}"
            ]
          }
        ]
      }
    }
    gcurl
      -d @iam_policy.json \
      https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE_ID}:setIamPolicy
    

Concede papéis a um namespace (dependendo do caso de uso)

Dependendo do seu caso de uso, conceda papéis com os seguintes comandos:

  1. Exporte as variáveis a seguir com o comando a seguir, substituindo as variáveis pelos valores próprios:

    export PROJECT=PROJECT_ID
    export INSTANCE=INSTANCE_ID
    export REGION=REGION
    export NAMESPACE=NAMESPACE
    export USER_ID=EMAIL
    export USER_TYPE=USER_TYPE
    alias gcurl='curl --header "Authorization: Bearer $(gcloud auth print-access-token)"'
    

    Substitua as variáveis a seguir pelos seus valores:

    • PROJECT_ID: o nome do projeto.
    • INSTANCE_ID: o nome da instância.
    • REGION: a região à qual o projeto pertence.
    • NAMESPACE: o nome do namespace.
    • EMAIL: o endereço de e-mail do principal.
    • USER_TYPE: o tipo de usuário pode ser: user, group ou serviceAccount.
  2. Busque a política atual do IAM e salve-a em um arquivo:

      gcurl https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}:getIamPolicy > iam_policy.json
      ```
    
    Replace iam_policy.json with your own file name.
    
  3. Adicione uma vinculação para o papel e o usuário no arquivo de política. Por exemplo, o arquivo de política pode ter a seguinte aparência:

    {
      "policy": {
        "bindings": [
          {
            "role": "roles/ROLE_NAME",
              "members": [
              "${USER_TYPE}:${USER_ID}"
            ]
          }
        ]
      }
    }
    

Várias vinculações de papéis podem ser especificadas para uma determinada política, e vários principals podem ser especificados na lista de membros para uma determinada vinculação de papel. Para um determinado principal, substitua ROLE_NAME por um dos seguintes valores:

  • Para o papel Editor em um namespace, use datafusion.editor.
  • Para o papel de operador para um namespace, use datafusion.operator.
  • Para o papel de desenvolvedor em um namespace, use datafusion.developer.
  • Para o papel de leitor de um namespace, use datafusion.viewer.
  1. Execute o seguinte comando para atualizar o arquivo de política:

    gcurl -d @iam_policy.json \
    https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE_ID}:setIamPolicy
    

    Substitua iam_policy.json pelo nome do seu arquivo.

Verifique os papéis no Console do Google Cloud

Revise e edite os papéis atuais na página Permissões do Cloud Data Fusion.

Acessar "Permissões"

Verificar papéis com o arquivo de política

É possível verificar se os papéis foram concedidos aos usuários corretos no arquivo Política do IAM usando a ferramenta gcloud ou a API REST.

No exemplo de arquivo de política do IAM a seguir, o usuário alice@example.com tem o papel de desenvolvedor do Data Fusion:

bindings:
- members:
  - user:alice@example.com
  role: roles/datafusion.developer
- members:
  - user:bob@example.com
  - serviceAccount:myserviceaccount@myproject.iam.gserviceaccount.com
  role: roles/datafusion.operator
- members:
  - user:james@example.com
  - user:mike@example.com
  - group:mygroup@googlegroups.com
  role: roles/datafusion.editor
etag: BwXA8BAHYmw=

Acessar a política de IAM de uma instância

gcloud

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export REGION=REGION
gcloud beta data-fusion get-iam-policy ${INSTANCE} --project ${PROJECT} --location=${REGION}

cURL

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export REGION=REGION
curl -H "Authorization: Bearer "$(gcloud auth print-access-token) \
https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}:getIamPolicy

Acessar a política de IAM de um namespace

gcloud

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export REGION=REGION
export NAMESPACE=NAMESPACE
gcloud beta data-fusion get-iam-policy ${INSTANCE} --project ${PROJECT} --location=${REGION} --namespace=${NAMESPACE}

cURL

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export NAMESPACE=NAMESPACE
export REGION=REGION
curl -H "Authorization: Bearer "$(gcloud auth print-access-token) \
https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}/namespaces/${NAMESPACE}:getIamPolicy

A seguir