翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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)
-
信頼ポリシードキュメントを作成します。
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 -
ロールを作成します。
aws iam create-role \ --role-name SparkUpgradeMCPRole \ --assume-role-policy-document file://mcp-trust-policy.json
ステップ 2: デプロイモードのアクセス許可をアタッチする
EMR デプロイプラットフォームに一致するアクセス許可ポリシーをアタッチします。
オプション A: EC2 での EMR
-
ポリシードキュメントを作成します (
<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 -
ポリシーをアタッチします。
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
-
ポリシードキュメントを作成します (
<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 -
ポリシーをアタッチします。
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 サーバーを介して行われたすべてのリクエストに 2 つの条件キーが自動的に追加されます。
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 「グローバル条件コンテキストキー」を参照してください。