Usar o controle de acesso baseado em papéis

Nesta página, descrevemos como dar os primeiros passos com o 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, usar o console do Google Cloud para realizar tarefas de RBAC.

Ativar o RBAC para uma instância existente

É possível ativar o Cloud Data Fusion de acesso baseado em função (RBAC) em uma instância em execução na versão 6.5 ou mais recente.

Console

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

  1. Acesse os detalhes da instância:
    1. No console do Google Cloud, acesse a página do Cloud Data Fusion.

    2. Clique em Instâncias e no nome da instância para acessar a página Detalhes da instância.

      Acesse "Instâncias"

  2. 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.
  3. Clique em Ativar RBAC.
  4. Clique em Save.
  5. Aguarde a conclusão da operação de atualização de instância.

gcloud

Para ativar o RBAC em uma instância atual do Cloud Data Fusion, execute o seguinte comando:

gcloud beta data-fusion instances update --enable_rbac --location=REGION INSTANCE_ID

API REST

Ative o controle de acesso baseado em função (RBAC) para uma instância atual com o Patch do Cloud Data Fusion API. 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_ID
export DATA_FUSION_API_NAME=datafusion.googleapis.com
alias gcurl='curl --header "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'
gcurl https://$DATA_FUSION_API_NAME/v1beta1/projects/$PROJECT/locations/$LOCATION/instances/$INSTANCE?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 os detalhes da instância:

    1. No console do Google Cloud, acesse a página do Cloud Data Fusion.

    2. Clique em Instâncias e no nome da instância para acessar a página Detalhes da instância.

      Acesse "Instâncias"

  2. Clique em Desativar RBAC.

  3. Clique em Save.

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

gcloud

Para desativar o RBAC de uma instância existente, use o argumento --no-enable_rbac em vez de --enable-rbac.

gcloud beta data-fusion instances update --no-enable_rbac --location=REGION INSTANCE_ID

Exemplo de uso:

gcloud beta data-fusion instances update --no-enable_rbac --location=us-east1 cdf-test-instance

API REST

Desative o controle de acesso baseado em função (RBAC) para uma instância atual com o Patch do Cloud Data Fusion API. 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_ID
export DATA_FUSION_API_NAME=datafusion.googleapis.com
alias gcurl='curl --header "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'
gcurl https://$DATA_FUSION_API_NAME/v1beta1/projects/$PROJECT/locations/$LOCATION/instances/$INSTANCE?updateMask=enable_rbac -X PATCH -d '{"enable_rbac": "false"}'

Criar uma nova instância ativada para RBAC

Console

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

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

  2. Clique em Instâncias.

    Acesse "Instâncias"

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

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

  5. 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.

  6. Clique em Criar.

gcloud

Para criar uma nova instância ativada para RBAC, execute o seguinte comando:

gcloud beta data-fusion instances create --edition=enterprise \
--enable_rbac \
--location=REGION INSTANCE_ID \
--version=6.5.0

Exemplo de uso:

gcloud beta data-fusion instances create --edition=enterprise \
--enable_rbac \
--location=us-east1 \
--version=6.5.0

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_ID
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 a usuários (obrigatório)

Depois que o RBAC é ativado, conceda os 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.

    Ir para permissões

  2. Clique em Add .

    Uma opção Adicionar de acesso 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 acesso permissões.

    Selecionar instâncias

  5. Vá para a coluna Papel e selecione o menu suspenso ao lado do instâncias escolhidas.

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

    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 caixa de diálogo Adicionar direitos de acesso é aberta.

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

      3. Clique em Selecionar para salvar as novas configurações.

      4. Opcional: para conceder permissões de namespace a outras instâncias, repita a etapa 5.

  6. Clique em Salvar.

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

gcloud

Use a Google Cloud CLI. controlar o acesso de maneira programática.

Para conceder um papel usando a CLI 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 seguintes variáveis pelos seus próprios valores:

    • PROJECT_ID: o nome do seu 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"
    

Conceder 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 seguintes variáveis pelos seus próprios valores:

    • PROJECT_ID: o nome do seu 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 de 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.

Opcional: revogar papéis de namespace

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

Opcional: listar os papéis concedidos em um determinado namespace

Para listar todos os papéis concedidos em um namespace específico, use o seguinte comando 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: use a CLI 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)" -H "Content-Type: application/json"'
    
  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
    
  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}"
            ]
          }
        ]
      }
    }
    
  4. Atualize a política do IAM da instância:

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

Conceder 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)" -H "Content-Type: application/json"'
    

    Substitua as seguintes variáveis pelos seus próprios valores:

    • PROJECT_ID: o nome do seu 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}/namespaces/{NAMESPACE}:getIamPolicy > iam_policy.json
    

    Substitua iam_policy.json pelo nome do seu arquivo.

  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 ser assim:

    {
      "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 diversos principais podem ser especificados na lista members para um determinado papel vinculação. Para um determinado principal, substitua ROLE_NAME por um dos seguintes valores:

    • Para o papel de 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.
  4. 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}/namespaces/{NAMESPACE}:setIamPolicy
    

    Substitua iam_policy.json pelo seu próprio nome de arquivo.

Verificar os papéis no console do Google Cloud

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

Ir para permissões

Verificar papéis com o arquivo de política

Verifique se os papéis foram concedidos aos usuários corretos na O arquivo de política do IAM usando a CLI 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