View a markdown version of this page

Configuração da função do IAM - Amazon EMR

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

Configuração da função do IAM

Pré-requisitos

Antes de começar, verifique se você tem:

  • Uma AWS conta com acesso administrativo do IAM

  • AWS CLI instalada e configurada. Para obter mais informações, consulte Instalando a AWS CLI.

Defina as seguintes variáveis para uso em comandos subsequentes:

ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) REGION=$(aws configure get region)

Etapa 1: Criar o perfil do IAM

O servidor SMUS MCP usa sua função do IAM para autorizar operações no nível do AWS serviço. Nenhuma MCP-specific permissão separada é necessária.

Para criar a função do IAM (AWS CLI)

  1. Crie um documento de política de confiança que permita que sua conta assuma a função:

    cat > mcp-trust-policy.json << EOF { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccountToAssumeRole", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::${ACCOUNT_ID}:root" }, "Action": "sts:AssumeRole" } ] } EOF
  2. Crie a função:

    aws iam create-role \ --role-name SparkTroubleshootingMCPRole \ --assume-role-policy-document file://mcp-trust-policy.json

Etapa 2: anexar permissões para seu modo de implantação

Anexe a política de permissões que corresponda à sua plataforma de implantação do Spark. Você pode anexar um ou mais dos itens a seguir, dependendo de quais plataformas você usa.

Opção A: EMR no EC2

  1. Crie o documento de política:

    cat > emr-ec2-policy.json << 'EOF' { "Version": "2012-10-17", "Statement": [ { "Sid": "EMREC2ReadAccess", "Effect": "Allow", "Action": [ "elasticmapreduce:DescribeCluster", "elasticmapreduce:DescribeStep", "elasticmapreduce:ListSteps", "elasticmapreduce:ListClusters", "elasticmapreduce:DescribeJobFlows" ], "Resource": ["*"] }, { "Sid": "EMRS3LogAccess", "Effect": "Allow", "Action": ["s3:GetObject", "s3:ListBucket"], "Resource": "*" }, { "Sid": "EMRPersistentApp", "Effect": "Allow", "Action": [ "elasticmapreduce:CreatePersistentAppUI", "elasticmapreduce:DescribePersistentAppUI", "elasticmapreduce:GetPersistentAppUIPresignedURL" ], "Resource": ["*"] } ] } EOF
  2. Crie e anexe a política:

    aws iam put-role-policy \ --role-name SparkTroubleshootingMCPRole \ --policy-name EMREC2TroubleshootingAccess \ --policy-document file://emr-ec2-policy.json

Como alternativa, você pode anexar a política AmazonElasticMapReduceFullAccess AWS gerenciada se sua função já a usar:

aws iam attach-role-policy \ --role-name SparkTroubleshootingMCPRole \ --policy-arn arn:aws:iam::aws:policy/AmazonElasticMapReduceFullAccess

