

# 使用标签控制对 API Gateway REST API 资源的访问
<a name="apigateway-tagging-iam-policy"></a>

AWS Identity and Access Management 策略中的条件是所需语法的一部分，您可以使用它们指定对 API Gateway 资源的权限。有关指定 IAM 策略的详情，请参阅[使用 IAM 权限控制对 REST API 的访问](permissions.md)。在 API Gateway 中，资源可以具有标签，而且某些操作可以包括标签。在创建 IAM 策略时，您可以使用标签条件键来控制：
+ 哪些用户可以基于资源已有的标签对 API Gateway 资源执行操作。
+ 哪些标签可以在操作的请求中传递。
+ 特定的标签键是否能在请求中使用。

通过将标签用于基于属性的访问控制，可以实现比 API 级别控制更精细的控制以及比基于资源的访问控制更动态的控制。可以创建 IAM 策略，以允许或拒绝根据请求中提供的标签（请求标签）或正在操作的资源的标签（资源标签）执行操作。一般而言，资源标签用于已经存在的资源。请求标签适用于您创建新资源时。

有关标签条件键的完整请求和语义，请参阅 *IAM 用户指南*中的[使用标签控制访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)。

以下示例演示如何为 API Gateway 用户指定策略中的标签条件。

## 基于资源标签限制操作
<a name="apigateway-tagging-iam-policy-example-1"></a>

以下示例策略将向用户授予对所有资源执行所有操作的权限，前提是这些资源不具有值为 `prod` 的标签 `Environment`。

------
#### [ JSON ]

****  

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

------

## 基于资源标签允许操作
<a name="apigateway-tagging-iam-policy-example-3"></a>

以下示例策略允许用户针对 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"
        }
      }
    }
  ]
}
```

------

## 拒绝标记操作
<a name="deny-tagging"></a>

以下示例策略允许用户执行所有 API Gateway 操作，更改标签除外。

------
#### [ JSON ]

****  

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

------

## 允许标记操作
<a name="allow-tagging"></a>

以下示例策略允许用户获取所有 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:*::*"
            ]
        }
    ]
}
```

------