使用标签控制对 API Gateway REST API 资源的访问
AWS Identity and Access Management 策略中的条件是所需语法的一部分,您可以使用它们指定对 API Gateway 资源的权限。有关指定 IAM 策略的详情,请参阅使用 IAM 权限控制对 REST API 的访问。在 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 Gateway 资源执行所有操作,前提是这些资源具有值为 Development
的标签 Environment
。Deny
语句防止用户更改 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:*::*", ] } ] }