View a markdown version of this page

将 OAuth 访问权限配置为 AWS MCP 服务器 - AWS Sign-In

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将 OAuth 访问权限配置为 AWS MCP 服务器

概述

AWS MCP 服务器支持通过以下方式进行 OAuth 授权。 AWS Sign-In通过 OAuth 授权,代理 AWS 可以使用您已经在和中使用的相同身份、权限和监管模型进行访问。 AWS 管理控制台 AWS CLI当您授权代理时,它可以代表您访问 AWS MCP 服务器。授权不会向代理授予额外 AWS 权限。

使用本指南配置 OAuth 对 AWS MCP 服务器的访问权限。它涵盖了支持的授权模式、所需的 IAM 权限以及如何管理和监控 OAuth 访问权限。

有关中的 OAuth 支持的更多信息 AWS Sign-In,请参阅。Sign-In 使用 OAuth 2.0

先决条件

在将代理连接到 AWS MCP 服务器之前,请确保:

  • 您的 IAM 身份具有 OAuth 授权所需的权限。

  • 您的代理支持模型上下文协议 (MCP)。

  • 您的代理支持 OAuth 2.1 授权。

通过附加AWS 托管策略来授予所需的权限:

aws iam attach-role-policy \ --role-name MyRole \ --policy-arn arn:aws:iam::aws:policy/AWSMCPSignInOAuthAccessPolicy

该管理策略授予:

  • signin:AuthorizeOAuth2Access

  • signin:CreateOAuth2Token

如果您以 AWS 账户 根用户身份进行身份验证,则不需要额外的 IAM 权限。

DCR 支持的重定向 URI

在 OAuth 授权过程中,代理可以注册 AWS Sign-In 并使用一个或多个经批准的重定向 URI。

OAuth 客户端 重定向 URI
本地主机 localhost, 127.0.0.1
Claude https://claude.ai/*
光标桌面 cursor://anysphere.cursor-mcp/oauth/callback
网游标 https://www.cursor.com/agents/mcp/oauth/callback
Visual Studio Code vscode://*
Visual Studio 代码(Web) https://vscode.dev/*
ChatGPT https://chatgpt.com/*
ChatGPT 连接器 https://chatgpt.com/connector_platform_oauth_redirect
重复 https://replit.com/
讨人喜欢 https://lovable.app/*
可爱的开发者 https://lovable.dev/*
Vercel v0 https://api.v0.dev/v1/mcp-servers/oauth/callback

将代理连接到 AWS MCP 服务器

配置 OAuth-compatible 代理的步骤因应用程序而异。有关支持的代理的说明,请参阅《AWS MCP 服务器指南》

一般的工作流程是:

  1. 配置 AWS MCP 服务器端点。

  2. 通过身份验证 AWS Sign-In 或以编程方式获取 OAuth 访问令牌。

  3. 批准授权请求(仅限交互流程)。

  4. 开始调用 AWS MCP 服务器提供的工具。

授权模型

AWS MCP 服务器支持提供的 AWS Sign-In授权模型。

交互式授权

交互式授权适用于在本地工作站上使用代理的开发人员。

当代理需要授权时:

  1. 代理将用户重定向到。 AWS Sign-In

  2. 用户使用其身份进行 AWS 身份验证。

  3. 用户查看并批准授权请求。

  4. AWS Sign-In 发放 OAuth 访问权限和刷新令牌。

  5. 代理代表用户访问 AWS MCP 服务器。

所需的 IAM 权限:

  • signin:AuthorizeOAuth2Access

  • signin:CreateOAuth2Token

Non-interactive 授权

Non-interactive 授权使用 OAuth 2.0 客户端凭证授权。它适用于已经拥有 AWS 凭据且无法执行基于浏览器的身份验证的代理和应用程序。

应用程序使用现有的 AWS 签名版本 4 (SigV4) 凭据进行身份验证,并通过 API 获取 OAuth 访问令牌。CreateOAuth2TokenWithIAM

与交互式流程不同,仅颁发访问令牌。当当前令牌到期时,应用程序会请求新的访问令牌。

