

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Configurazione del ruolo IAM
<a name="emr-spark-upgrade-agent-iam-role"></a>

## Prerequisiti
<a name="emr-spark-upgrade-agent-iam-prerequisites"></a>

Prima di iniziare, assicurati di disporre dei seguenti elementi:
+ Un AWS account con accesso amministrativo IAM
+ AWS CLI installata e configurata. Per ulteriori informazioni, consulta [Installazione della AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).
+ Un bucket Amazon Amazon S3 per lo staging di artefatti aggiornati

Imposta le seguenti variabili da utilizzare nei comandi successivi (`my-staging-bucket`sostituiscile con il nome del bucket):

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

## Fase 1: creazione di un ruolo IAM per
<a name="emr-spark-upgrade-agent-iam-step1"></a>

Il server SMUS MCP utilizza il tuo ruolo IAM per autorizzare le operazioni a livello di servizio. AWS Non sono richieste MCP-specific autorizzazioni separate.

**Per creare il ruolo IAM (AWS CLI)**

1. Crea un documento sulla politica di fiducia:

   ```
   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
   ```

1. Crea il ruolo:

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

## Passaggio 2: allega le autorizzazioni per la modalità di distribuzione
<a name="emr-spark-upgrade-agent-iam-step2"></a>

Allega la politica di autorizzazioni che corrisponde alla tua piattaforma di distribuzione EMR.

### Opzione A: EMR su EC2
<a name="emr-spark-upgrade-agent-iam-emr-ec2"></a>

1. Crea il documento relativo alla policy (sostituiscilo `<STAGING_BUCKET>` con il nome del tuo bucket 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
   ```

1. Allega la policy:

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

In alternativa, [AmazonElasticMapReduceFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonElasticMapReduceFullAccess.html)allega la policy gestita più una policy Amazon S3 per il tuo staging bucket.

#### Autorizzazioni KMS - Staging Bucket
<a name="emr-spark-upgrade-agent-iam-kms-staging"></a>

Se lo staging bucket è crittografato con un CMK, aggiungi la seguente politica. Il servizio utilizzerà automaticamente la CMK configurata nel bucket durante il caricamento dei dati (sostituiscila `<KEY_ID>` con l'ID della chiave 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>\"
    }]
  }"
```

### Opzione B: EMR Serverless
<a name="emr-spark-upgrade-agent-iam-emr-serverless"></a>

1. Crea il documento relativo alla policy (sostituiscilo `<STAGING_BUCKET>` con il nome del tuo bucket 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
   ```

1. Allega la policy:

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

#### Autorizzazioni KMS - Staging Bucket
<a name="emr-spark-upgrade-agent-iam-kms-staging-serverless"></a>

Se lo staging bucket è crittografato con un CMK, aggiungi la seguente politica. Il servizio utilizzerà automaticamente la CMK configurata nel bucket durante il caricamento dei dati (sostituiscila `<KEY_ID>` con l'ID della chiave 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>\"
    }]
  }"
```

#### Autorizzazioni KMS - Registri CloudWatch
<a name="emr-spark-upgrade-agent-iam-kms-cloudwatch"></a>

Se CloudWatch i log sono crittografati con un CMK, aggiungi la seguente policy in modo che il servizio possa leggere i log delle applicazioni EMR Serverless (sostituiscili `<KEY_ID>` con l'ID della tua chiave 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>\"
    }]
  }"
```

## Fase 3: Configurare il client MCP
<a name="emr-spark-upgrade-agent-iam-step3"></a>

Configura il tuo client MCP (ad esempio, Claude Desktop o Amazon Q Developer) per utilizzare il ruolo ARN che hai creato:

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

Consulta la documentazione del tuo client MCP per informazioni su come configurare AWS le credenziali (in genere tramite un AWS profilo che assume questo ruolo).

## Chiavi di condizione per le richieste del server MCP
<a name="emr-spark-upgrade-agent-mcp-permissions-change"></a>

Due chiavi di condizione vengono aggiunte automaticamente a tutte le richieste effettuate tramite il server SMUS MCP:
+ `aws:ViaAWSMCPService`— Impostato su `true` per qualsiasi richiesta effettuata tramite un server AWS MCP gestito.
+ `aws:CalledViaAWSMCP`— Impostato sul principale del servizio del server MCP (ad esempio,`sagemaker-unified-studio-mcp.amazonaws.com`).

È possibile utilizzare questi tasti di condizione per controllare l'accesso alle risorse quando le richieste provengono da un server MCP AWS gestito.

**Esempio: consentire le operazioni EMR solo in caso di accesso tramite il server MCP SMUS:**

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

**Esempio: nega tutte le operazioni tramite qualsiasi AWS server MCP gestito:**

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

**Esempio: nega operazioni specifiche tramite uno specifico server MCP AWS gestito:**

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

Per ulteriori informazioni sulle chiavi di condizione, consulta le chiavi di [contesto delle condizioni AWS globali nella Guida](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) per l'*utente IAM*.