

# タグを使用して 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>

次のポリシー例では、値が `Development` である `Environment` タグがリソースにある限り、API Gateway リソースですべてのアクションの実行がユーザーに許可されます。この `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:*::*"
            ]
        }
    ]
}
```

------