所需的 IAM 权限:

  • signin:CreateOAuth2Token

以下示例显示如何使用获取访问令牌 AWS CLI:

aws signin create-oauth2-token-with-iam \ --grant-type client_credentials \ --resource aws-mcp.amazonaws.com \ --region us-east-1

OAuth 资源类型

AWS Sign-In 将 OAuth 授权目标和公共 OAuth 客户端表示为 IAM 资源。您可以在 IAM 策略中引用这些资源来授予或控制 OAuth 授权。

目前支持以下资源类型。

资源类型 ARN 格式 说明
AWS MCP 服务器 arn:aws:signin:region:account-id:service-principal/aws-mcp.amazonaws.com 代表 AWS MCP 服务器。使用此资源为访问 AWS MCP 服务器的应用程序授予或控制 OAuth 授权。
OAuth 公共客户端(同一设备) arn:aws:signin:region:account-id:oauth2/public-client/localhost 代表用于同设备授权的 AWS CLI 公共 OAuth 客户端。将此资源与浏览器一起使用aws login,并在同一设备上 AWS CLI 运行。
OAuth 公共客户端(跨设备) arn:aws:signin:region:account-id:oauth2/public-client/remote 代表用于跨设备授权的 AWS CLI 公共 OAuth 客户端。将此资源与一起使用aws login --remote,其中身份验证是在单独的设备上完成的。

代币生命周期

AWS Sign-In 管理为 AWS MCP 服务器发行的 OAuth 令牌的生命周期。

令牌 说明
交互式访问令牌 有效期长达一小时。在刷新令牌保持有效期间自动刷新。
Non-interactive 访问令牌 在一小时或剩余的 AWS 会话持续时间内有效。应用程序在到期后请求新令牌。
刷新令牌 仅为交互式授权颁发。允许应用程序获取新的访问令牌,而无需用户再次登录。刷新令牌是轮换的,一次性使用。

管理 OAuth 代币

AWS Sign-In 提供用于验证和管理 OAuth 授权的 API。

API 用途
IntrospectOAuth2Token 返回描述 OAuth 令牌的元数据。
RevokeOAuth2Token 撤消刷新令牌。

监控 OAuth 活动

OAuth-related 活动记录在 AWS CloudTrail。

CloudTrail 记录事件包括:

  • OAuth 授权请求

  • OAuth 代币发行

  • 代币反省

  • 代币撤销

CloudTrail 还记录 OAuth 客户端、重定向 URI、授权流程、 AWS MCP 服务器资源和关联 AWS Sign-In 会话,允许管理员将 AWS API 活动与原始 OAuth 授权相关联。

示例 CloudTrail 事件可用于:

  • AuthorizeOAuth2Access

  • CreateOAuth2Token

示例 — AuthorizeOAuth2Access 事件:

{ "eventVersion": "1.11", "userIdentity": { "type": "AssumedRole", "principalId": "AROAEXAMPLE:testuser", "arn": "arn:aws:sts::111111111111:assumed-role/Admin/testuser", "accountId": "111111111111", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROAEXAMPLE", "arn": "arn:aws:iam::111111111111:role/Admin", "accountId": "111111111111", "userName": "Admin" }, "attributes": { "creationDate": "2026-06-09T05:06:39Z", "mfaAuthenticated": "false" } } }, "eventTime": "2026-06-09T05:09:00Z", "eventSource": "signin.amazonaws.com", "eventName": "AuthorizeOAuth2Access", "awsRegion": "us-west-2", "sourceIPAddress": "192.0.2.1", "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) ...", "requestParameters": { "resource": "https://aws-mcp.us-west-2.api.aws/mcp", "redirect_uri": "http://127.0.0.1:60432/oauth/callback", "code_challenge_method": "S256", "client_id": "arn:aws:signin:us-west-2::external-client/dcr/b3f2c8a1-9d4e-4f7a-8c6b-2e1f5a3d9b7c" }, "responseElements": null, "additionalEventData": { "success": "true" }, "requestID": "4fb4ff7b-6yu7-9090-78i9-9c0088a65134", "eventID": "bb05b222-31ec-4237-b8e7-8eb26d4fd48b", "readOnly": true, "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111111111111", "eventCategory": "Management", "tlsDetails": { "tlsVersion": "TLSv1.3", "cipherSuite": "TLS_AES_128_GCM_SHA256", "clientProvidedHostHeader": "us-west-2.oauth.signin.aws" } }

示例 — CreateOAuth2Token 事件:

{ "eventVersion": "1.11", "userIdentity": { "type": "AssumedRole", "principalId": "AROAEXAMPLE:testuser", "arn": "arn:aws:sts::111111111111:assumed-role/Admin/testuser", "accountId": "111111111111", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROAEXAMPLE", "arn": "arn:aws:iam::111111111111:role/Admin", "accountId": "111111111111", "userName": "Admin" }, "attributes": { "creationDate": "2026-06-09T05:06:39Z", "mfaAuthenticated": "false" }, "signInSessionArn": "arn:aws:signin:us-west-2:111111111111:session/daff060f-7871-4ab6-92cd-a07bbdabe61a" } }, "eventTime": "2026-06-09T05:10:04Z", "eventSource": "signin.amazonaws.com", "eventName": "CreateOAuth2Token", "awsRegion": "us-west-2", "sourceIPAddress": "192.0.2.1", "userAgent": "curl/8.7.1", "requestParameters": { "resource": "https://aws-mcp.us-west-2.api.aws/mcp", "client_id": "arn:aws:signin:us-west-2::external-client/dcr/b3f2c8a1-9d4e-4f7a-8c6b-2e1f5a3d9b7c" }, "responseElements": null, "additionalEventData": { "signInSessionArn": "arn:aws:signin:us-west-2:111111111111:session/daff060f-7871-4ab6-92cd-a07bbdabe61a", "grant_type": "refresh_token", "success": "true" }, "requestID": "44d6d7ce-e4r5-4cbf-0909-bfb8a8295a76", "eventID": "f79cc63f-b383-4e3c-a1e5-97c7db1ab833", "readOnly": true, "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111111111111", "eventCategory": "Management", "tlsDetails": { "tlsVersion": "TLSv1.3", "cipherSuite": "TLS_AES_128_GCM_SHA256", "clientProvidedHostHeader": "us-west-2.oauth.signin.aws" } }

有关使用 OAuth 访问令牌向 MCP 服务器发出的呼叫的其他审计事件和日志记录详细信息,请参阅 AWS M AWS CP 服务器日志记录指南。 CloudTrail

问题排查

连接时权限被拒绝 AWS MCP 服务器

验证您的 IAM 身份是否具有 AWS MCP 服务器授权授予资源的signin:AuthorizeOAuth2Accesssignin:CreateOAuth2Token权限。

访问令牌已过期

交互式授权会自动刷新访问令牌,同时关联的刷新令牌仍然有效。如果刷新令牌已过期或已被撤销,请通过您的代理再次进行身份验证。

对于非交互式授权,您可以从令牌端点请求新的访问令牌。

目标资源无效

调用时CreateOAuth2TokenWithIAM,验证resource参数是否标识了支持的目标服务。对于 AWS MCP 服务器,使用 AWS MCP 服务器服务主体。

代理无法注册为 OAuth 客户端

只有经批准的代理才能通过动态客户机注册 (DCR) 进行注册。如果您正在开发 MCP-compatible 代理,请联系 AWS 支持人员。

OAuth 条件密钥政策未生效

验证条件密钥是否适用于正在评估的 IAM 操作。某些条件密钥仅受特定的 OAuth 操作支持。有关更多信息,请参阅 Sign-In 使用 OAuth 2.0

会话已撤销,但代理仍有访问权限

撤消刷新令牌会立即阻止发行新的访问令牌。现有访问令牌在过期(最多一小时)之前一直有效。

要立即进行控制,请使用aws:SignInSessionArn全局条件密钥应用 IAM 策略,拒绝与受影响登录会话相关的请求。