Opção B: AWS União

  1. Crie o documento de política:

    cat > glue-policy.json << EOF { "Version": "2012-10-17", "Statement": [ { "Sid": "GlueReadAccess", "Effect": "Allow", "Action": [ "glue:GetJob", "glue:GetJobRun", "glue:GetJobRuns", "glue:GetJobs", "glue:BatchGetJobs" ], "Resource": ["arn:aws:glue:*:${ACCOUNT_ID}:job/*"] }, { "Sid": "GlueCloudWatchLogsAccess", "Effect": "Allow", "Action": ["logs:GetLogEvents", "logs:FilterLogEvents"], "Resource": ["arn:aws:logs:*:${ACCOUNT_ID}:log-group:/aws/glue/*"] }, { "Sid": "GlueSparkWebUI", "Effect": "Allow", "Action": [ "glue:RequestLogParsing", "glue:GetLogParsingStatus", "glue:GetEnvironment", "glue:GetStage", "glue:GetStages", "glue:GetStageFiles", "glue:BatchGetStageFiles", "glue:GetStageAttempt", "glue:GetStageAttemptTaskList", "glue:GetStageAttemptTaskSummary", "glue:GetExecutors", "glue:GetExecutorsThreads", "glue:GetStorage", "glue:GetStorageUnit", "glue:GetQueries", "glue:GetQuery", "glue:GetDashboardUrl" ], "Resource": ["arn:aws:glue:*:${ACCOUNT_ID}:job/*"] }, { "Sid": "GluePassRoleAccess", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*", "Condition": { "StringLike": { "iam:PassedToService": "glue.amazonaws.com" } } } ] } EOF
  2. Anexe a política:

    aws iam put-role-policy \ --role-name SparkTroubleshootingMCPRole \ --policy-name GlueTroubleshootingAccess \ --policy-document file://glue-policy.json

Opção C: EMR sem servidor

  1. Crie o documento de política:

    cat > emr-serverless-policy.json << EOF { "Version": "2012-10-17", "Statement": [ { "Sid": "EMRServerlessReadAccess", "Effect": "Allow", "Action": [ "emr-serverless:GetJobRun", "emr-serverless:GetApplication", "emr-serverless:ListApplications", "emr-serverless:ListJobRuns", "emr-serverless:ListJobRunAttempts", "emr-serverless:GetDashboardForJobRun", "emr-serverless:ListTagsForResource" ], "Resource": ["*"] }, { "Sid": "EMRServerlessCloudWatchLogsAccess", "Effect": "Allow", "Action": ["logs:GetLogEvents", "logs:FilterLogEvents"], "Resource": ["arn:aws:logs:*:${ACCOUNT_ID}:log-group:/aws/emr-serverless/*"] }, { "Sid": "EMRServerlessS3LogsAccess", "Effect": "Allow", "Action": ["s3:GetObject", "s3:ListBucket"], "Resource": "*" } ] } EOF
  2. Anexe a política:

    aws iam put-role-policy \ --role-name SparkTroubleshootingMCPRole \ --policy-name EMRServerlessTroubleshootingAccess \ --policy-document file://emr-serverless-policy.json

Opcional: permissões KMS para registros criptografados CloudWatch

Se seus CloudWatch registros estiverem criptografados com uma chave KMS gerenciada pelo cliente, adicione o seguinte (<KEY_ID>substitua pelo ID da sua chave KMS):

aws iam put-role-policy \ --role-name SparkTroubleshootingMCPRole \ --policy-name KMSCloudWatchLogsDecrypt \ --policy-document "{ \"Version\": \"2012-10-17\", \"Statement\": [{ \"Effect\": \"Allow\", \"Action\": [\"kms:Decrypt\", \"kms:DescribeKey\"], \"Resource\": \"arn:aws:kms:${REGION}:${ACCOUNT_ID}:key/<KEY_ID>\" }] }"

Etapa 3: Configurar seu cliente MCP

Configure seu cliente MCP (por exemplo, Claude Desktop ou Amazon Q Developer) para usar o ARN de função que você criou:

echo "arn:aws:iam::${ACCOUNT_ID}:role/SparkTroubleshootingMCPRole"

Consulte a documentação do seu cliente MCP para saber como configurar AWS as credenciais (normalmente por meio de um AWS perfil que assume essa função).

Chaves de condição para solicitações do servidor MCP

Duas chaves de condição são adicionadas automaticamente a todas as solicitações feitas por meio do servidor MCP do SMUS:

  • aws:ViaAWSMCPService— Defina como true para qualquer solicitação feita por meio de um servidor MCP AWS gerenciado.

  • aws:CalledViaAWSMCP— Defina como principal de serviço do servidor MCP (por exemplo,sagemaker-unified-studio-mcp.amazonaws.com).

Você pode usar essas chaves de condição para controlar o acesso aos seus recursos quando as solicitações são originadas de um servidor MCP AWS gerenciado.

Exemplo: Permitir operações de leitura do Glue somente quando acessado pelo servidor SMUS MCP:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGlueReadViaSMUSMCP", "Effect": "Allow", "Action": ["glue:GetJob", "glue:GetJobRun", "glue:GetJobRuns"], "Resource": "*", "Condition": { "StringEquals": { "aws:CalledViaAWSMCP": "sagemaker-unified-studio-mcp.amazonaws.com" } } } ] }

Exemplo: negue operações de exclusão quando acessadas por meio de qualquer servidor MCP AWS gerenciado:

{ "Effect": "Deny", "Action": ["s3:DeleteObject", "s3:DeleteBucket"], "Resource": "*", "Condition": { "Bool": { "aws:ViaAWSMCPService": "true" } } }

Para obter mais informações sobre chaves de condição, consulte chaves de contexto de condição AWS global no Guia do usuário do IAM.