Use o controlo de acesso baseado em funções

Esta página descreve como começar a usar o controlo de acesso baseado em funções (RBAC) em instâncias do Cloud Data Fusion. O RBAC está disponível em instâncias do Cloud Data Fusion executadas nas versões 6.5 e posteriores.

Para mais informações, consulte a vista geral do controlo de acesso baseado em funções (CABF).

Recomendado: a menos que seja necessário para fins de automatização, use a Google Cloud consola para realizar as suas tarefas de RBAC.

Ative o RBAC para uma instância existente

Pode ativar o RBAC para uma instância do Cloud Data Fusion existente com a versão 6.5 ou posterior.

Consola

Para ativar o RBAC numa instância do Cloud Data Fusion existente:

  1. Aceda aos detalhes da instância:
    1. Na Google Cloud consola, aceda à página do Cloud Data Fusion.

    2. Clique em Instâncias e, de seguida, clique no nome da instância para aceder à página Detalhes da instância.

      Aceda a Instâncias

  2. Certifique-se de que a instância foi atualizada para a versão 6.5 ou posterior. Se a instância for anterior à versão 6.5, atualize-a para a versão 6.5 ou posterior.
  3. Clique em Ativar CABF.
  4. Clique em Guardar.
  5. Aguarde pela conclusão da operação de atualização da instância.

gcloud

Para ativar o RBAC numa instância existente do Cloud Data Fusion, execute o seguinte comando:

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

API REST

Ative o RBAC para uma instância existente com a API patch do Cloud Data Fusion. Defina a flag enableRbac como true e use o parâmetro de consulta updateMask com 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"}'

Desative o RBAC para uma instância existente

Se tiver uma instância existente com o RBAC ativado, pode desativá-lo, se necessário. A desativação do RBAC não afeta nenhum pipeline nem configuração existentes na instância. Desativa apenas o isolamento de segurança entre espaços de nomes.

Consola

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

  1. Aceda aos detalhes da instância:

    1. Na Google Cloud consola, aceda à página do Cloud Data Fusion.

    2. Clique em Instâncias e, de seguida, clique no nome da instância para aceder à página Detalhes da instância.

      Aceda a Instâncias

  2. Clique em Desativar CABF.

  3. Clique em Guardar.

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

gcloud

Para desativar o RBAC para 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 utilização:

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

API REST

Desative o RBAC para uma instância existente com a API patch do Cloud Data Fusion. Defina a flag enableRbac como false e use o parâmetro de consulta updateMask com 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"}'

Crie uma nova instância com RBAC

Consola

Para criar uma nova instância do Cloud Data Fusion com a RBAC ativada:

  1. Aceda à página Instâncias do Cloud Data Fusion.

  2. Clique em Instâncias.

    Aceda a Instâncias

  3. Clique em Criar uma instância e introduza os detalhes da instância.

  4. Selecione a edição Enterprise. O RBAC só é suportado na edição Enterprise.

  5. Em Opções avançadas, selecione Ativar controlo de acesso detalhado baseado em funções.

    Esta funcionalidade só está disponível 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 com 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 utilização:

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

API REST

Para criar uma instância com RBAC através da API REST, transmita a flag 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"}'

Conceda funções predefinidas do Cloud Data Fusion aos utilizadores (obrigatório)

Depois de a RBAC estar ativada, atribui funções a principais para lhes permitir realizar ações específicas numa instância ou num espaço de nomes. Para decidir que funções cumprem melhor os seus requisitos, consulte as funções predefinidas do Cloud Data Fusion e as recomendações de segurança.

Consola

Para conceder funções predefinidas do Cloud Data Fusion a principais:

  1. Aceda à página Autorizações do Cloud Data Fusion.

    Aceda a Autorizações

  2. Clique em Adicionar .

    É aberta uma caixa de diálogo Adicionar acesso de utilizadores.

  3. No campo Novos membros, introduza uma lista de membros (utilizadores, grupos ou emails de contas de serviço) aos quais conceder funções.

  4. Selecione a caixa junto a cada instância para a qual quer conceder estas autorizações.

    Selecionar instâncias

  5. Aceda à coluna Função e selecione o menu pendente junto às instâncias escolhidas.

    1. Para conceder autorizações de administrador da instância, selecione Administrador da instância.

    2. Para conceder autorizações ao nível do espaço de nomes, selecione Utilizador do espaço de nomes.

      Selecione funções de utilizador do espaço de nomes

      1. Se estiver a conceder autorizações ao nível do espaço de nomes, clique em Selecionar.

        É apresentada uma caixa de diálogo Adicionar direitos de acesso.

      2. Selecione um espaço de nomes e selecione a função do Cloud Data Fusion predefinida que quer conceder para o espaço de nomes.

      3. Clique em Selecionar para guardar as novas definições.

      4. Opcional: para conceder autorizações de espaço de nomes a outras instâncias, repita o passo 5.

  6. Clique em Guardar.

    Para verificar as funções que foram concedidas, consulte o artigo Verifique as funções na Google Cloud consola.

