使用标签控制对 API Gateway 资源的访问
Amazon Identity and Access Management 策略中的条件是所需语法的一部分,您可以使用它们指定对 API Gateway 资源的权限。有关指定 IAM 策略的详情,请参阅使用 IAM 权限控制对 API 的访问。在 API Gateway 中,资源可以具有标签,而且某些操作可以包括标签。在创建 IAM 策略时,您可以使用标签条件键来控制:
-
哪些用户可以基于资源已有的标签对 API Gateway 资源执行操作。
-
哪些标签可以在操作的请求中传递。
-
是否特定标签键可在请求中使用。
通过将标签用于基于属性的访问控制,可以实现比 API 级别控制更精细的控制以及比基于资源的访问控制更动态的控制。可以创建 IAM 策略,以允许或拒绝根据请求中提供的标签(请求标签)或正在操作的资源的标签(资源标签)执行操作。一般而言,资源标签用于已经存在的资源。请求标签适用于您创建新资源时。
有关标签条件键的完整请求和语义,请参阅 IAM 用户指南中的使用标签控制访问。
以下示例演示如何为 API Gateway 用户指定策略中的标签条件。
示例 1:基于资源标签限制操作
以下示例策略向用户授予对所有资源执行 GET
操作的权限。此外,如果某个资源具有名为 iamrole
且值为 readWrite
的标签,该策略将向用户授予对资源执行所有操作的权限。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "apigateway:GET", "Resource": "*" }, { "Effect": "Allow", "Action": "apigateway:*", "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/iamrole": "readWrite" } } } ] }
示例 2:基于请求中的标签限制操作
以下示例策略指定:
-
当用户创建新阶段时,创建阶段的请求必须包含名为
stage
的标签。 -
stage
标记的值必须为beta
、gamma
或prod
。否则,创建阶段的请求将被拒绝。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "apigateway:*" ], "Resource": [ "*" ] }, { "Effect": "Deny", "Action": "apigateway:POST", "Resource": "arn:aws:apigateway:*::/restapis/*/stages", "Condition": { "Null": { "aws:RequestTag/stage": "true" } } }, { "Effect": "Deny", "Action": "apigateway:POST", "Resource": "arn:aws:apigateway:*::/restapis/*/stages", "Condition": { "StringNotEquals": { "aws:RequestTag/stage": [ "beta", "gamma", "prod" ] } } } ] }
示例 3:基于资源标签拒绝操作
以下示例策略允许用户在默认情况下针对 API Gateway 资源执行所有操作。如果资源具有名为 stage
且值为 prod
的标签,则会拒绝用户对此资源执行修改(PATCH
、PUT
、POST
, DELETE
)的权限。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "apigateway:*", "Resource": "*" }, { "Effect": "Deny", "Action": [ "apigateway:PATCH", "apigateway:PUT", "apigateway:POST", "apigateway:DELETE" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/stage": "prod" } } } ] }
示例 4:基于资源标签允许操作
以下示例策略允许用户在默认情况下针对所有 API Gateway 资源执行所有操作。如果资源具有名为 environment
(其值为 prod
)的标签,则不允许用户对资源执行任何操作。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "apigateway:*", "Resource": "*" }, { "Effect": "Deny", "Action": [ "apigateway:*" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/environment": "prod" } } } ] }
示例 5:基于资源标签键允许操作
以下示例策略允许用户在默认情况下针对所有 API Gateway 资源执行所有操作。如果资源具有名为 prod
且具有任意值(包括空字符串)的标签,则不允许用户执行修改资源的操作。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "apigateway:*", "Resource": "*" }, { "Effect": "Deny", "Action": [ "apigateway:PATCH", "apigateway:PUT", "apigateway:POST", "apigateway:DELETE" ], "Resource": "*", "Condition": { "Null": { "aws:ResourceTag/prod": "false" } } } ] }