Amazon Bedrock AgentCore 设置困惑:我需要哪个 IAM Role?

发布: (2026年1月7日 GMT+8 21:14)
4 min read
原文: Dev.to

Source: Dev.to

请提供您希望翻译的完整文本(除代码块和 URL 之外),我将把它翻译成简体中文并保持原有的 Markdown 格式。

介绍

如果你正尝试将代理部署到 Amazon Bedrock AgentCore Runtime,并且看到类似的 CLI 标志:

agentcore configure --entrypoint my_agent.py -er 

很容易卡住。这里的 “ 不是 你的 IAM 用户或 SSO 角色——它是一个独立的 执行角色,AgentCore Runtime 会假设该角色来运行你的代理。只要正确创建了该角色,部署就会变得很顺利。

本指南遵循官方 AWS 文档中关于 AgentCore Runtime 权限的说明:IAM Permissions for AgentCore Runtime

您实际需要的(2 个身份)

1. 您的“调用者身份”

  • IAM 用户
  • SSO 角色(IAM 身份中心)

此身份需要拥有部署/配置代理的权限,通常还需要 PassRole 权限。

2. “AgentCore Runtime 执行角色”(重要的)

  • 从 ECR 拉取镜像(如适用)
  • 将日志写入 CloudWatch
  • 将追踪发送至 X‑Ray
  • 发布指标
  • 调用 Bedrock 模型
  • 获取工作负载访问令牌

该角色的 ARN 即是您通过 -er 传递的值。

第一步 — 创建角色

  1. 打开 AWS 控制台 → IAM
  2. 点击 RolesCreate role
  3. 选择 Custom trust policy 并粘贴以下内容(将 123456789012us-east-1 替换为您的账户 ID 和区域):
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AssumeRolePolicy",
      "Effect": "Allow",
      "Principal": {
        "Service": "bedrock-agentcore.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789012"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:bedrock-agentcore:us-east-1:123456789012:*"
        }
      }
    }
  ]
}
  1. 为角色指定一个清晰的名称,例如 AgentCoreRuntimeExecutionRole-
  2. 创建角色。

第2步 — 附加正确的权限策略

  1. 打开您刚刚创建的角色。
  2. 前往 Permissions 选项卡 → Add permissionsCreate inline policy
  3. 选择 JSON 编辑器并粘贴以下策略(同样,根据需要替换账户 ID 和区域):
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ECRImageAccess",
            "Effect": "Allow",
            "Action": [
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": [
                "arn:aws:ecr:us-east-1:123456789012:repository/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:DescribeLogStreams",
                "logs:CreateLogGroup"
            ],
            "Resource": [
                "arn:aws:logs:us-east-1:123456789012:log-group:/aws/bedrock-agentcore/runtimes/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:DescribeLogGroups"
            ],
            "Resource": [
                "arn:aws:logs:us-east-1:123456789012:log-group:*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:us-east-1:123456789012:log-group:/aws/bedrock-agentcore/runtimes/*:log-stream:*"
            ]
        },
        {
            "Sid": "ECRTokenAccess",
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords",
                "xray:GetSamplingRules",
                "xray:GetSamplingTargets"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "cloudwatch:PutMetricData",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "cloudwatch:namespace": "bedrock-agentcore"
                }
            }
        },
        {
            "Sid": "GetAgentAccessToken",
            "Effect": "Allow",
            "Action": [
                "bedrock-agentcore:GetWorkloadAccessToken",
                "bedrock-agentcore:GetWorkloadAccessTokenForJWT",
                "bedrock-agentcore:GetWorkloadAccessTokenForUserId"
            ],
            "Resource": [
                "arn:aws:bedrock-agentcore:us-east-1:123456789012:workload-identity-directory/default",
                "arn:aws:bedrock-agentcore:us-east-1:123456789012:workload-identity-directory/default/workload-identity/agentName-*"
            ]
        },
        {
            "Sid": "BedrockModelInvocation",
            "Effect": "Allow",
            "Action": [
                "bedrock:InvokeModel",
                "bedrock:InvokeModelWithResponseStream"
            ],
            "Resource": [
                "arn:aws:bedrock:*::foundation-model/*",
                "arn:aws:bedrock:us-east-1:123456789012:*"
            ]
        }
    ]
}
  1. 点击 Next,为策略命名(例如 AgentCoreRuntimeExecutionPolicy),然后保存。

第三步 — 复制角色 ARN(这是 -er 所需的)

  1. 在 IAM 控制台中,打开您创建的角色并复制其 ARN
  2. 使用该 ARN 部署您的代理:
agentcore configure --entrypoint my_agent.py -er YOUR-ROLE_ARN

注意:my_agent.py 替换为您定义 AgentCore 设置的入口文件。

摘要

  • -er 需要 AgentCore Runtime execution role ARN
  • 一旦角色存在且具备适当的信任关系,并附加了 “AgentCore Runtime execution role” 策略,部署即可顺利进行。
Back to Blog

相关文章

阅读更多 »

SEO + RAO + Access = 潜在客户

SEO:被认知——SEO仍然重要;它不再主要是为了获取点击,而是更在于将你的网站定位为: - 事实来源 - 参考点 - …

人类、机器和Ratatouille 🐀

引言 对AI系统中系统复杂性的务实响应 长期以来,我们设计数字产品的方式就像许多人想象厨房的运作方式一样: