As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Usando a propagação de identidade confiável com o Amazon SageMaker Unified Studio
Este tutorial mostra como configurar um aplicativo EMR Serverless com Trusted Identity Propagation (TIP). Em seguida, você consulta uma tabela de amostra usando controles de acesso baseados em identidade por meio do Amazon SageMaker Unified Studio. Com essa configuração, o EMR Serverless executa as consultas Spark de cada usuário com sua própria identidade IAM Identity Center, e o Lake Formation impõe permissões por usuário nas tabelas do Glue Data Catalog. AWS
DICA: não há suporte nas cargas de trabalho interativas do EMR Studio
As cargas de trabalho interativas por meio do EMR Studio não oferecem suporte à propagação confiável de identidade com o EMR Serverless. Use o Amazon SageMaker Unified Studio como o aplicativo voltado para o cliente para cargas de trabalho TIP-enabled interativas.
Custos
Este tutorial usa AWS serviços que podem gerar cobranças, incluindo EMR Serverless,, AWS Lake Formation Centro de Identidade do AWS IAM, Amazon Simple Storage Service e Amazon Unified Studio. SageMaker Para evitar cobranças contínuas, siga as etapas de limpeza no final deste tutorial. Para obter informações sobre preços, consulte a página de preços de cada serviço.
Pré-requisitos e configuração
Conclua as etapas a seguir para configurar todos os recursos necessários antes de consultar dados com propagação de identidade confiável.
Etapa 1: configurar o IAM Identity Center
-
Ative o IAM Identity Center em sua AWS conta. Uma instância do IAM Identity Center só pode existir em uma única região por conta.
Importante
Observe em qual região seu IAM Identity Center está implantado. Todos os recursos subsequentes (Lake Formation, EMR Serverless, AWS Glue) devem ser criados na mesma região. Por exemplo, se seu IAM Identity Center estiver em us-west-2, todos os recursos também devem estar em us-west-2.
-
Provisione usuários e grupos no IAM Identity Center, manualmente ou sincronizando com um provedor de identidade externo (como Okta ou Microsoft Entra ID).
-
Anote o ARN da sua instância do IAM Identity Center. Você precisará dele nas etapas subsequentes. Encontre-o no console do IAM Identity Center em Configurações.
Para encontrar sua instância programaticamente, execute:
aws sso-admin list-instances --regionyour-regionResultado do exemplo:
{ "Instances": [ { "InstanceArn": "arn:aws:sso:::instance/ssoins-1234567890abcdef", "IdentityStoreId": "d-1234567890", "OwnerAccountId": "123456789012", "Status": "ACTIVE" } ] }
Etapa 2: configurar a formação do lago com o IAM Identity Center
-
Acesse o console do Lake Formation.
-
Configure um administrador de data lake.
Importante
Certifique-se de que a função ou usuário do IAM que você está usando para executar esses comandos seja adicionado como administrador do Data Lake em Lake Formation. Caso contrário, você receberá erros de “Permissão (s) insuficiente (s) de formação de lago” ao criar bancos de dados ou tabelas. Para adicionar sua função como administrador:
aws lakeformation put-data-lake-settings \ --data-lake-settings '{ "DataLakeAdmins": [ {"DataLakePrincipalIdentifier": "arn:aws:iam::account-id:role/your-role"} ], "CreateDatabaseDefaultPermissions": [], "CreateTableDefaultPermissions": [], "Parameters": {"CROSS_ACCOUNT_VERSION": "3", "SET_CONTEXT": "TRUE"} }' -
Crie a integração do IAM Identity Center para Lake Formation usando o ARN da instância que você anotou na Etapa 1:
aws lakeformation create-lake-formation-identity-center-configuration \ --catalog-idaccount-id\ --instance-arn "arn:aws:sso:::instance/ssoins-instance-id" -
Crie uma função do IAM para o registro de localização do Lake Formation. Não use a função vinculada ao serviço para propagação de identidade confiável. Para obter mais informações, consulte Configurando a formação de AWS lagos com o IAM Identity Center.
Política de confiança:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lakeformation.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:SetContext" ] } ] }sts: SetContext é obrigatório
A política de confiança deve incluir
sts:SetContext, o que é necessário para a propagação de identidade confiável. A função do IAM criada pelo assistente padrão é uma função vinculada ao serviço e não inclui.sts:SetContextSe você já registrou um local com a função vinculada ao serviço, deverá registrá-la novamente com uma função personalizada que inclua.sts:SetContextPolítica de permissão (concede acesso à localização de dados do Amazon S3):
{ "Version": "2012-10-17", "Statement": [ { "Sid": "LakeFormationDataAccessPermissionsForS3", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::your-data-bucket/*" ] }, { "Sid": "LakeFormationDataAccessPermissionsForS3ListBucket", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::your-data-bucket" ] } ] }Crie a função e anexe a política:
aws iam create-role \ --role-name LFLocationRegistrationRole \ --assume-role-policy-document file://lf-trust-policy.json \ --description "Lake Formation location registration role with sts:SetContext for TIP" aws iam put-role-policy \ --role-name LFLocationRegistrationRole \ --policy-name LFDataAccessPolicy \ --policy-document file://lf-permissions-policy.json -
Registre sua localização de dados do Amazon S3 com o Lake Formation usando a função que você criou:
aws lakeformation register-resource \ --resource-arn "arn:aws:s3:::your-data-bucket" \ --role-arn "arn:aws:iam::account-id:role/LFLocationRegistrationRole" -
Crie um banco de dados e uma tabela no Catálogo de Dados do AWS Glue apontando para seus dados de amostra.
-
Conceda permissões a usuários ou grupos do IAM Identity Center no banco de dados e na tabela.
Importante
Você deve conceder DESCRIBE no banco de dados, além de SELECT e DESCRIBE na tabela. Sem permissões no nível do banco de dados, o banco de dados não aparecerá nos resultados do SHOW DATABASES ao usar o acesso baseado em identidade.
Usando o console:
No console do Lake Formation, escolha Permissões do Data Lake > Conceder.
Em Diretores, escolha usuários e grupos do IAM Identity Center e selecione seu usuário ou grupo.
Em Recursos do catálogo de dados nomeado, selecione seu banco de dados.
Em Permissões do banco de dados, selecione Descrever.
Selecione Conceder.
Repita as etapas de 1 a 5, desta vez selecionando a tabela e concedendo as permissões Selecionar e Descrever em Tabela.
Usando o AWS CLI:
Importante
O formato de identificador principal para usuários do IAM Identity Center em subsídios do Lake Formation é:
arn:aws:identitystore:::user/<UserId>. Observe os dois pontos triplos (:::). Nenhuma região ou conta foi especificada. Obtenha o no UserId Identity Store:# List users to get their UserIds aws identitystore list-users --identity-store-ididentity-store-id--regionyour-region# Grant DESCRIBE on the database aws lakeformation grant-permissions \ --principal '{"DataLakePrincipalIdentifier": "arn:aws:identitystore:::user/UserId"}' \ --permissions '["DESCRIBE"]' \ --resource '{"Database": {"DatabaseName": "tip_tutorial_db", "CatalogId": "account-id"}}' # Grant SELECT and DESCRIBE on the table aws lakeformation grant-permissions \ --principal '{"DataLakePrincipalIdentifier": "arn:aws:identitystore:::user/UserId"}' \ --permissions '["SELECT","DESCRIBE"]' \ --resource '{"Table": {"DatabaseName": "tip_tutorial_db", "Name": "employees", "CatalogId": "account-id"}}'
Etapa 3: Criar o aplicativo TIP-enabled EMR Serverless
Certifique-se de que sua função do IAM tenha as permissões necessárias do IAM Identity Center para criar o aplicativo:
"sso:DescribeInstance", "sso:CreateApplication", "sso:DeleteApplication", "sso:PutApplicationAuthenticationMethod", "sso:PutApplicationAssignmentConfiguration", "sso:PutApplicationGrant", "sso:PutApplicationAccessScope"
Crie o aplicativo com propagação de identidade confiável, o endpoint Apache Livy ativado e o AWS Glue Data Catalog configurado como metastore:
aws emr-serverless create-application \ --release-label emr-7.8.0 \ --type "SPARK" \ --identity-center-configuration '{"identityCenterInstanceArn": "arn:aws:sso:::instance/ssoins-instance-id"}' \ --interactive-configuration '{"livyEndpointEnabled":true}' \ --runtime-configuration '[{"classification": "spark-defaults", "properties": {"spark.sql.catalogImplementation": "hive", "spark.hadoop.hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory"}}]'
Importante
AWS CLI requisito de versão: os --runtime-configuration sinalizadores --identity-center-configuration--interactive-configuration, e exigem AWS CLI v2.15+. Se você receber erros de “Opções desconhecidas”, atualize suas opções AWS CLI ou use o Python boto3 (v1.35+) como alternativa:
import boto3 session = boto3.Session(profile_name='your-profile', region_name='your-region') client = session.client('emr-serverless') response = client.create_application( name='tip-tutorial-app', releaseLabel='emr-7.8.0', type='SPARK', identityCenterConfiguration={ 'identityCenterInstanceArn': 'arn:aws:sso:::instance/ssoins-instance-id' }, interactiveConfiguration={ 'livyEndpointEnabled': True }, runtimeConfiguration=[ { 'classification': 'spark-defaults', 'properties': { 'spark.sql.catalogImplementation': 'hive', 'spark.hadoop.hive.metastore.client.factory.class': 'com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory' } } ] ) print(response['applicationId'])
Configuração do metastore do Glue Data Catalog
A runtimeConfiguration configuração spark.sql.catalogImplementation e a classe de fábrica do AWS Glue metastore garantem que as sessões do Spark possam acessar todos os tipos de mesa (CSV, Parquet, ORC, Iceberg) no Catálogo de dados do Glue. AWS Sem essa configuração, somente as tabelas Iceberg podem estar visíveis.
O endpoint Apache Livy é necessário para o TIP
A propagação de identidade confiável exige--interactive-configuration '{"livyEndpointEnabled":true}'. O TIP está habilitado somente para o endpoint Apache Livy.
Se você não tiver as permissões necessárias do IAM Identity Center, crie o aplicativo sem o --identity-center-configuration parâmetro e peça ao administrador do IAM Identity Center que habilite o TIP posteriormente usando a API update-application:
aws emr-serverless update-application \ --application-idapplication-id\ --identity-center-configuration '{"identityCenterInstanceArn": "arn:aws:sso:::instance/ssoins-instance-id"}'
Etapa 4: configurar a função de execução do trabalho
A política de confiança da função de execução do trabalho deve incluir sts:SetContext para permitir que o EMR Serverless aprimore as credenciais com a identidade do usuário:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "emr-serverless.amazonaws.com" }, "Action": ["sts:AssumeRole", "sts:SetContext"] } ] }
Crie a função:
aws iam create-role \ --role-name emr-serverless-tip-job-role \ --assume-role-policy-document file://trust-policy.json \ --description "EMR Serverless job execution role with TIP support"
Anexe permissões para os serviços posteriores que o trabalho acessará. A função precisa das permissões Lake Formation, AWS Glue, Amazon S3 e Amazon CloudWatch Logs:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "LakeFormationAndGlueAccess", "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess", "glue:GetTable", "glue:GetTables", "glue:GetDatabase", "glue:GetDatabases", "glue:GetPartitions" ], "Resource": "*" }, { "Sid": "S3DataAccess", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::your-data-bucket", "arn:aws:s3:::your-data-bucket/*" ] }, { "Sid": "CloudWatchLogsAccess", "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogGroups", "logs:DescribeLogStreams" ], "Resource": "arn:aws:logs:us-east-1:111122223333:*" } ] }
As permissões do S3 são necessárias, além das permissões do Lake Formation
As permissões do Amazon S3 (s3:GetObject,s3:PutObject,s3:ListBucket) em seu bucket de dados são obrigatórias, além das permissões Lake Formation e AWS Glue. A s3:PutObject permissão é necessária para raspar e embaralhar dados do Spark. Sem as permissões do Amazon S3, os trabalhos do Spark podem falhar com erros de acesso negado ao ler os arquivos de dados subjacentes ou gravar dados temporários.
CloudWatch As permissões de registros são necessárias
As permissões do Amazon CloudWatch Logs são necessárias para a entrega dos registros do driver e do executor do Spark. Sem eles, as sessões do Spark podem não começar.
Anexe a política à função:
aws iam put-role-policy \ --role-name emr-serverless-tip-job-role \ --policy-name tip-lakeformation-access \ --policy-document file://permissions-policy.json
Conceda permissões à Lake Formation para a função de execução do trabalho:
A função de execução do trabalho também exige permissões do Lake Formation no banco de dados e na tabela. Isso é um acréscimo às concessões concedidas ao usuário do IAM Identity Center.
# Grant DESCRIBE on the database to the job role aws lakeformation grant-permissions \ --principal '{"DataLakePrincipalIdentifier": "arn:aws:iam::account-id:role/emr-serverless-tip-job-role"}' \ --permissions '["DESCRIBE"]' \ --resource '{"Database": {"DatabaseName": "tip_tutorial_db", "CatalogId": "account-id"}}' # Grant SELECT and DESCRIBE on the table to the job role aws lakeformation grant-permissions \ --principal '{"DataLakePrincipalIdentifier": "arn:aws:iam::account-id:role/emr-serverless-tip-job-role"}' \ --permissions '["SELECT","DESCRIBE"]' \ --resource '{"Table": {"DatabaseName": "tip_tutorial_db", "Name": "employees", "CatalogId": "account-id"}}'
Para configurações adicionais de serviços downstream, consulte Usando o Lake Formation com o EMR Serverless e Usando as concessões de acesso do Amazon S3 com o EMR Serverless.
Consulte dados com o Trusted Identity Propagation por meio do Amazon SageMaker Unified Studio
Depois de concluir a configuração, você pode consultar dados usando seu aplicativo TIP-enabled EMR Serverless como computação em um projeto do Amazon SageMaker Unified Studio. O EMR Serverless executa as consultas de cada usuário com sua própria identidade do IAM Identity Center, e o Lake Formation impõe permissões por usuário.
Pré-requisitos
Um aplicativo TIP-enabled EMR Serverless (concluído na Etapa 3 acima).
Um domínio do Amazon SageMaker Unified Studio configurado com autenticação do IAM Identity Center.
Permissões do Lake Formation concedidas ao usuário ou grupo do IAM Identity Center no banco de dados e na tabela de destino (concluídas na Etapa 2 acima).
Etapa 5: Crie um projeto do Amazon SageMaker Unified Studio com o TIP ativado
Faça login no Amazon SageMaker Unified Studio usando suas credenciais do IAM Identity Center.
Crie um novo projeto ou abra um projeto da existente.
Nas configurações do projeto, certifique-se de que o perfil esteja
enableTrustedIdentityPropagationPermissionsdefinidotruenos parâmetros do blueprint.
Etapa 6: Adicionar o aplicativo EMR Serverless como computação
Atualmente, a configuração computacional do projeto Amazon SageMaker Unified Studio não oferece suporte à adição de um aplicativo EMR Serverless existente por meio do console. Use o AWS CLI para criar a conexão:
aws datazone create-connection \ --domain-identifierdomain-id\ --name "my-emr-serverless-connection" \ --environment-identifierenvironment-id\ --props '{ "sparkEmrProperties": { "computeArn": "arn:aws:emr-serverless:region:account-id:/applications/application-id", "runtimeRole": "arn:aws:iam::account-id:role/emr-serverless-tip-job-role" } }'
Substitua os valores a seguir:
: Seu identificador de domínio do Amazon SageMaker Unified Studio.domain-id: O identificador de ambiente do seu projeto (use o ambiente Tooling).environment-id: O ID do aplicativo EMR Serverless da Etapa 3.application-id: A função de execução do trabalho da Etapa 4.emr-serverless-tip-job-role
Importante
A create-connection API exige que o chamador seja membro do DataZone projeto. Se você receber umaAccessDeniedException, adicione sua função do IAM como colaborador do projeto antes de criar a conexão:
import boto3 session = boto3.Session(profile_name='your-profile', region_name='your-region') client = session.client('datazone') client.create_project_membership( domainIdentifier='domain-id', projectIdentifier='project-id', designation='PROJECT_CONTRIBUTOR', member={'userIdentifier': 'arn:aws:iam::account-id:role/your-role'} )
Configure a função de DataZone usuário do projeto para acesso sem servidor do EMR.
A função de DataZone usuário do ambiente do projeto deve ter permissões para interagir com o aplicativo EMR Serverless. Adicione a seguinte política embutida à função (o nome da função segue o padrãodatazone_usr_role_<project-id>_<environment-id>):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:GetApplication", "emr-serverless:StartApplication", "emr-serverless:StopApplication", "emr-serverless:ListApplications", "emr-serverless:AccessLivyEndpoints", "emr-serverless:StartJobRun", "emr-serverless:GetJobRun", "emr-serverless:ListJobRuns", "emr-serverless:CancelJobRun", "emr-serverless:GetDashboardForJobRun" ], "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::111122223333:role/emr-serverless-tip-job-role", "Condition": { "StringLike": { "iam:PassedToService": "emr-serverless.amazonaws.com" } } } ] }
Conceda permissões de Lake Formation para a função de DataZone usuário:
# Grant DESCRIBE on the database aws lakeformation grant-permissions \ --principal '{"DataLakePrincipalIdentifier": "arn:aws:iam::account-id:role/datazone_usr_role_project-id_environment-id"}' \ --permissions '["DESCRIBE"]' \ --resource '{"Database": {"DatabaseName": "tip_tutorial_db", "CatalogId": "account-id"}}' # Grant SELECT and DESCRIBE on the table aws lakeformation grant-permissions \ --principal '{"DataLakePrincipalIdentifier": "arn:aws:iam::account-id:role/datazone_usr_role_project-id_environment-id"}' \ --permissions '["SELECT","DESCRIBE"]' \ --resource '{"Table": {"DatabaseName": "tip_tutorial_db", "Name": "employees", "CatalogId": "account-id"}}'
Limitação do console para conexões EMR Serverless
Atualmente, o Amazon SageMaker Unified Studio oferece suporte à adição do Amazon EMR existente em clusters do EC2 por meio da configuração de computação do console. Para aplicativos EMR Serverless, use o AWS CLI método mostrado acima.
Etapa 7: consultar uma tabela de amostra
Abra um espaço JupyterLab IDE em seu projeto do Amazon SageMaker Unified Studio.
Selecione a conexão EMR Serverless como a computação para execução do notebook.
Em uma nova célula do notebook, execute as seguintes PySpark consultas:
%%pyspark my-emr-serverless-connection spark.sql("SHOW DATABASES").show() %%pyspark my-emr-serverless-connection spark.sql("SELECT * FROM tip_tutorial_db.employees LIMIT 10").show()Verifique se a consulta retorna dados. Isso confirma que sua identidade do IAM Identity Center foi propagada para Lake Formation e o acesso foi concedido com base em sua identidade.
Início a frio da aplicação
Na primeira vez em que você executa uma célula depois de criar a conexão, o EMR Serverless inicia o aplicativo (inicialização a frio). Isso pode levar de 2 a 3 minutos. As células subsequentes são executadas em segundos enquanto a sessão está ativa.
Solução de problemas de erros de acesso negado
Se você receber um erro de acesso negado, verifique se:
Seu usuário ou grupo do IAM Identity Center recebeu DESCRIBE no banco de dados e SELECT/DESCRIBE na tabela em Lake Formation.
A função de execução do trabalho tem as permissões do
lakeformation:GetDataAccessAWS Glue Data Catalog.A função de DataZone usuário tem permissões de Lake Formation no banco de dados e na tabela.
A localização do Amazon S3 do Lake Formation é registrada com uma função personalizada que inclui
sts:SetContext(não a função vinculada ao serviço).
Solução de problemas
| Erro | Causa | Correção |
|---|---|---|
AccessDeniedException: emr-serverless:GetApplication |
A função de DataZone usuário não tem permissões do EMR Serverless. | Adicione a política embutida do EMR Serverless à função de DataZone usuário (consulte a Etapa 6). |
| Tempo limite de espera que o aplicativo atinja o status STARTED | A inicialização a frio do aplicativo EMR Serverless excede o tempo limite padrão. | Re-run a célula. O aplicativo continua iniciando em segundo plano e estará pronto na próxima tentativa. |
| Sessão não encontrada. Limpo devido ao tempo limite de inatividade. | A sessão do Spark falhou ao iniciar devido a permissões insuficientes na função de execução do trabalho. | Certifique-se de que a função de execução do trabalho tenha permissões Amazon S3, Amazon CloudWatch Logs, AWS Glue e Lake Formation (consulte a Etapa 4). |
| Permissão (s) insuficiente (s) de formação de lago: descrição obrigatória no banco de dados | Sua identidade ou função não tem permissões de Lake Formation no nível do banco de dados. | Conceda DESCRIBE no banco de dados ao usuário do IAM Identity Center, à função de execução do trabalho e à função DataZone do usuário. |
TABLE_OR_VIEW_NOT_FOUND |
A sessão do Spark não está configurada para usar o AWS Glue Data Catalog. | Certifique-se de que o aplicativo EMR Serverless inclua a classe de fábrica spark.sql.catalogImplementation=hive AWS Glue metastore runtimeConfiguration (consulte a Etapa 3). |
AccessDeniedException: CreateConnection |
O chamador não é membro do DataZone projeto. | Adicione sua função como colaborador do projeto antes de ligar create-connection (consulte a Etapa 6). |
Limpar os recursos
Para evitar cobranças contínuas, exclua os recursos que você criou neste tutorial:
Exclua o aplicativo EMR Serverless.
Remova a conexão do Amazon SageMaker Unified Studio e exclua o projeto do Amazon SageMaker Unified Studio (e o domínio, se você os criou somente para este tutorial).
Revogue as permissões de Lake Formation que você concedeu e cancele o registro da localização de dados do Amazon S3.
Exclua as funções do IAM que você criou nas etapas 2 e 4.
Exclua todos os buckets e dados de amostra do Amazon S3 de teste.
Próximas etapas
Para verificar a propagação da identidade em CloudTrail, procure
AssumeRoleeventos comsts:SetContexto serviço EMR Serverless.Para restringir o acesso de usuários diferentes, crie usuários adicionais do IAM Identity Center e conceda a eles diferentes permissões de Lake Formation na mesma tabela (por exemplo, filtragem em nível de coluna ou linha).
Para implantações de produção, defina o escopo das permissões Amazon S3 e AWS Glue da função de execução do trabalho para recursos específicos, em vez de usar curingas.
Para obter mais informações sobre o uso do EMR Serverless com o Amazon SageMaker Unified Studio, consulte EMR Serverless no Amazon Unified Studio. SageMaker