Amazon API Gateway
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

控制对 API 的跨账户访问

您可以通过创建 IAM 权限策略管理对 API 的访问,控制谁可以或谁不能创建、更新、部署、查看或删除 API 实体。将策略附加到代表用户的 IAM 用户、包含用户的 IAM 组,或者是用户担任的 IAM 角色。

在您为 API 创建的 IAM 策略中,可以使用 Condition 元素仅允许对特定 Lambda 集成或授权方的访问。

Condition 块使用布尔值条件运算符使策略中的条件与请求中的值相匹配。StringXxx 条件运算符将同时适用于 AWS 集成 (值应为 Lambda 函数 ARN) 和 Http 集成 (值应为 Http URI)。支持以下 StringXxx 条件运算符:StringEqualsStringNotEqualsStringEqualsIgnoreCaseStringNotEqualsIgnoreCaseStringLikeStringNotLike。有关更多信息,请参阅《IAM 用户指南》中的字符串条件运算符

跨账户 Lambda 授权方的 IAM 策略

以下是用于控制跨账户 Lambda 授权方函数的 IAM 策略的一个示例:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "apigateway:POST" ], "Resource": [ "arn:aws:apigateway:[region]::/restapis/restapi_id/authorizers" ], //Create Authorizer operation is allowed only with the following Lambda function "Condition": { "StringEquals": { "apigateway:AuthorizerUri": "arn:aws:apigateway:region:lambda:path/2015-03-31/functions/arn:aws:lambda:region:123456789012:function:example/invocations" } } } ] }

跨账户 Lambda 集成的 IAM 策略

使用跨账户集成时,如果希望限制对某些特定资源(如特定 Lambda 函数的 put-integration)的操作,可以向策略添加 Condition 元素,以指定受影响的资源(Lambda 函数)。

以下是用于控制跨账户 Lambda 集成函数的 IAM 策略的一个示例:

要授予另一个 AWS 账户调用 integration:putput-integration 以在 API 中设置 Lambda 集成的权限,您可以在 IAM 策略中包含以下语句。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "apigateway:PUT" ], "Resource": [ "arn:aws:apigateway:api-region::/restApis/api-id/resources/resource-id/methods/GET/integration" ], //PutIntegration is only valid with the following Lambda function "Condition": { "StringEquals": { "apigateway:IntegrationUri": "arn:aws:lambda:region:account-id:function:lambda-function-name" } } } ] }

允许另一个账户管理导入 OpenAPI 文件时使用的 Lambda 函数

要授予另一个 AWS 账户调用 restapi:importimport-rest-api 以导入 OpenAPI 文件的权限,您可以在 IAM 策略中包含以下语句。

在下面的 Condition 语句中,字符串 "lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:account-id:function:lambda-function-name" 是 Lambda 函数的完整 ARN。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "apigateway:POST" ], "Resource": "arn:aws:apigateway:*::/restapis", "Condition": { "StringLike": { "apigateway:IntegrationUri": [ "arn:aws:apigateway:apigateway-region:lambda:path/2015-03-31/functions/arn:aws:lambda:lambda-region:account-id:function:lambda-function-name/invocations" ] } } }, { "Effect": "Allow", "Action": [ "apigateway:POST" ], "Resource": "arn:aws:apigateway:*::/restapis", "Condition": { "StringLike": { "apigateway:AuthorizerUri": [ "arn:aws:apigateway:apigateway-region:lambda:path/2015-03-31/functions/arn:aws:lambda:lambda-region:account-id:function:lambda-function-name/invocations" ] } } } ] }