创建 API Gateway 资源策略并将其附加到 API
要允许用户通过调用 API 执行服务访问您的 API,您必须创建 API Gateway 资源策略,并将该策略附加到 API。当您将策略附加到 API 时,它会将该策略中的权限应用于 API 中的方法。如果您更新资源策略,您将需要部署 API。
先决条件
要更新 API Gateway 资源策略,您将需要 apigateway:UpdateRestApiPolicy
权限和 apigateway:PATCH
权限。
对于边缘优化的 API 或区域 API,您可以在创建 API 时或者在部署 API 后,将资源策略附加到该 API。对于私有 API,如果没有资源策略,就无法部署 API。有关更多信息,请参阅 API Gateway 中的私有 REST API。
将资源策略附加到 API Gateway API
以下过程说明如何将资源策略附加到 API Gateway API。
- AWS Management Console
-
如果先前已在 API Gateway 控制台中部署了 API,则需要重新进行部署以使资源策略生效。
- AWS CLI
-
要使用 AWS CLI 创建新的 API 并向其附加资源策略,请按以下所示调用 create-rest-api 命令:
aws apigateway create-rest-api \
--name "api-name
" \
--policy "{\"jsonEscapedPolicyDocument
\"}"
要使用 AWS CLI 将资源策略附加到现有 API,请按以下所示调用 update-rest-api 命令:
aws apigateway update-rest-api \
--rest-api-id api-id
\
--patch-operations op=replace,path=/policy,value='"{\"jsonEscapedPolicyDocument
\"}"'
也可以将资源策略作为单独的 policy.json
文件附加,并将其包含在 create-rest-api 命令中。以下示例 create-rest-api 创建一个新的 API:
aws apigateway create-rest-api \
--name "api-name
" \
--policy file://policy.json
policy.json
是一项 API Gateway 资源策略,例如示例:基于源 IP 地址或范围拒绝 API 流量。
- AWS CloudFormation
-
您可以使用 AWS CloudFormation 通过资源策略创建 API。以下示例使用示例资源策略示例:基于源 IP 地址或范围拒绝 API 流量创建 REST API。
AWSTemplateFormatVersion: 2010-09-09
Resources:
Api:
Type: 'AWS::ApiGateway::RestApi'
Properties:
Name: testapi
Policy:
Statement:
- Action: 'execute-api:Invoke'
Effect: Allow
Principal: '*'
Resource: 'execute-api/*'
- Action: 'execute-api:Invoke'
Effect: Deny
Principal: '*'
Resource: 'execute-api/*'
Condition:
IpAddress:
'aws:SourceIp': ["192.0.2.0/24", "198.51.100.0/24" ]
Version: 2012-10-17
Resource:
Type: 'AWS::ApiGateway::Resource'
Properties:
RestApiId: !Ref Api
ParentId: !GetAtt Api.RootResourceId
PathPart: 'helloworld'
MethodGet:
Type: 'AWS::ApiGateway::Method'
Properties:
RestApiId: !Ref Api
ResourceId: !Ref Resource
HttpMethod: GET
ApiKeyRequired: false
AuthorizationType: NONE
Integration:
Type: MOCK
ApiDeployment:
Type: 'AWS::ApiGateway::Deployment'
DependsOn:
- MethodGet
Properties:
RestApiId: !Ref Api
StageName: test
排除资源策略故障
以下故障排除指南可能有助于解决资源策略问题。
我的 API 返回 {"Message":"User: anonymous is not authorized to perform: execute-api:Invoke on resource: arn:aws:execute-api:us-east-1:********/****/****/"}
在资源策略中,如果您将主体设置为 AWS 主体,如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
""Principal": {
"AWS": [
"arn:aws:iam::account-id:role/developer",
"arn:aws:iam::account-id:role/Admin"
]
},
"Action": "execute-api:Invoke",
"Resource": [
"execute-api:/*"
]
},
...
}
您必须对 API 中的每个方法使用 AWS_IAM
授权,否则 API 会返回之前的错误消息。有关如何为方法开启 AWS_IAM
授权的更多说明,请参阅 API Gateway 中用于 REST API 的方法。
我的资源策略未更新
如果在创建 API 后更新资源策略,您将需要附加更新的策略,然后部署 API 以传播更改。单独更新或保存策略不会更改 API 的运行时行为。有关部署 API 的更多信息,请参阅在 API Gateway 中部署 REST API。。
我的资源策略返回以下错误:策略文档无效。请检查策略语法并确保主体有效。
要纠正此错误,我们首先建议您检查策略语法。有关更多信息,请参阅 Amazon API Gateway 的访问策略语言概述。我们还建议您检查指定的所有主体是否有效且未被删除。
此外,如果您的 API 位于某个选择加入的区域,请确认资源政策中的所有账户都启用了该区域。