使用标签控制对 API Gateway REST API 资源的访问 - Amazon API Gateway

使用标签控制对 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 的标签 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:*::*", ] } ] }