使用標籤來控制對 API Gateway REST API 資源的存取 - Amazon API 网关

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

使用標籤來控制對 API Gateway REST API 資源的存取

AWS Identity and Access Management 政策中的條件是您用來指定 API Gateway 資源權限的語法的一部分。如需有關指定 IAM 政策的詳細資訊,請參閱控制對RESTAPI具有IAM權限的訪問。在 API Gateway 中,資源可以擁有標籤,也有一些動作會包含標籤。在建立 IAM 政策時,可使用標記條件鍵來控制以下項目:

  • 可在 API Gateway 資源上執行動作的使用者 (根據資源已具有的標籤)。

  • 可在動作請求中傳遞的標籤。

  • 請求中是否可使用特定的標籤鍵。

使用屬性型存取控制的標籤,可達到比 API 層級控制更精確的控制,以及比資源型存取控制更動態的控制。您可以建立 IAM 政策,以根據請求中提供的標籤 (請求標籤) 或所操作資源上的標籤 (資源標籤),決定允許或不允許操作。一般而言,資源標籤適用於已存在的資源。請求標籤適用於當您建立新的資源時。

關於標籤條件索引鍵的完整語法和語義,請參閱 IAM 使用者指南中的使用標籤控制存取

以下範例顯示如何指定 API Gateway 使用者政策中的標籤條件。

根據資源標籤限制動作

以下範例政策會授與使用者在所有資源上執行所有動作的許可,只要這些資源不具有值為 prod 的標籤 Environment

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "apigateway:*", "Resource": "*" }, { "Effect": "Deny", "Action": [ "apigateway:*" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/Environment": "prod" } } } ] }

根據資源標籤允許動作

以下範例政策可讓使用者在 API 閘道資源上執行所有動作,只要這些資源具有值為 Development 的標籤 EnvironmentDeny 陳述式可防止使用者變更 Environment 標籤的值。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ConditionallyAllow", "Effect": "Allow", "Action": [ "apigateway:*" ], "Resource": [ "arn:aws:apigateway:*::*" ], "Condition": { "StringEquals": { "aws:ResourceTag/Environment": "Development" } } }, { "Sid": "AllowTagging", "Effect": "Allow", "Action": [ "apigateway:*" ], "Resource": [ "arn:aws:apigateway:*::/tags/*" ] }, { "Sid": "DenyChangingTag", "Effect": "Deny", "Action": [ "apigateway:*" ], "Resource": [ "arn:aws:apigateway:*::/tags/*" ], "Condition": { "ForAnyValue:StringEquals": { "aws:TagKeys": "Environment" } } } ] }

拒絕標記操作

以下範例政策可讓使用者執行所有 API Gateway 的動作,變更標籤除外。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "apigateway:*" ], "Resource": [ "*" ], }, { "Effect": "Deny", "Action": [ "apigateway:*" ], "Resource": "arn:aws:apigateway:*::/tags*", } ] }

允許標記操作

下列範例政策可讓使用者取得所有 API Gateway 的資源,並且變更這些資源的標籤。若要取得資源的標籤,使用者必須具有該資源的 GET 許可。若要更新資源的標籤,使用者必須具有該資源的 PATCH 許可。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "apigateway:GET", "apigateway:PUT", "apigateway:POST", "apigateway:DELETE" ], "Resource": [ "arn:aws:apigateway:*::/tags/*", ] }, { "Effect": "Allow", "Action": [ "apigateway:GET", "apigateway:PATCH", ], "Resource": [ "arn:aws:apigateway:*::*", ] } ] }