View a markdown version of this page

Configuración de roles de IAM - Amazon EMR

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Configuración de roles de IAM

Requisitos previos

Antes de comenzar, asegúrese de que dispone de lo siguiente:

  • Una AWS cuenta con acceso administrativo de IAM

  • AWS CLI instalada y configurada. Para obtener más información, consulte Instalación de la AWS CLI.

Configure las siguientes variables para usarlas en los comandos siguientes:

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

Paso 1: Crear el rol de IAM

El servidor MCP de SMUS utiliza su función de IAM para autorizar las operaciones a nivel de AWS servicio. No se requieren MCP-specific permisos independientes.

Para crear el rol de IAM (AWS CLI)

  1. Cree un documento de política de confianza que permita a su cuenta asumir la función:

    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. Cree el rol:

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

Paso 2: Adjunte los permisos para su modo de despliegue

Adjunta la política de permisos que coincida con tu plataforma de despliegue de Spark. Puedes adjuntar uno o más de los siguientes elementos en función de las plataformas que utilices.

Opción A: EMR en EC2

  1. Cree el 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. Cree y adjunte la política:

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

Como alternativa, puedes adjuntar la política AmazonElasticMapReduceFullAccess AWS gestionada si tu función ya la usa:

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

Opción B: AWS Adherencia

  1. Cree el 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. Adjunte la política:

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

Opción C: EMR sin servidor

  1. Cree el 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. Adjunte la política:

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

Opcional: permisos de KMS para CloudWatch registros cifrados

Si sus CloudWatch registros están cifrados con una clave de KMS administrada por el cliente, añada lo siguiente (sustitúyalo por <KEY_ID> su ID de clave de 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>\" }] }"

Paso 3: Configure su cliente MCP

Configure su cliente MCP (por ejemplo, Claude Desktop o Amazon Q Developer) para que utilice el ARN de rol que creó:

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

Consulte la documentación de su cliente MCP para saber cómo configurar AWS las credenciales (normalmente mediante un AWS perfil que asume esta función).

Claves de condición para las solicitudes del servidor MCP

Se añaden automáticamente dos claves de condición a todas las solicitudes realizadas a través del servidor MCP de SMUS:

  • aws:ViaAWSMCPService— Se configura true para cualquier solicitud realizada a través de un servidor MCP AWS gestionado.

  • aws:CalledViaAWSMCP— Se establece como principal de servicio del servidor MCP (por ejemplo,sagemaker-unified-studio-mcp.amazonaws.com).

Puede utilizar estas claves de condición para controlar el acceso a sus recursos cuando las solicitudes se originan en un servidor MCP AWS gestionado.

Ejemplo: Permita las operaciones de lectura de Glue solo cuando se acceda a través del servidor MCP de SMUS:

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

Ejemplo: denegar las operaciones de borrado cuando se accede a través de cualquier servidor MCP AWS gestionado:

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

Para obtener más información sobre las claves de condición, consulte las claves de contexto de condición AWS globales en la Guía del usuario de IAM.