使用标签控制对 API Gateway REST API 资源的访问
AWS Identity and Access Management 策略中的条件是所需语法的一部分,您可以使用它们指定对 API Gateway 资源的权限。有关指定 IAM 策略的详情,请参阅使用 IAM 权限控制对 REST API 的访问。在 API Gateway 中,资源可以具有标签,而且某些操作可以包括标签。在创建 IAM 策略时,您可以使用标签条件键来控制:
通过将标签用于基于属性的访问控制,可以实现比 API 级别控制更精细的控制以及比基于资源的访问控制更动态的控制。可以创建 IAM 策略,以允许或拒绝根据请求中提供的标签(请求标签)或正在操作的资源的标签(资源标签)执行操作。一般而言,资源标签用于已经存在的资源。请求标签适用于您创建新资源时。
有关标签条件键的完整请求和语义,请参阅 IAM 用户指南中的使用标签控制访问。
以下示例演示如何为 API Gateway 用户指定策略中的标签条件。
基于资源标签限制操作
以下示例策略将向用户授予对所有资源执行所有操作的权限,前提是这些资源不具有值为 prod
的标签 Environment
。
- JSON
-
-
{
"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
标签的值。
- JSON
-
-
{
"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 操作,更改标签除外。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"apigateway:*"
],
"Resource": [
"*"
]
},
{
"Effect": "Deny",
"Action": [
"apigateway:*"
],
"Resource": "arn:aws:apigateway:*::/tags*"
}
]
}
允许标记操作
以下示例策略允许用户获取所有 API Gateway 资源并更改这些资源的标签。要获取资源的标签,用户必须拥有该资源的 GET
权限。要更新资源的标签,用户必须拥有该资源的 PATCH
权限。
- JSON
-
-
{
"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:*::*"
]
}
]
}