本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 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-nameMyRole\ --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 服务器指南》。
一般的工作流程是:
-
配置 AWS MCP 服务器端点。
-
通过身份验证 AWS Sign-In 或以编程方式获取 OAuth 访问令牌。
-
批准授权请求(仅限交互流程)。
-
开始调用 AWS MCP 服务器提供的工具。
授权模型
AWS MCP 服务器支持提供的 AWS Sign-In授权模型。
交互式授权
交互式授权适用于在本地工作站上使用代理的开发人员。
当代理需要授权时:
-
代理将用户重定向到。 AWS Sign-In
-
用户使用其身份进行 AWS 身份验证。
-
用户查看并批准授权请求。
-
AWS Sign-In 发放 OAuth 访问权限和刷新令牌。
-
代理代表用户访问 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: |
代表 AWS MCP 服务器。使用此资源为访问 AWS MCP 服务器的应用程序授予或控制 OAuth 授权。 |
| OAuth 公共客户端(同一设备) | arn:aws:signin: |
代表用于同设备授权的 AWS CLI 公共 OAuth 客户端。将此资源与浏览器一起使用aws login,并在同一设备上 AWS CLI 运行。 |
| OAuth 公共客户端(跨设备) | arn:aws:signin: |
代表用于跨设备授权的 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:AuthorizeOAuth2Access和signin:CreateOAuth2Token权限。
访问令牌已过期
交互式授权会自动刷新访问令牌,同时关联的刷新令牌仍然有效。如果刷新令牌已过期或已被撤销,请通过您的代理再次进行身份验证。
对于非交互式授权,您可以从令牌端点请求新的访问令牌。
目标资源无效
调用时CreateOAuth2TokenWithIAM,验证resource参数是否标识了支持的目标服务。对于 AWS
MCP 服务器,使用 AWS MCP 服务器服务主体。
代理无法注册为 OAuth 客户端
只有经批准的代理才能通过动态客户机注册 (DCR) 进行注册。如果您正在开发 MCP-compatible 代理,请联系 AWS 支持人员。
OAuth 条件密钥政策未生效
验证条件密钥是否适用于正在评估的 IAM 操作。某些条件密钥仅受特定的 OAuth 操作支持。有关更多信息,请参阅 Sign-In 使用 OAuth 2.0。
会话已撤销,但代理仍有访问权限
撤消刷新令牌会立即阻止发行新的访问令牌。现有访问令牌在过期(最多一小时)之前一直有效。
要立即进行控制,请使用aws:SignInSessionArn全局条件密钥应用 IAM 策略,拒绝与受影响登录会话相关的请求。