本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立API閘道資源策略並將其附加至 API
若要允許使用者API透過呼叫API執行服務來存取您的,您必須建立 API Gateway 資源原則,並將原則附加至API. 當您將原則附加至您的時API,它會將原則中的權限套用至中的方法API。如果您更新資源策略,則需要部署API.
必要條件
若要更新API閘道資源策略,您需要apigateway:UpdateRestApiPolicy
權限和apigateway:PATCH
權限。
對於邊緣最佳化或區域API,您可以在建立資源政策時或部署資源策略後附加至您API的資源策略。對於私人API,您無法在沒有資源策略的API情況下部署您的。如需詳細資訊,請參閱 API閘道RESTAPIs中的私人。
將資源策略附加到API閘道 API
下列程序說明如何將資源策略附加至API閘道API。
- AWS Management Console
-
如果先前API已在 API Gateway 主控台中部署,則需要重新部署它,資源策略才會生效。
- 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
\"}"'
- AWS CloudFormation
-
您可以使用建 AWS CloudFormation 立具有資源策略API的資源策略。下列範例會RESTAPI使用範例資源策略建立範例:根據來源 IP 位址或範圍拒絕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返回 {「消息」:「用戶:匿名無法執行:執行 API:在資源上調用:arn:aws:執行 API:我們東部 -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:/*"
]
},
...
}
您必須為您的每個方法使用AWS_IAM
授權API,否則API返回以前的錯誤消息。如需如何開啟方法AWS_IAM
授權的詳細指示,請參閱API閘道RESTAPIs中的方法。
我的資源策略未更新
如果您在建立之後更新資源策略,則需要在附加更新的策略之後部署以傳播變更。API API單獨更新或儲存原則不會變更API. 如需部署的詳細資訊API,請參閱RESTAPIs在API閘道中部署。
我的資源策略返回以下錯誤:無效的策略文件。請檢查原則語法,並確定主參與者有效。
若要疑難排解此錯誤,我們首先建議您檢查原則語法。如需詳細資訊,請參閱 Amazon API 閘道的存取政策語言概觀。我們也建議您檢查所有指定的主參與者都是有效的,而且尚未刪除。
此外,如果您位API於選擇加入的區域中,請確認資源策略中的所有帳號都已啟用 [地區]。