View a markdown version of this page

IAM 역할 설정 - Amazon EMR

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

IAM 역할 설정

사전 조건

시작하기 전에 다음을 갖추었는지 확인하세요.

  • IAM 관리 액세스 권한이 있는 AWS 계정

  • AWS CLI 설치 및 구성됨. 자세한 내용은 AWS CLI 설치를 참조하세요.

  • 업그레이드된 아티팩트를 스테이징하기 위한 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 역할 생성

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

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

2단계: 배포 모드에 대한 권한 연결

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

옵션 A: EC2의 EMR

  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
  2. 정책을 연결합니다.

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

또는 AmazonElasticMapReduceFullAccess 관리형 정책과 스테이징 버킷에 대한 Amazon S3 정책을 연결합니다.

KMS 권한 - 스테이징 버킷

스테이징 버킷이 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

  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
  2. 정책을 연결합니다.

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

KMS 권한 - 스테이징 버킷

스테이징 버킷이 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

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 클라이언트 구성

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

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

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

MCP 서버 요청에 사용되는 조건 키

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 전역 조건 컨텍스트 키를 참조하세요.