

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用標籤來控制對 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 閘道資源上執行所有動作，只要這些資源具有值為 `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:*::*"
            ]
        }
    ]
}
```

------