本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
API閘道資源策略如何影響授權工作流
APIGateway 評估附加至您的資源策略時API,結果會受到您為的驗證類型所定義的驗證類型的影響API,如以下各節中的流程圖所示。
API僅限閘道資源策略
在此工作流程中,API閘道資源策略已附加至API,但未為API. 評估政策涉及根據呼叫者的傳入條件來尋求明確允許。隱含拒絕或任何明確拒絕會導致拒絕呼叫者。
以下是這種資源政策的範例。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:
region
:account-id
:api-id
/", "Condition": { "IpAddress": { "aws:SourceIp": ["192.0.2.0/24
", "198.51.100.0/24
" ] } } } ] }
Lambda 授權方和資源政策
在此工作流程中,除了資源政策之外,還會API設定 Lambda 授權者。資源政策將以兩個階段評估。在呼叫 Lambda 授權者之前,API閘道會先評估原則,並檢查是否有任何明確拒絕。若有找到,會立即拒絕呼叫者存取。否則,會呼叫 Lambda 授權方,而它將會傳回政策文件,並與資源政策一起評估。結果是根據表 A 決定的。
下列範例資源策略僅允許從端點 ID 為的VPC端VPC點進行呼叫
。在「預先驗證」評估期間,只有來自範例中指定VPC端點的呼叫才能向前移動並評估 Lambda 授權者。所有剩餘的呼叫都會遭到封鎖。vpce-1a2b3c4d
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke", "Resource": [ "arn:aws:execute-api:
region
:account-id
:api-id
/" ], "Condition" : { "StringNotEquals": { "aws:SourceVpce": "vpce-1a2b3c4d
" } } } ] }
IAM 身分驗證和資源政策
在此工作流程中,您可以設定資源策略以外的IAM驗證。API在您透過IAM服務驗證使用者之後,API會評估附加至使用者的策略和資源策略。結果根據呼叫者與所有者是在相同 AWS 帳戶 還是獨立的 AWS 帳戶而API有所不同。
如果呼叫者和API擁有者來自不同的帳戶,則原IAM則和資源原則都明確允許呼叫者繼續。如需詳細資訊,請參閱表 B。
不過,如果呼叫者和API擁有者是相同的 AWS 帳戶,則IAM使用者原則或資源原則必須明確允許呼叫者繼續。如需詳細資訊,請參閱表 A。
以下是跨帳戶資源政策的範例。假設IAM策略包含 allow 效果,則此資源策略僅允許來自VPC其 VPC ID 的呼叫
。如需詳細資訊,請參閱表 B。vpc-2f09a348
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": [ "arn:aws:execute-api:region:
account-id
:api-id
/" ], "Condition" : { "StringEquals": { "aws:SourceVpc": "vpc-2f09a348
" } } } ] }
Amazon Cognito 身分驗證和資源政策
在此工作流程中,除了資源政策之外,還會針對的設定 Amazon Cognito 使用者集區。APIAPI閘道首先嘗試透過 Amazon Cognito 驗證呼叫者。這通常是透過呼叫者所提供的JWT權杖來執行。如果身分驗證成功,則會獨立評估資源政策,並需要明確允許。拒絕或既不允許也不拒絕會產生拒絕。以下是可搭配 Amazon Cognito 使用者集區使用的資源政策範例。
以下是資源政策的範例IPs,假設 Amazon Cognito 身份驗證令牌包含允許,該資源政策僅允許來自指定來源的呼叫。如需詳細資訊,請參閱表 B。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:
region
:account-id
:api-id
/", "Condition": { "IpAddress": { "aws:SourceIp": ["192.0.2.0/24
", "198.51.100.0/24
" ] } } } ] }
政策評估結果表
表 A 列出存取閘道由IAM原則或 Lambda 授權者和API閘道API資源政策所控制時所產生的行為,這兩項政策皆相同 AWS 帳戶。API
IAM政策 (或 Lambda 授權者) |
API閘道資源策略 |
產生的行為 |
---|---|---|
Allow | Allow | Allow |
Allow | 不允許也不拒絕 | Allow |
Allow | 拒絕 | 明確拒絕 |
不允許也不拒絕 | Allow | Allow |
不允許也不拒絕 | 不允許也不拒絕 | 隱含拒絕 |
不允許也不拒絕 | 拒絕 | 明確拒絕 |
拒絕 | Allow | 明確拒絕 |
拒絕 | 不允許也不拒絕 | 明確拒絕 |
拒絕 | 拒絕 | 明確拒絕 |
表 B 列出存取API閘道API由IAM政策或 Amazon Cognito 使用者集區授權者和API閘道資源政策控制時產生的行為,這些策略不同。 AWS 帳戶如果其中一個無訊息 (不允許也不拒絕),則會拒絕跨帳戶存取。這是因為跨帳戶存取要求資源政策和政IAM策或 Amazon Cognito 使用者集區授權者都明確授予存取權。
IAM政策 (或 Amazon Cognito 使用者集區授權者) |
API閘道資源策略 |
產生的行為 |
---|---|---|
Allow | Allow | Allow |
Allow | 不允許也不拒絕 | 隱含拒絕 |
Allow | 拒絕 | 明確拒絕 |
不允許也不拒絕 | Allow | 隱含拒絕 |
不允許也不拒絕 | 不允許也不拒絕 | 隱含拒絕 |
不允許也不拒絕 | 拒絕 | 明確拒絕 |
拒絕 | Allow | 明確拒絕 |
拒絕 | 不允許也不拒絕 | 明確拒絕 |
拒絕 | 拒絕 | 明確拒絕 |