API閘道資源策略如何影響授權工作流 - Amazon API 网关

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

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點進行呼叫vpce-1a2b3c4d。在「預先驗證」評估期間,只有來自範例中指定VPC端點的呼叫才能向前移動並評估 Lambda 授權者。所有剩餘的呼叫都會遭到封鎖。

資源政策和 Lambda 授權者的授權流程。
{ "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驗證的授權流程。

以下是跨帳戶資源政策的範例。假設IAM策略包含 allow 效果,則此資源策略僅允許來自VPC其 VPC ID 的呼叫vpc-2f09a348。如需詳細資訊,請參閱表 B

{ "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 使用者集區使用的資源政策範例。

資源政策和 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 明確拒絕
拒絕 不允許也不拒絕 明確拒絕
拒絕 拒絕 明確拒絕