View a markdown version of this page

Pengaturan Peran IAM - Amazon EMR

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Pengaturan Peran IAM

Prasyarat

Sebelum Anda mulai, pastikan Anda memiliki:

  • AWS Akun dengan akses administratif IAM

  • AWS CLI diinstal dan dikonfigurasi. Untuk informasi selengkapnya, lihat Menginstal AWS CLI.

  • Bucket Amazon S3 Amazon untuk mementaskan artefak yang ditingkatkan

Tetapkan variabel berikut untuk digunakan dalam perintah berikutnya (ganti my-staging-bucket dengan nama bucket Anda):

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

Langkah 1: Buat peran IAM

Server SMUS MCP menggunakan peran IAM Anda untuk mengotorisasi operasi di tingkat layanan. AWS Tidak diperlukan MCP-specific izin terpisah.

Untuk membuat peran IAM (AWS CLI)

  1. Buat dokumen kebijakan kepercayaan:

    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. Buat peran:

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

Langkah 2: Lampirkan izin untuk mode penerapan Anda

Lampirkan kebijakan izin yang cocok dengan platform penerapan EMR Anda.

Opsi A: EMR pada EC2

  1. Buat dokumen kebijakan (ganti <STAGING_BUCKET> dengan nama bucket Amazon S3 Anda):

    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. Lampirkan kebijakan:

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

Atau, lampirkan kebijakan AmazonElasticMapReduceFullAccessterkelola ditambah kebijakan Amazon S3 untuk bucket pementasan Anda.

Izin KMS - Staging Bucket

Jika bucket staging dienkripsi dengan CMK, tambahkan kebijakan berikut. Layanan akan secara otomatis menggunakan CMK yang dikonfigurasi pada bucket saat mengunggah data (ganti <KEY_ID> dengan ID kunci KMS Anda):

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

Opsi B: EMR Tanpa Server

  1. Buat dokumen kebijakan (ganti <STAGING_BUCKET> dengan nama bucket Amazon S3 Anda):

    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. Lampirkan kebijakan:

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

Izin KMS - Staging Bucket

Jika bucket staging dienkripsi dengan CMK, tambahkan kebijakan berikut. Layanan akan secara otomatis menggunakan CMK yang dikonfigurasi pada bucket saat mengunggah data (ganti <KEY_ID> dengan ID kunci KMS Anda):

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

Izin KMS - Log CloudWatch

Jika CloudWatch Log dienkripsi dengan CMK, tambahkan kebijakan berikut agar layanan dapat membaca log aplikasi EMR Tanpa Server (ganti <KEY_ID> dengan ID kunci KMS Anda):

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

Langkah 3: Konfigurasikan klien MCP Anda

Konfigurasikan klien MCP Anda (misalnya, Claude Desktop atau Amazon Q Developer) untuk menggunakan peran ARN yang Anda buat:

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

Lihat dokumentasi klien MCP Anda untuk mengetahui cara mengonfigurasi AWS kredensil (biasanya melalui AWS profil yang mengasumsikan peran ini).

Kunci kondisi untuk permintaan server MCP

Dua tombol kondisi secara otomatis ditambahkan ke semua permintaan yang dibuat melalui server SMUS MCP:

  • aws:ViaAWSMCPService— Setel ke true untuk setiap permintaan yang dibuat melalui server MCP AWS terkelola.

  • aws:CalledViaAWSMCP— Setel ke prinsipal layanan server MCP (misalnya,sagemaker-unified-studio-mcp.amazonaws.com).

Anda dapat menggunakan tombol kondisi ini untuk mengontrol akses ke sumber daya Anda saat permintaan berasal dari server MCP AWS terkelola.

Contoh: Izinkan operasi EMR hanya ketika diakses melalui server SMUS MCP:

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

Contoh: Tolak semua operasi melalui server MCP AWS terkelola:

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

Contoh: Tolak operasi tertentu melalui server MCP AWS terkelola tertentu:

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

Untuk informasi selengkapnya tentang kunci kondisi, lihat kunci konteks kondisi AWS global di Panduan Pengguna IAM.