gcloud

Pode usar a CLI Google Cloud para controlar o acesso programaticamente.

Para conceder uma função através da CLI gcloud, use uma lista de identificadores de utilizadores separados por vírgulas no seguinte formato:

[user|group|serviceAccount][email_address]

Indique os seguintes valores:

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

Para mais exemplos, consulte o artigo Conceda uma função.

Conceda a função Instance Accessor (obrigatória)

Primeiro, tem de conceder a um utilizador acesso à instância atribuindo-lhe a função de acesso numa instância:

  1. Exporte as seguintes variáveis com o seguinte comando, substituindo as variáveis pelos seus próprios valores:

    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 sua instância.
    • REGION: a região à qual o projeto pertence.
    • EMAIL: o endereço de email do principal.
    • USER_TYPE: O tipo de utilizador pode ser um dos seguintes: user, group ou serviceAccount.
  2. Execute o seguinte comando para atribuir a função:

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

Conceder funções a um espaço de nomes (dependente do exemplo de utilização)

Consoante o seu exemplo de utilização, atribua funções com os seguintes comandos:

  1. Exporte as seguintes variáveis com o seguinte comando, substituindo as variáveis pelos seus próprios valores:

    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 sua instância.
    • REGION: a região à qual o projeto pertence.
    • NAMESPACE: o nome do espaço de nomes.
    • EMAIL: o endereço de email do principal.
    • USER_TYPE: O tipo de utilizador pode ser um dos seguintes: user, group ou serviceAccount.
  2. Execute o seguinte comando para atribuir uma função a um principal num determinado espaço de nomes:

    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 a função de editor de um espaço de nomes, use datafusion.editor
    • Para a função de operador de um espaço de nomes, use datafusion.operator
    • Para a função de programador de um espaço de nomes, use datafusion.developer
    • Para a função de leitor de um espaço de nomes, use datafusion.viewer

Opcional: revogue funções do espaço de nomes

Para revogar a função concedida a um utilizador para um determinado espaço de nomes, 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: liste as funções concedidas num determinado espaço de nomes

Para apresentar uma lista de todas as funções concedidas num determinado espaço de nomes, use o comando seguinte para obter a política de 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

Conceda a função Instance Accessor (obrigatória)

Primeiro, tem de conceder a um utilizador acesso à instância atribuindo-lhe a função de acesso numa instância.

Recomendado vivamente: use a CLI gcloud para conceder a função de acesso.

  1. Conceda a função de acessor numa 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. Obtenha a Política IAM atual e guarde-a num ficheiro:

    gcurl https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}:getIamPolicy > iam_policy.json
    
  3. Adicione uma associação para a função e o utilizador na política. Por exemplo:

    {
      "policy": {
        "bindings": [
          {
            "role": "roles/datafusion.accessor",
            "members": [
              "${USER_TYPE}:${USER_ID}"
            ]
          }
        ]
      }
    }
    
  4. Atualize a política de IAM da instância:

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

Conceder funções a um espaço de nomes (dependente do exemplo de utilização)

Consoante o seu exemplo de utilização, atribua funções com os seguintes comandos:

  1. Exporte as seguintes variáveis com o seguinte comando, substituindo as variáveis pelos seus próprios valores:

    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 sua instância.
    • REGION: a região à qual o projeto pertence.
    • NAMESPACE: o nome do espaço de nomes.
    • EMAIL: o endereço de email do principal.
    • USER_TYPE: O tipo de utilizador pode ser um dos seguintes: user, group ou serviceAccount.
  2. Obtenha a Política IAM atual e guarde-a num ficheiro:

      gcurl https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}/namespaces/{NAMESPACE}:getIamPolicy > iam_policy.json
    

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

  3. Adicione uma associação para a função e o utilizador no ficheiro de política. Por exemplo, o ficheiro de política pode ter o seguinte aspeto:

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

    Podem ser especificadas várias associações de funções para uma determinada política, e podem ser especificados vários diretores na lista members para uma determinada associação de funções. Para um determinado principal, substitua ROLE_NAME por um dos seguintes valores:

    • Para a função de editor de um espaço de nomes, use datafusion.editor
    • Para a função de operador de um espaço de nomes, use datafusion.operator
    • Para a função de programador de um espaço de nomes, use datafusion.developer
    • Para a função de leitor de um espaço de nomes, use datafusion.viewer
  4. Execute o seguinte comando para atualizar o ficheiro de políticas:

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

Valide as funções na Google Cloud consola

Reveja e edite as funções existentes na página Autorizações do Cloud Data Fusion.

Aceda a Autorizações

Valide as funções com o ficheiro de políticas

Verifique se as funções são concedidas aos utilizadores corretos no ficheiro da política do IAM através da CLI gcloud ou da API REST.

No exemplo de ficheiro de política de IAM seguinte, o utilizador alice@example.com tem a função de programador 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=

Obtenha a Política IAM para 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

Obtenha a Política IAM para um espaço de nomes

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

O que se segue?