Ao criar um cluster do Dataproc, você pode ativar a autenticação de cluster pessoal do Dataproc para permitir que as cargas de trabalho interativas no cluster sejam executadas com segurança como sua identidade de usuário. Isso significa que as interações com outros recursos do Google Cloud, como o Cloud Storage, serão autenticadas como você em vez de como a conta do serviço de cluster.
Considerações
Quando você cria um cluster com a autenticação de cluster pessoal ativada, o cluster só poderá ser usado pela sua identidade. Outros usuários não poderão executar jobs no cluster nem acessar os endpoints do Gateway de componentes no cluster.
Os clusters com a autenticação de cluster pessoal ativa bloqueiam o acesso SSH e os recursos do Compute Engine, como scripts de inicialização em todas as VMs no cluster.
Os clusters com a autenticação de cluster pessoal ativada são automaticamente ativados e configuram o Kerberos no cluster para a comunicação segura entre clusters. No entanto, todas as identidades do Kerberos no cluster vão interagir com os recursos do Google Cloud como o mesmo usuário.
Atualmente, a autenticação de cluster pessoal do Dataproc não é compatível com os fluxos de trabalho do Dataproc.
A autenticação de cluster pessoal do Dataproc destina-se apenas a jobs interativos executados por um usuário individual (humano). Jobs e operações de longa duração precisam configurar e usar uma identidade de conta de serviço apropriada.
As credenciais propagadas estão no escopo com um limite de acesso a credenciais. O limite de acesso padrão é limitado à leitura e à gravação de objetos do Cloud Storage nos buckets do Cloud Storage pertencentes ao mesmo projeto que contém o cluster. É possível definir um limite de acesso não padrão ao ativar_uma_sessão_interativa.
Objetivos
Crie um cluster do Dataproc com a autenticação de cluster pessoal do Dataproc ativada.
Inicie a propagação de credencial no cluster.
Usar um notebook do Jupyter no cluster para executar jobs do Spark que autenticam com suas credenciais.
Antes de começar
Criar um projeto
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Dataproc API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Dataproc API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
Configure o ambiente
Configure o ambiente a partir do Cloud Shell ou de um terminal local:
Cloud Shell
- Inicie uma sessão do Cloud Shell.
Terminal local
- Execute
gcloud auth login
para receber credenciais de usuário válidas.
Criar um cluster e ativar uma sessão interativa
Encontre o endereço de e-mail da sua conta ativa no gcloud.
gcloud auth list --filter=status=ACTIVE --format="value(account)"
Crie um cluster.
gcloud dataproc clusters create cluster-name \ --properties=dataproc:dataproc.personal-auth.user=your-email-address \ --enable-component-gateway \ --optional-components=ZEPPELIN \ --region=region
Ative uma sessão de propagação de credenciais para o cluster começar a usar suas credenciais pessoais ao interagir com os recursos do Google Cloud.
gcloud dataproc clusters enable-personal-auth-session \ --region=region \ cluster-name
Exemplo de saída:
Injecting initial credentials into the cluster cluster-name...done. Periodically refreshing credentials for cluster cluster-name. This will continue running until the command is interrupted...
- Exemplo de limite de acesso com escopo diminuído: o exemplo a seguir ativa uma sessão de autenticação pessoal que é mais restritiva do que o limite de acesso de credencial com escopo diminuído padrão. Ele restringe o acesso ao bucket de preparo do cluster do Dataproc. Para mais informações, consulte Downscope com limites de acesso a credenciais .
gcloud dataproc clusters enable-personal-auth-session \
--project=PROJECT_ID \
--region=REGION \
--access-boundary=<(echo -n "{ \
\"access_boundary\": { \
\"accessBoundaryRules\": [{ \
\"availableResource\": \"//storage.googleapis.com/projects/_/buckets/$(gcloud dataproc clusters describe --project=PROJECT_ID --region=REGION CLUSTER_NAME --format="value(config.configBucket)")\", \
\"availablePermissions\": [ \
\"inRole:roles/storage.objectViewer\", \
\"inRole:roles/storage.objectCreator\", \
\"inRole:roles/storage.objectAdmin\", \
\"inRole:roles/storage.legacyBucketReader\" \
] \
}] \
} \
}") \
CLUSTER_NAME
Mantenha o comando em execução e alterne para uma nova guia ou sessão de terminal do Cloud Shell. O cliente atualizará as credenciais enquanto o comando estiver em execução.
Digite
Ctrl-C
para encerrar a sessão.
Acessar o Jupyter no cluster
gcloud
- Receber detalhes do cluster.
gcloud dataproc clusters describe cluster-name --region=region
O URL da interface da Web do Jupyter está listado nos detalhes do cluster.
... JupyterLab: https://UUID-dot-us-central1.dataproc.googleusercontent.com/jupyter/lab/ ...
- Copie o URL no navegador local para iniciar a IU do Jupyter.
- Verifique se a autenticação do cluster pessoal foi bem-sucedida.
- Inicie um terminal do Jupyter.
- Executar
gcloud auth list
- Verifique se seu nome de usuário é a única conta ativa.
- Em um terminal Jupyter, ative o Jupyter para autenticar com o Kerberos e enviar jobs do Spark.
kinit -kt /etc/security/keytab/dataproc.service.keytab dataproc/$(hostname -f)
- Execute
klist
para verificar se o Jupyter teve um TGT válido.
- Execute
- Em um terminal Juypter, use a CLI gcloud para criar um
rose.txt
em um bucket do Cloud Storage no projeto.echo "A rose by any other name would smell as sweet" > /tmp/rose.txt
gcloud storage cp /tmp/rose.txt gs://bucket-name/rose.txt
- Marque o arquivo como privado para que apenas a sua conta de usuário possa ler ou
gravar nele. O Jupyter usará suas credenciais pessoais ao interagir
com o Cloud Storage.
gcloud storage objects update gs://bucket-name/rose.txt --predefined-acl=private
- Verifique o acesso privado.
gcloud storage objects describe gs://$BUCKET/rose.txt
acl:
- Marque o arquivo como privado para que apenas a sua conta de usuário possa ler ou
gravar nele. O Jupyter usará suas credenciais pessoais ao interagir
com o Cloud Storage.
- email: $USER entity: user-$USER role: OWNER
Console
- Clique no link Jupyter Gateway de Componentes para iniciar a IU do Jupyter.
- Verifique se a autenticação do cluster pessoal foi bem-sucedida.
- Iniciar um terminal do Jupyter
- Executar
gcloud auth list
- Verifique se seu nome de usuário é a única conta ativa.
- Em um terminal Jupyter, ative o Jupyter para autenticar com o Kerberos e enviar jobs do Spark.
kinit -kt /etc/security/keytab/dataproc.service.keytab dataproc/$(hostname -f)
- Execute
klist
para verificar se o Jupyter teve um TGT válido.
- Execute
- Em um terminal do Jupyter, use a CLI gcloud para criar um
rose.txt
em um bucket do Cloud Storage no projeto.echo "A rose by any other name would smell as sweet" > /tmp/rose.txt
gcloud storage cp /tmp/rose.txt gs://bucket-name/rose.txt
- Marque o arquivo como privado para que apenas a sua conta de usuário possa ler ou
gravar nele. O Jupyter usará suas credenciais pessoais ao interagir
com o Cloud Storage.
gcloud storage objects update gs://bucket-name/rose.txt --predefined-acl=private
- Verifique o acesso privado.
gcloud storage objects describe gs://bucket-name/rose.txt
acl:
- Marque o arquivo como privado para que apenas a sua conta de usuário possa ler ou
gravar nele. O Jupyter usará suas credenciais pessoais ao interagir
com o Cloud Storage.
- email: $USER entity: user-$USER role: OWNER
Executar um job do PySpark no Jupyter
- Navegue até uma pasta e crie um notebook do PySpark.
Execute um job básico de contagem de palavras no arquivo
rose.txt
criado acima. O Spark é capaz de ler o arquivotext_file = sc.textFile("gs://bucket-name/rose.txt") counts = text_file.flatMap(lambda line: line.split(" ")) \ .map(lambda word: (word, 1)) \ .reduceByKey(lambda a, b: a + b) print(counts.collect())
rose.txt
no Cloud Storage porque ele é executado com suas credenciais de usuário.Também é possível verificar os Registros de auditoria do bucket do Cloud Storage para confirmar se o job está acessando o Cloud Storage com sua identidade. Para mais informações, consulte Registros de auditoria do Cloud com o Cloud Storage.
Limpeza
- Exclua o cluster do Dataproc.
gcloud dataproc clusters delete cluster-name --region=region