本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon API Gateway 身分型政策範例
根據預設,IAM使用者和角色沒有建立或修改API閘道資源的許可。他們也無法使用 AWS Management Console AWS CLI、 或 執行任務 AWS SDKs。IAM 管理員必須建立IAM政策,以授予使用者和角色對所需指定資源執行特定API操作的許可。然後,管理員必須將這些政策連接到需要這些許可IAM的使用者或群組。
如需有關如何建立IAM政策的資訊,請參閱 IAM 使用者指南 中的在JSON索引標籤上建立政策。如需API閘道特定動作、資源和條件的相關資訊,請參閱 Amazon API Gateway Management V2 的動作、資源和條件金鑰和 Amazon API Gateway Management V2 的動作、資源和條件金鑰。
主題
政策最佳實務
身分型政策會決定某人是否可以在帳戶中建立、存取或刪除API閘道資源。這些動作可能會讓您的 AWS 帳戶產生費用。當您建立或編輯身分型政策時,請遵循下列準則及建議事項:
-
開始使用 AWS 受管政策並邁向最低權限許可 – 若要開始將許可授予您的使用者和工作負載,請使用 受AWS 管政策,將許可授予許多常見使用案例。它們可在您的 中使用 AWS 帳戶。建議您定義特定於使用案例 AWS 的客戶受管政策,以進一步減少許可。如需詳細資訊,請參閱 IAM 使用者指南 中的 AWS 受管政策或 AWS 任務功能的受管政策。
-
套用最低權限許可 – 當您使用IAM政策設定許可時, 只會授予執行任務所需的許可。為實現此目的,您可以定義在特定條件下可以對特定資源採取的動作,這也稱為最低權限許可。如需使用 IAM 套用許可的詳細資訊,請參閱 IAM 使用者指南 中的政策和許可IAM。
-
使用IAM政策中的條件來進一步限制存取:您可以將條件新增至政策,以限制對動作和資源的存取。例如,您可以撰寫政策條件來指定所有請求都必須使用 傳送SSL。如果透過特定 使用服務動作,例如 AWS 服務,您也可以使用 條件來授予其存取權 AWS CloudFormation。如需詳細資訊,請參閱 IAM 使用者指南 中的IAMJSON政策元素:條件。
-
使用 IAM Access Analyzer 驗證您的IAM政策,以確保安全且功能許可 – IAM Access Analyzer 會驗證新的和現有的政策,使政策符合IAM政策語言 (JSON) 和IAM最佳實務。IAM Access Analyzer 提供超過 100 個政策檢查和可操作的建議,協助您撰寫安全且實用的政策。如需詳細資訊,請參閱 IAM 使用者指南 中的使用 IAM Access Analyzer 驗證政策。
-
需要多因素身分驗證 (MFA) – 如果您有需要IAM使用者或 根使用者的案例 AWS 帳戶,請開啟 MFA 以獲得額外的安全性。若要在呼叫API操作MFA時要求 ,請將MFA條件新增至您的政策。如需詳細資訊,請參閱 IAM 使用者指南 中的使用 安全API存取MFA。
如需 中最佳實務的詳細資訊IAM,請參閱 IAM 使用者指南 中的安全最佳實務IAM。
允許使用者檢視他們自己的許可
此範例示範如何建立政策,允許使用者IAM檢視連接至其使用者身分的內嵌和受管政策。此政策包含在主控台上完成此動作或使用 AWS CLI 或 以程式設計方式完成此動作的許可 AWS API。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ViewOwnUserInfo", "Effect": "Allow", "Action": [ "iam:GetUserPolicy", "iam:ListGroupsForUser", "iam:ListAttachedUserPolicies", "iam:ListUserPolicies", "iam:GetUser" ], "Resource": ["arn:aws:iam::*:user/${aws:username}"] }, { "Sid": "NavigateInConsole", "Effect": "Allow", "Action": [ "iam:GetGroupPolicy", "iam:GetPolicyVersion", "iam:GetPolicy", "iam:ListAttachedGroupPolicies", "iam:ListGroupPolicies", "iam:ListPolicyVersions", "iam:ListPolicies", "iam:ListUsers" ], "Resource": "*" } ] }
簡易讀取許可
此範例政策提供使用者許可,以取得有關 HTTP或 的所有資源的資訊, WebSocket API以及 us-east-1 a123456789
AWS 區域中的 識別符。資源arn:aws:apigateway:
包括 的所有子資源,API例如授權方和部署。us-east-1
::/apis/a123456789/*
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "apigateway:GET" ], "Resource": [ "arn:aws:apigateway:
us-east-1
::/apis/a123456789/*" ] } ] }
僅建立 REQUEST或 JWT授權方
此範例政策允許使用者只APIs使用 REQUEST
或 JWT
授權方建立 ,包括透過匯入 。在 政策的 Resource
區段中, arn:aws:apigateway:us-east-1::/apis/??????????
要求資源最多有 10 個字元,不包括 的子資源API。此範例在 Condition
區段ForAllValues
中使用 ,因為使用者可以匯入 ,一次建立多個授權方API。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "OnlyAllowSomeAuthorizerTypes", "Effect": "Allow", "Action": [ "apigateway:PUT", "apigateway:POST", "apigateway:PATCH" ], "Resource": [ "arn:aws:apigateway:us-east-1::/apis", "arn:aws:apigateway:us-east-1::/apis/??????????", "arn:aws:apigateway:us-east-1::/apis/*/authorizers", "arn:aws:apigateway:us-east-1::/apis/*/authorizers/*" ], "Condition": { "ForAllValues:StringEqualsIfExists": { "apigateway:Request/AuthorizerType": [ "REQUEST", "JWT" ] } } } ] }
要求停用預設 execute-api
端點
此範例政策允許使用者建立、更新或匯入 API,其需求DisableExecuteApiEndpoint
為 true
。當 DisableExecuteApiEndpoint
為 時true
,用戶端無法使用預設execute-api
端點來叫用 API。
我們使用 BoolIfExists
條件來處理呼叫,更新API未填入DisableExecuteApiEndpoint
條件金鑰的 。當使用者嘗試建立或匯入 時API,一律會填入DisableExecuteApiEndpoint
條件索引鍵。
由於apis/*
資源也會擷取子資源,例如授權方或方法,因此我們明確將其範圍限定為只APIs使用Deny
陳述式。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DisableExecuteApiEndpoint", "Effect": "Allow", "Action": [ "apigateway:PATCH", "apigateway:POST", "apigateway:PUT" ], "Resource": [ "arn:aws:apigateway:us-east-1::/apis", "arn:aws:apigateway:us-east-1::/apis/*" ], "Condition": { "BoolIfExists": { "apigateway:Request/DisableExecuteApiEndpoint": true } } }, { "Sid": "ScopeDownToJustApis", "Effect": "Deny", "Action": [ "apigateway:PATCH", "apigateway:POST", "apigateway:PUT" ], "Resource": [ "arn:aws:apigateway:us-east-1::/apis/*/*" ] } ] }
允許使用者僅建立或更新私有 REST APIs
此範例政策使用條件索引鍵來要求使用者僅建立 PRIVATE
APIs,並防止可能APIPRIVATE
將 從 變更為其他類型的更新,例如 REGIONAL
。
我們使用 ForAllValues
來要求每個EndpointType
新增至 的 API都是 PRIVATE
。我們使用資源條件金鑰來允許對 進行任何更新,API只要其為 PRIVATE
。 只有在存在條件金鑰時才ForAllValues
適用。
我們使用非問候語相符器 (?
) 來明確比對 API IDs ,以防止授權方等非API資源被允許。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ScopePutToPrivateApis", "Effect": "Allow", "Action": [ "apigateway:PUT" ], "Resource": [ "arn:aws:apigateway:us-east-1::/restapis", "arn:aws:apigateway:us-east-1::/restapis/??????????" ], "Condition": { "ForAllValues:StringEquals": { "apigateway:Resource/EndpointType": "PRIVATE" } } }, { "Sid": "ScopeToPrivateApis", "Effect": "Allow", "Action": [ "apigateway:DELETE", "apigateway:PATCH", "apigateway:POST" ], "Resource": [ "arn:aws:apigateway:us-east-1::/restapis", "arn:aws:apigateway:us-east-1::/restapis/??????????" ], "Condition": { "ForAllValues:StringEquals": { "apigateway:Request/EndpointType": "PRIVATE", "apigateway:Resource/EndpointType": "PRIVATE" } } }, { "Sid": "AllowResourcePolicyUpdates", "Effect": "Allow", "Action": [ "apigateway:UpdateRestApiPolicy" ], "Resource": [ "arn:aws:apigateway:us-east-1::/restapis/*" ] } ] }
要求API路由具有授權
如果路由沒有授權,此政策會導致嘗試建立或更新路由 (包括透過匯入) 失敗。如果金鑰不存在,例如沒有建立或更新路由時,則 ForAnyValue
會評估為 False。我們使用 ForAnyValue
,因為可以透過匯入建立多個路由。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowUpdatesOnApisAndRoutes", "Effect": "Allow", "Action": [ "apigateway:POST", "apigateway:PATCH", "apigateway:PUT" ], "Resource": [ "arn:aws:apigateway:us-east-1::/apis", "arn:aws:apigateway:us-east-1::/apis/??????????", "arn:aws:apigateway:us-east-1::/apis/*/routes", "arn:aws:apigateway:us-east-1::/apis/*/routes/*" ] }, { "Sid": "DenyUnauthorizedRoutes", "Effect": "Deny", "Action": [ "apigateway:POST", "apigateway:PATCH", "apigateway:PUT" ], "Resource": [ "arn:aws:apigateway:us-east-1::/apis", "arn:aws:apigateway:us-east-1::/apis/*" ], "Condition": { "ForAnyValue:StringEqualsIgnoreCase": { "apigateway:Request/RouteAuthorizationType": "NONE" } } } ] }
防止使用者建立或更新VPC連結
此政策可防止使用者建立或更新VPC連結。VPC 連結可讓您將 Amazon 內的資源公開VPC給 外部的用戶端VPC。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyVPCLink", "Effect": "Deny", "Action": [ "apigateway:POST", "apigateway:PUT", "apigateway:PATCH" ], "Resource": [ "arn:aws:apigateway:
us-east-1
::/vpclinks", "arn:aws:apigateway:us-east-1
::/vpclinks/*" ] } ] }