View a markdown version of this page

Configuration du rôle IAM - Amazon EMR

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Configuration du rôle IAM

Conditions préalables

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Un AWS compte avec accès administratif IAM

  • AWS CLI installée et configurée. Pour plus d'informations, consultez la section Installation de la AWS CLI.

  • Un compartiment Amazon Amazon S3 pour le stockage des artefacts mis à niveau

Définissez les variables suivantes à utiliser dans les commandes suivantes (remplacez-les my-staging-bucket par le nom de votre compartiment) :

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

Étape 1 : création du rôle IAM

Le serveur SMUS MCP utilise votre rôle IAM pour autoriser les opérations au niveau du AWS service. Aucune MCP-specific autorisation distincte n'est requise.

Pour créer le rôle IAM (AWS CLI)

  1. Créez un document de politique de confiance :

    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. Créez le rôle :

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

Étape 2 : associer des autorisations pour votre mode de déploiement

Joignez la politique d'autorisation correspondant à votre plateforme de déploiement EMR.

Option A : EMR sur EC2

  1. Créez le document de politique (remplacez-le <STAGING_BUCKET> par le nom de votre compartiment Amazon S3) :

    cat > emr-ec2-upgrade-policy.json << EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:DescribeCluster", "elasticmapreduce:DescribeStep", "elasticmapreduce:ListSteps", "elasticmapreduce:ListClusters", "elasticmapreduce:DescribeJobFlows", "elasticmapreduce:AddJobFlowSteps", "elasticmapreduce:CreatePersistentAppUI", "elasticmapreduce:DescribePersistentAppUI", "elasticmapreduce:GetPersistentAppUIPresignedURL" ], "Resource": "*" }, { "Effect": "Allow", "Action": ["s3:GetBucket*", "s3:GetObject*", "s3:List*", "s3:Put*"], "Resource": [ "arn:aws:s3:::${STAGING_BUCKET}", "arn:aws:s3:::${STAGING_BUCKET}/*" ] } ] } EOF
  2. Joignez la politique :

    aws iam put-role-policy \ --role-name SparkUpgradeMCPRole \ --policy-name EMREC2UpgradeAccess \ --policy-document file://emr-ec2-upgrade-policy.json

Vous pouvez également associer la politique AmazonElasticMapReduceFullAccessgérée à une politique Amazon S3 pour votre compartiment intermédiaire.

Autorisations KMS - Staging Bucket

Si le bucket intermédiaire est chiffré à l'aide d'une clé CMK, ajoutez la politique suivante. Le service utilisera automatiquement la clé CMK configurée sur le bucket lors du téléchargement des données (remplacez-la par votre identifiant <KEY_ID> de clé KMS) :

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

Option B : EMR sans serveur

  1. Créez le document de politique (remplacez-le <STAGING_BUCKET> par le nom de votre compartiment Amazon S3) :

    cat > emr-serverless-upgrade-policy.json << EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:StartJobRun", "emr-serverless:GetJobRun", "emr-serverless:GetApplication", "emr-serverless:ListApplications", "emr-serverless:GetDashboardForJobRun" ], "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*", "Condition": { "StringLike": { "iam:PassedToService": "emr-serverless.amazonaws.com" } } }, { "Effect": "Allow", "Action": ["logs:GetLogEvents", "logs:DescribeLogStreams"], "Resource": "arn:aws:logs:*:*:log-group:*" }, { "Effect": "Allow", "Action": ["s3:GetBucket*", "s3:GetObject*", "s3:List*", "s3:Put*"], "Resource": [ "arn:aws:s3:::${STAGING_BUCKET}", "arn:aws:s3:::${STAGING_BUCKET}/*" ] } ] } EOF
  2. Joignez la politique :

    aws iam put-role-policy \ --role-name SparkUpgradeMCPRole \ --policy-name EMRServerlessUpgradeAccess \ --policy-document file://emr-serverless-upgrade-policy.json

Autorisations KMS - Staging Bucket

Si le bucket intermédiaire est chiffré à l'aide d'une clé CMK, ajoutez la politique suivante. Le service utilisera automatiquement la clé CMK configurée sur le bucket lors du téléchargement des données (remplacez-la par votre identifiant <KEY_ID> de clé KMS) :

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

Autorisations KMS - CloudWatch Journaux

Si les CloudWatch journaux sont chiffrés à l'aide d'une clé CMK, ajoutez la politique suivante afin que le service puisse lire les journaux des applications EMR sans serveur (<KEY_ID>remplacez-les par votre identifiant de clé KMS) :

aws iam put-role-policy \ --role-name SparkUpgradeMCPRole \ --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>\" }] }"

Étape 3 : Configuration de votre client MCP

Configurez votre client MCP (par exemple, Claude Desktop ou Amazon Q Developer) pour utiliser le rôle ARN que vous avez créé :

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

Reportez-vous à la documentation de votre client MCP pour savoir comment configurer les AWS informations d'identification (généralement via un AWS profil qui assume ce rôle).

Clés de condition pour les demandes du serveur MCP

Deux clés de condition sont automatiquement ajoutées à toutes les demandes effectuées via le serveur SMUS MCP :

  • aws:ViaAWSMCPService— Paramétré sur true pour toute demande effectuée via un serveur MCP AWS géré.

  • aws:CalledViaAWSMCP— Défini sur le principal de service du serveur MCP (par exemple,sagemaker-unified-studio-mcp.amazonaws.com).

Vous pouvez utiliser ces clés de condition pour contrôler l'accès à vos ressources lorsque les demandes proviennent d'un serveur MCP AWS géré.

Exemple : autoriser les opérations EMR uniquement en cas d'accès via le serveur SMUS MCP :

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEMRReadViaSMUSMCP", "Effect": "Allow", "Action": [ "elasticmapreduce:DescribeCluster", "elasticmapreduce:ListClusters", "elasticmapreduce:ListSteps", "emr-serverless:GetJobRun", "emr-serverless:GetApplication" ], "Resource": "*", "Condition": { "StringEquals": { "aws:CalledViaAWSMCP": "sagemaker-unified-studio-mcp.amazonaws.com" } } } ] }

Exemple : refuser toutes les opérations via un serveur MCP AWS géré :

{ "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "Bool": { "aws:ViaAWSMCPService": "true" } } }

Exemple : refuser des opérations spécifiques via un serveur MCP AWS géré spécifique :

{ "Effect": "Deny", "Action": ["glue:GetJobRun", "glue:StartJobRun"], "Resource": "*", "Condition": { "StringEquals": { "aws:CalledViaAWSMCP": "sagemaker-unified-studio-mcp.amazonaws.com" } } }

Pour plus d'informations sur les clés de condition, consultez la section clés contextuelles de condition AWS globales dans le guide de l'utilisateur IAM.