Como 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 a automação, use 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.

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

É possível ativar o RBAC de uma instância atual com a API de 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_ID
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.

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

É possível desativar o RBAC de uma instância atual com a API de 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_ID
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, siga estas etapas:

  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.

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

    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 em 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 CLI do Google Cloud para 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 variáveis a seguir 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 variáveis a seguir 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.

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

Liste os papéis concedidos em um determinado namespace (opcional):

É possível listar todos os papéis concedidos em um namespace específico usando 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 recomendado: use a CLI do 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
    

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)"'
    

    Substitua as variáveis a seguir 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}: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 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 vários principais 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 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.
  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.

Verificar 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

É possível verificar se os papéis foram concedidos aos usuários corretos no arquivo Policy do IAM usando a CLI do 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