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 (<KEY_ID>以 KMS 金鑰 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 (<KEY_ID>以 KMS 金鑰 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 應用程式日誌 (<KEY_ID>以 KMS 金鑰 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 用戶端

將 MCP 用戶端 (例如,Claude Desktop 或 Amazon Q Developer) 設定為使用您建立的角色 ARN:

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

請參閱 MCP 用戶端的文件,了解如何設定 AWS 登入資料 (通常是透過擔任此角色的 AWS 設定檔)。

MCP 伺服器請求的條件索引鍵

兩個條件索引鍵會自動新增至透過 SMUS MCP 伺服器提出的所有請求:

  • aws:ViaAWSMCPServicetrue 針對透過 AWS 受管 MCP 伺服器提出的任何請求,將 設定為 。

  • 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 全域條件內容索引鍵