

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# IAM 역할 설정
<a name="emr-spark-upgrade-agent-iam-role"></a>

## 사전 조건
<a name="emr-spark-upgrade-agent-iam-prerequisites"></a>

시작하기 전에 다음을 갖추었는지 확인하세요.
+ IAM 관리 액세스 권한이 있는 AWS 계정
+ AWS CLI 설치 및 구성됨. 자세한 내용은 [AWS CLI 설치를 참조하세요](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).
+ 업그레이드된 아티팩트를 스테이징하기 위한 Amazon S3 버킷

후속 명령에 사용할 다음 변수를 설정합니다(버`my-staging-bucket`킷 이름으로 대체).

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

## 1단계 - IAM 역할 생성
<a name="emr-spark-upgrade-agent-iam-step1"></a>

SMUS MCP 서버는 IAM 역할을 사용하여 AWS 서비스 수준에서 작업을 승인합니다. 별도의 MCP별 권한은 필요하지 않습니다.

**IAM 역할을 생성하려면(AWS CLI)**

1. 신뢰 정책 문서 생성:

   ```
   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. 역할을 생성합니다.

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

## 2단계: 배포 모드에 대한 권한 연결
<a name="emr-spark-upgrade-agent-iam-step2"></a>

EMR 배포 플랫폼과 일치하는 권한 정책을 연결합니다.

### 옵션 A: EC2의 EMR
<a name="emr-spark-upgrade-agent-iam-emr-ec2"></a>

1. 정책 문서를 생성합니다(`<STAGING_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. 정책을 연결합니다.

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

또는 [AmazonElasticMapReduceFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonElasticMapReduceFullAccess.html) 관리형 정책과 스테이징 버킷에 대한 Amazon S3 정책을 연결합니다.

#### KMS 권한 - 스테이징 버킷
<a name="emr-spark-upgrade-agent-iam-kms-staging"></a>

스테이징 버킷이 CMK로 암호화된 경우 다음 정책을 추가합니다. 서비스는 데이터를 업로드할 때 버킷에 구성된 CMK를 자동으로 사용합니다(KMS 키 ID`<KEY_ID>`로 대체).

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

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

1. 정책 문서를 생성합니다(`<STAGING_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. 정책을 연결합니다.

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

#### KMS 권한 - 스테이징 버킷
<a name="emr-spark-upgrade-agent-iam-kms-staging-serverless"></a>

스테이징 버킷이 CMK로 암호화된 경우 다음 정책을 추가합니다. 서비스는 데이터를 업로드할 때 버킷에 구성된 CMK를 자동으로 사용합니다(KMS 키 ID`<KEY_ID>`로 대체).

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

#### KMS 권한 - CloudWatch Logs
<a name="emr-spark-upgrade-agent-iam-kms-cloudwatch"></a>

CloudWatch Logs가 CMK로 암호화된 경우 서비스가 EMR Serverless 애플리케이션 로그를 읽을 수 있도록 다음 정책을 추가합니다(KMS 키 ID`<KEY_ID>`로 대체).

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

## 3단계: MCP 클라이언트 구성
<a name="emr-spark-upgrade-agent-iam-step3"></a>

생성한 역할 ARN을 사용하도록 MCP 클라이언트(예: Claude Desktop 또는 Amazon Q Developer)를 구성합니다.

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

자격 AWS 증명을 구성하는 방법은 MCP 클라이언트의 설명서를 참조하세요(일반적으로이 역할을 수임하는 AWS 프로필을 통해).

## MCP 서버 요청에 사용되는 조건 키
<a name="emr-spark-upgrade-agent-mcp-permissions-change"></a>

SMUS MCP 서버를 통해 이루어진 모든 요청에 두 개의 조건 키가 자동으로 추가됩니다.
+ `aws:ViaAWSMCPService` - AWS 관리형 MCP 서버를 통해 이루어진 모든 요청에 `true` 대해를 로 설정합니다.
+ `aws:CalledViaAWSMCP` - MCP 서버 서비스 보안 주체(예: `sagemaker-unified-studio-mcp.amazonaws.com`)로 설정합니다.

이러한 조건 키를 사용하여 요청이 AWS 관리형 MCP 서버에서 시작될 때 리소스에 대한 액세스를 제어할 수 있습니다.

**예: SMUS MCP 서버를 통해 액세스하는 경우에만 EMR 작업을 허용합니다.**

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

**예: AWS 관리형 MCP 서버를 통한 모든 작업 거부:**

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

**예: 특정 AWS 관리형 MCP 서버를 통해 특정 작업 거부:**

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

조건 키에 대한 자세한 내용은 *IAM 사용 설명서*의 [AWS 전역 조건 컨텍스트 키를](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) 참조하세요.