

# API Gateway リソースポリシーを使用して REST API へのアクセスを制御する
API Gateway リソースポリシーの使用

Amazon API Gateway の*リソースポリシー*は、JSON ポリシードキュメントです。指定されたプリンシパル (通常、IAM ロールまたはグループ) で API を呼び出せるかどうかにかかわらず、制御する API にアタッチします。API Gateway リソースポリシーを使用すると、API を以下から安全に呼び出すことができます。
+ 指定された AWS アカウントのユーザー
+ 指定されたソース IP アドレス範囲または CIDR ブロック
+ 指定された Virtual Private Cloud (VPC) または VPC エンドポイント (任意のアカウント)

リソースポリシーを API Gateway の API エンドポイントタイプにアタッチするには、AWS マネジメントコンソール、AWS CLI、または AWS SDK を使用できます。[プライベート API ](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-private-apis.html)の場合は、リソースポリシーを VPC エンドポイントポリシーとともに使用して、どのプリンシパルがどのリソースやアクションにアクセスできるかを制御することができます。詳細については、「[API Gateway でプライベート API 用の VPC エンドポイントポリシーを使用する](apigateway-vpc-endpoint-policies.md)」を参照してください。

 API Gateway リソースポリシーは、IAM アイデンティティベースのポリシーとは異なります。IAM アイデンティティベースのポリシーは、IAM ユーザー、グループ、またはロールにアタッチされ、実行できるアクションとリソースを定義します。API Gateway リソースポリシーはリソースにアタッチされます。API Gateway リソースポリシーは、IAM ポリシーと組み合わせて使用できます。詳細については、「[アイデンティティベースのポリシーおよびリソースベースのポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)」を参照してください。

**Topics**
+ [

# Amazon API Gateway のアクセスポリシー言語の概要
](apigateway-control-access-policy-language-overview.md)
+ [

# API Gateway リソースポリシーが認可ワークフローに与える影響
](apigateway-authorization-flow.md)
+ [

# API Gateway リソースポリシーの例
](apigateway-resource-policies-examples.md)
+ [

# API Gateway リソースポリシーを作成して API にアタッチする
](apigateway-resource-policies-create-attach.md)
+ [

# AWSAPI Gateway リソースポリシーで使用できる の条件キー
](apigateway-resource-policies-aws-condition-keys.md)

# Amazon API Gateway のアクセスポリシー言語の概要


このページでは、Amazon API Gateway リソースポリシーで使用される基本的な要素について説明します。

リソースポリシーは、IAM ポリシーと同じ構文を使用して指定されます。ポリシー言語の詳細については、*IAM ユーザーガイド*の「[IAM ポリシーの概要](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)」と「[AWS Identity and Access Management ポリシーリファレンス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)」を参照してください。

指定されたリクエストを AWS のサービスが許可または拒否する方法については、「[リクエストの許可または拒否を決定する](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-denyallow)」を参照してください。

## アクセスポリシーの一般的なエレメント


基本的に、リソースポリシーには以下のエレメントが含まれます。
+ **リソース** – アクセス許可を許可または拒否できる Amazon API Gateway のリソースが API です。ポリシーでは、Amazon リソースネーム (ARN) を使用して、リソースを識別します。略式構文を使用することもできます。この構文はリソースポリシーの保存時に API Gateway によって完全な ARN に自動的に展開されます。詳細については、「[API Gateway リソースポリシーの例](apigateway-resource-policies-examples.md)」を参照してください。

  完全な `Resource` 要素の形式については、「[API Gateway で API を実行するためのアクセス許可のリソース形式](api-gateway-control-access-using-iam-policies-to-invoke-api.md#api-gateway-iam-policy-resource-format-for-executing-api)」を参照してください。
+ **アクション** – Amazon API Gateway により、リソースごとに一連のオペレーションがサポートされています。許可 (または拒否) するリソースのオペレーションは、アクションキーワードを使用して識別します。

  たとえば、`execute-api:Invoke` アクセス権限は、クライアントリクエスト時の API の呼び出しをユーザーに許可します。

  `Action` エレメントの形式については、「[API Gateway で API を実行するためのアクセス許可のアクション形式](api-gateway-control-access-using-iam-policies-to-invoke-api.md#api-gateway-iam-policy-action-format-for-executing-api)」を参照してください。
+ **エフェクト** – ユーザーが特定のアクションをリクエストする際のエフェクト – 値は `Allow` または `Deny` のいずれかになります。また、明示的にリソースへのアクセスを拒否すると、別のポリシーによってアクセスが許可されている場合でも、ユーザーはそのリソースにアクセスできなくなります。
**注記**  
「暗黙的な拒否」は、「デフォルトでは拒否」と同じ意味です。  
「暗黙的な拒否」は「明示的な拒否」とは異なります。詳細については、「[デフォルトによる拒否と明示的な拒否の違い](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#AccessPolicyLanguage_Interplay)」を参照してください。
+ **プリンシパル** – ステートメントのアクションやリソースへのアクセスが許可されているアカウントまたはユーザーを指します。リソースポリシーでは、プリンシパルは、このアクセス許可を受け取るユーザーまたはアカウントを指します。

以下のリソースポリシーの例は、前の一般的なポリシーのエレメントを示しています。このポリシーは、指定した*リージョン*で指定した *account-id* の API へのアクセスを、送信元 IP アドレスがアドレスブロック *123.4.5.6/24* にあるすべてのユーザーに許可します。このポリシーでは、ユーザーの送信元 IP がこの範囲外の場合、API へのアクセスはすべて拒否されます。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-east-1:111111111111:*"
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-east-1:111111111111:*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": "123.4.5.6/24"
                }
            }
        }
    ]
}
```

------

# API Gateway リソースポリシーが認可ワークフローに与える影響
リソースポリシーが認可ワークフローに与える影響

API にアタッチされたリソースポリシーを API Gateway が評価すると、以降のセクションのフローチャートに示すように、結果は API に対して定義した認証タイプによって影響を受けます。

**Topics**
+ [

## API Gateway リソースポリシーのみ
](#apigateway-authorization-flow-resource-policy-only)
+ [

## Lambda オーソライザーとリソースポリシー
](#apigateway-authorization-flow-lambda)
+ [

## IAM 認証とリソースポリシー
](#apigateway-authorization-flow-iam)
+ [

## Amazon Cognito 認証とリソースポリシー
](#apigateway-authorization-flow-cognito)
+ [

## ポリシー評価の結果のテーブル
](#apigateway-resource-policies-iam-policies-interaction)

## API Gateway リソースポリシーのみ


このワークフローでは、API Gateway リソースポリシーは API にアタッチされますが、認証タイプは API に対して定義されません。ポリシーの評価により、発信者のインバウンド条件に基づいて、明示的な許可の検索が呼び出されます。暗黙的な拒否または明示的な拒否により、発信者が拒否されます。

![\[リソースポリシーの承認フローのみ。\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/images/apigateway-auth-resource-policy-only.png)


以下に、このようなリソースポリシーの例を示します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-east-1:111111111111:api-id/",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": ["192.0.2.0/24", "198.51.100.0/24" ]
                }
            }
        }
    ]
}
```

------

## Lambda オーソライザーとリソースポリシー


このワークフローでは、Lambda オーソライザーはリソースポリシーに加えて API に対して設定されます。リソースポリシーは 2 つの段階で評価されます。Lambda オーソライザーを呼び出す前に、API Gateway はまずポリシーを評価し、明示的な拒否をチェックします。見つかった場合、呼び出し元は即座にアクセスを拒否されます。それ以外の場合、Lambda オーソライザーが呼び出され、[ポリシードキュメント](api-gateway-lambda-authorizer-output.md)を返します。これはリソースポリシーと一緒に評価されます。オーソライザーがキャッシュを使用する場合、API Gateway はキャッシュされたポリシードキュメントを返すことがあります。結果は、[[テーブル A]](#apigateway-resource-policies-iam-policies-interaction) に基づいて決定されます。

次のリソースポリシー例では、VPC エンドポイント ID が `vpce-1a2b3c4d` である VPC エンドポイントからのみ、呼び出しを許可します。認証前の評価中は、下例の VPC エンドポイントからの呼び出しのみが、Lambda オーソライザーを評価することを許可されます。残りの呼び出しはすべてブロックされます。この認可ワークフローは、プライベート API にカスタムドメイン名を使用する場合も同じです。

![\[リソースポリシーと Lambda オーソライザーの承認フロー。\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/images/apigateway-auth-lambda-resource-policy.png)


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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "arn:aws:execute-api:us-east-1:111111111111:api-id/"
            ],
            "Condition" : {
                "StringNotEquals": {
                    "aws:SourceVpce": "vpce-1a2b3c4d"
                }
            }
        }
    ]
}
```

------

## IAM 認証とリソースポリシー


このワークフローでは、リソースポリシーに加えて API に対して IAM 認証を設定します。IAM サービスを使用してユーザーを認証した後、API は、ユーザーにアタッチされたポリシーとリソースポリシーの両方を評価します。この結果は、発信者が API 所有者と同じ AWS アカウント にいるか、API 所有者とは別の AWS アカウント にいるかに応じて異なります。

呼び出し元と API 所有者が別のアカウントである場合、IAM ポリシーとリソースポリシーの両方により、呼び出し元は明示的に続行が許可されます 詳細については、[[テーブル B]](#apigateway-resource-policies-iam-policies-interaction) を参照してください。

ただし、呼び出し元および API 所有者が同じ AWS アカウント である場合、IAM ユーザーポリシーまたはリソースポリシーで、呼び出し元の続行を明示的に許可する必要があります 詳細については、[[テーブル A]](#apigateway-resource-policies-iam-policies-interaction) を参照してください。

![\[リソースポリシーと IAM 認証の認可フロー。\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/images/apigateway-auth-iam-resource-policy.png)


以下に、クロスアカウントリソースポリシーの例を示します。このリソースポリシーでは、IAM ポリシーに Allow Effect が含まれていることを想定し、VPC ID が `vpc-2f09a348` である VPC からの呼び出しのみが許可されます。詳細については、[[テーブル B]](#apigateway-resource-policies-iam-policies-interaction) を参照してください。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "arn:aws:execute-api:us-east-1:111111111111:api-id/"
            ],
            "Condition" : {
                "StringEquals": {
                    "aws:SourceVpc": "vpc-2f09a348"
                    }
            }
        }
    ]
}
```

------

## Amazon Cognito 認証とリソースポリシー


このワークフローでは、リソースポリシーに加えて、API 用に [Amazon Cognito ユーザープール](apigateway-integrate-with-cognito.md)が設定されます。API Gateway は、最初に Amazon Cognito を介して発信者の認証を試みます。これは通常、発信者から提供された [JWT トークン](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html)を介して実行されます。認証が成功した場合、リソースポリシーは個別に評価され、明示的な許可が必要です。拒否の場合は拒否になり、「許可も拒否もしない」でも拒否になります。Amazon Cognito ユーザープールと一緒に使用される可能性のあるリソースポリシーの例を以下に示します。

![\[リソースポリシーと Amazon Cognito オーソライザーの承認フロー。\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/images/apigateway-auth-cognito-resource-policy.png)


次の例では、指定されたソース IP からのみ呼び出しを許可するリソースポリシーの例を示します。Amazon Cognito 認証トークンには許可が含まれていると想定します 詳細については、[[テーブル B]](#apigateway-resource-policies-iam-policies-interaction) を参照してください。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-east-1:111111111111:api-id/",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": ["192.0.2.0/24", "198.51.100.0/24" ]
                }
            }
        }
    ]
}
```

------

## ポリシー評価の結果のテーブル


テーブル A に結果の動作が表示されるのは、API Gateway API へのアクセスが IAM ポリシーによって制御されているか、同じ AWS アカウント 内にある Lambda オーソライザーと API Gateway リソースポリシーによって制御されている場合です。


| **IAM ポリシー (または Lambda オーソライザー)** | **API Gateway リソースポリシー** | **結果として生じる動作** | 
| --- | --- | --- | 
| 許可 | 許可 | 許可 | 
| 許可 | 許可も拒否もしない | 許可 | 
| 許可 | 拒否 | 明示的な拒否 | 
| 許可も拒否もしない | 許可 | 許可 | 
| 許可も拒否もしない | 許可も拒否もしない | 暗黙的な拒否 | 
| 許可も拒否もしない | 拒否 | 明示的な拒否 | 
| 拒否 | 許可 | 明示的な拒否 | 
| 拒否 | 許可も拒否もしない | 明示的な拒否 | 
| 拒否 | 拒否 | 明示的な拒否 | 

テーブル B に結果の動作が表示されるのは、API Gateway API へのアクセスが IAM ポリシーによって制御されているか、異なる AWS アカウント 内にある Amazon Cognito ユーザープールオーソライザーと API Gateway リソースポリシーによって制御されている場合です。どちらかがサイレントである (許可でも拒否でもない) 場合、クロスアカウントアクセスは拒否されます。これは、クロスアカウントアクセスでは、リソースポリシーと IAM ポリシーの両方、または Amazon Cognito ユーザープールオーソライザーが明示的にアクセス権を付与する必要があるためです。


| **IAM ポリシー (または Amazon Cognito ユーザープールオーソライザー)** | **API Gateway リソースポリシー** | **結果として生じる動作** | 
| --- | --- | --- | 
| 許可 | 許可 | 許可 | 
| 許可 | 許可も拒否もしない | 暗黙的な拒否 | 
| 許可 | 拒否 | 明示的な拒否 | 
| 許可も拒否もしない | 許可 | 暗黙的な拒否 | 
| 許可も拒否もしない | 許可も拒否もしない | 暗黙的な拒否 | 
| 許可も拒否もしない | 拒否 | 明示的な拒否 | 
| 拒否 | 許可 | 明示的な拒否 | 
| 拒否 | 許可も拒否もしない | 明示的な拒否 | 
| 拒否 | 拒否 | 明示的な拒否 | 

# API Gateway リソースポリシーの例


このページでは、API Gateway リソースポリシーの一般的なユースケースの例をいくつか紹介します。

以下のポリシー例では、API リソースの指定に略式構文を使用しています。この略式構文では、完全な Amazon リソースネーム (ARN) を指定する代わりに、簡略化された方法を使用して API リソースを参照できます。API Gateway がポリシーを保存するとき、簡略化された構文を完全な ARN に変換します。たとえば、リソースポリシー `execute-api:/stage-name/GET/pets` でリソースを指定できます。API Gateway がリソースポリシーを保存する際に、リソースを `arn:aws:execute-api:us-east-2:123456789012:aabbccddee/stage-name/GET/pets` に変換します。API Gateway は、現在のリージョン、AWS アカウント ID、およびリソースポリシーが関連付けられている REST API の ID を使用して、完全な ARN を構築します。`execute-api:/*` を使用して、現在の API のすべてのステージ、メソッド、パスを表すことができます。アクセスポリシー言語の詳細については、「[Amazon API Gateway のアクセスポリシー言語の概要](apigateway-control-access-policy-language-overview.md)」を参照してください。

**Topics**
+ [

## 例: 別の AWS アカウントのロールによる API の使用を許可する
](#apigateway-resource-policies-cross-account-example)
+ [

## 例: 送信元の IP アドレスまたは IP アドレスの範囲に基づき、API トラフィックを拒否する
](#apigateway-resource-policies-source-ip-address-example)
+ [

## 例: プライベート API の使用時に、送信元 IP アドレスまたは範囲に基づいて API トラフィックを拒否する
](#apigateway-resource-policies-source-ip-address-vpc-example)
+ [

## 例: ソース VPC または VPC エンドポイントに基づいてプライベート API トラフィックを許可する
](#apigateway-resource-policies-source-vpc-example)

## 例: 別の AWS アカウントのロールによる API の使用を許可する


次のリソースポリシーの例は、[Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/create-signed-request.html) (SigV4) または [Signature Version 4a](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html#how-sigv4a-works) (SigV4a) プロトコルを使用して、1 つの AWS アカウントの API アクセス権を異なる AWS アカウントの 2 つのロールに付与します。具体的には、`account-id-2` によって識別される AWS アカウントのデベロッパーおよび管理者ロールでは、AWS アカウントの `pets` リソース (API) に対して `GET` アクションを実行する `execute-api:Invoke` アクションが許可されます。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:role/developer",
                    "arn:aws:iam::111122223333:role/Admin"
                ]
            },
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/stage/GET/pets"
            ]
        }
    ]
}
```

------

## 例: 送信元の IP アドレスまたは IP アドレスの範囲に基づき、API トラフィックを拒否する


以下のリソースポリシーの例は、指定された 2 つの送信元 IP アドレスブロックから API への受信トラフィックを拒否 (ブロック) します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/*"
            ]
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
               "execute-api:/*"
            ],
            "Condition" : {
                "IpAddress": {
                    "aws:SourceIp": ["192.0.2.0/24", "198.51.100.0/24" ]
                }
            }
        }
    ]
}
```

------

IAM ユーザーポリシーまたは API Gateway リソースポリシーを使用して API Gateway または API Gateway API へのアクセスを制御する場合、IPv6 アドレスの範囲が含まれるようにポリシーが更新されていることを確認します。IPv6 アドレスを処理するようにポリシーが更新されていない場合、デュアルスタックエンドポイントの使用が開始されると、API Gateway へのクライアントのアクセスが影響を受ける可能性があります。詳細については、「[IAM ポリシーでの IPv6 アドレスの使用](api-ref.md#api-reference-service-endpoints-dualstack-iam)」を参照してください。

## 例: プライベート API の使用時に、送信元 IP アドレスまたは範囲に基づいて API トラフィックを拒否する


次のリソースポリシーの例は、指定された 2 つの送信元 IP アドレスブロックからプライベート API への受信トラフィックを拒否 (ブロック) します。プライベート API を使用する場合、`execute-api` の VPC エンドポイントは元のソース IP アドレスを 書き換えます。`aws:VpcSourceIp` 条件は、元のリクエスタ IP アドレスに対してリクエストをフィルタリングします。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/*"
            ]
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
               "execute-api:/*"
            ],
            "Condition" : {
                "IpAddress": {
                    "aws:VpcSourceIp": ["192.0.2.0/24", "198.51.100.0/24"]
                }
            }
        }
    ]
}
```

------

## 例: ソース VPC または VPC エンドポイントに基づいてプライベート API トラフィックを許可する


次のリソースポリシーの例では、指定された Virtual Private Cloud (VPC) または VPC エンドポイントからのみ、プライベート API への受信トラフィックを許可します。

このリソースポリシーの例では、ソース VPC を指定します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/*"
            ]
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/*"
            ],
            "Condition" : {
                "StringNotEquals": {
                   "aws:SourceVpc": "vpc-1a2b3c4d"
                }
            }
        }
    ]
}
```

------

このリソースポリシーの例では、ソース VPC エンドポイントを指定します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/*"
            ]
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/*"
            ],
            "Condition" : {
                "StringNotEquals": {
                    "aws:SourceVpce": "vpce-1a2b3c4d"
                }
            }
        }
    ]
}
```

------

# API Gateway リソースポリシーを作成して API にアタッチする


API 実行サービスを呼び出して API にアクセスすることをユーザーに許可するには、API Gateway リソースポリシーを作成して API にアタッチする必要があります。ポリシーを API にアタッチすると、ポリシー内のアクセス許可が API のメソッドに適用されます。リソースポリシーを更新する場合は、API をデプロイする必要があります。

**Topics**
+ [

## 前提条件
](#apigateway-resource-policies-prerequisites)
+ [

## リソースポリシーを API Gateway API にアタッチする
](#apigateway-resource-policies-create-attach-procedure)
+ [

## リソースポリシーのトラブルシューティング
](#apigateway-resource-policies-troubleshoot)

## 前提条件


 API Gateway リソースポリシーを更新するには、`apigateway:UpdateRestApiPolicy` アクセス許可と `apigateway:PATCH` アクセス許可が必要です。

エッジ最適化 API またはリージョン API の場合、リソースポリシーを作成時またはデプロイ後に API にアタッチできます。プライベート API の場合、リソースポリシーなしで API をデプロイすることはできません。詳細については、「[API Gateway のプライベート REST API](apigateway-private-apis.md)」を参照してください。

## リソースポリシーを API Gateway API にアタッチする


次の手順は、リソースポリシーを API Gateway API にアタッチする方法を示しています。

------
#### [ AWS マネジメントコンソール ]

**リソースポリシーを API Gateway API にアタッチするには**

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway) で API Gateway コンソールにサインインします。

1. REST API を選択します。

1. 左のナビゲーションペインで、**[リソースポリシー]** を選択します。

1. [**Create policy**] (ポリシーの作成) を選択します。

1. (オプション) **[テンプレートを選択]** を選択してサンプルポリシーを生成します。

   ポリシーの例では、プレースホルダーは、二重波括弧 (`"{{placeholder}}"`) で囲まれています。各プレースホルダー (波括弧を含む) を必要な情報に置き換えます。

1. どのテンプレート例も使用しない場合は、リソースポリシーを入力します。

1. **[Save changes]** (変更の保存) をクリックします。

API が API Gateway コンソールで以前にデプロイ済みの場合、リソースポリシーを有効にするには再デプロイする必要があります。

------
#### [ AWS CLI ]

AWS CLI を使用して新しい API を作成し、それにリソースポリシーをアタッチするには、次の [create-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html) コマンドを使用します。

```
aws apigateway create-rest-api \
    --name "api-name" \
    --policy "{\"jsonEscapedPolicyDocument\"}"
```

AWS CLI を使用して既存の API にリソースポリシーをアタッチするには、次の [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html) コマンドを使用します。

```
aws apigateway update-rest-api \
    --rest-api-id api-id \
    --patch-operations op=replace,path=/policy,value='"{\"jsonEscapedPolicyDocument\"}"'
```

リソースポリシーを別の `policy.json` ファイルとしてアタッチし、[create-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html) コマンドに含めることもできます。次の [create-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html) コマンドは、リソースポリシーをアタッチした新しい API を作成します。

```
aws apigateway create-rest-api \
    --name "api-name" \
    --policy file://policy.json
```

`policy.json` は、API Gateway リソースポリシー ([例: 送信元の IP アドレスまたは IP アドレスの範囲に基づき、API トラフィックを拒否する](apigateway-resource-policies-examples.md#apigateway-resource-policies-source-ip-address-example) など) です。

------
#### [ AWS CloudFormation ]

CloudFormation を使用して、リソースポリシーを持つ API を作成できます。次の例では、サンプルリソースポリシー [例: 送信元の IP アドレスまたは IP アドレスの範囲に基づき、API トラフィックを拒否する](apigateway-resource-policies-examples.md#apigateway-resource-policies-source-ip-address-example) を使用して REST API を作成します。

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  Api:
    Type: 'AWS::ApiGateway::RestApi'
    Properties:
      Name: testapi
      Policy:
        Statement:
          - Action: 'execute-api:Invoke'
            Effect: Allow
            Principal: '*'
            Resource: 'execute-api:/*'
          - Action: 'execute-api:Invoke'
            Effect: Deny
            Principal: '*'
            Resource: 'execute-api:/*'
            Condition:
              IpAddress: 
                'aws:SourceIp': ["192.0.2.0/24", "198.51.100.0/24" ]
        Version: 2012-10-17		 	 	 
  Resource:
    Type: 'AWS::ApiGateway::Resource'
    Properties:
      RestApiId: !Ref Api
      ParentId: !GetAtt Api.RootResourceId
      PathPart: 'helloworld'
  MethodGet:
    Type: 'AWS::ApiGateway::Method'
    Properties:
      RestApiId: !Ref Api
      ResourceId: !Ref Resource
      HttpMethod: GET
      ApiKeyRequired: false
      AuthorizationType: NONE
      Integration:
        Type: MOCK
        RequestTemplates:
          application/json: '{"statusCode": 200}'
        IntegrationResponses:
          - StatusCode: 200
            ResponseTemplates:
              application/json: '{}'
      MethodResponses:
        - StatusCode: 200
          ResponseModels:
            application/json: 'Empty'
  ApiDeployment:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn:
      - MethodGet
    Properties:
      RestApiId: !Ref Api
      StageName: test
```

------

## リソースポリシーのトラブルシューティング


次のトラブルシューティングガイダンスは、リソースポリシーの問題を解決するのに役立ちます。

### API が \$1"Message":"User: anonymous is not authorized to perform: execute-api:Invoke on resource: arn:aws:execute-api:us-east-1:\$1\$1\$1\$1\$1\$1\$1\$1/\$1\$1\$1\$1/\$1\$1\$1\$1/"\$1 を返します


リソースポリシーで、プリンシパルを次のように AWS プリンシパルに設定する場合:

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111111111111:role/developer",
                    "arn:aws:iam::111111111111:role/Admin"
                ]
            },
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/stage/GET/pets"
            ]
        }
    ]
}
```

------

API のすべてのメソッドに `AWS_IAM` 認可を使用する必要があります。使用しない場合、API は前のエラーメッセージを返します。メソッドの `AWS_IAM` 認可を有効にする方法の詳細については、「[API Gateway の REST API のメソッド](how-to-method-settings.md)」を参照してください。

### リソースポリシーが更新されません


 API 作成後にリソースポリシーを更新する場合は、更新後のポリシーをアタッチしてから API をデプロイし、変更を伝達する必要があります。ポリシーのみ、更新または保存した場合、API のランタイム動作が変更されることはありません。API のデプロイの詳細については、「[API Gateway で REST API をデプロイする](how-to-deploy-api.md)」を参照してください。

### リソースポリシーから次のエラーが返されます: 無効なポリシードキュメント。ポリシー構文を確認し、プリンシパルが有効であることを確認してください。


このエラーのトラブルシューティングを行うには、まずポリシー構文を確認することをお勧めします。詳細については、「[Amazon API Gateway のアクセスポリシー言語の概要](apigateway-control-access-policy-language-overview.md)」を参照してください。また、指定したすべてのプリンシパルが有効であり、削除されていないことを確認することをお勧めします。

さらに、API が[オプトインリージョン](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html?icmpid=docs_homepage_addtlrcs#optinregion)にある場合は、リソースポリシー内のすべてのアカウントでリージョンが有効になっていることを確認します。

# AWSAPI Gateway リソースポリシーで使用できる の条件キー


次の表は、API Gateway で API のリソースポリシーに使用できる AWS の条件キーを認可タイプごとに示しています。

AWS の条件キーの詳細については、「[AWS グローバル条件コンテキストキー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)」を参照してください。


| **条件キー**:  | **条件** | ** が必要ですか?`AuthN`** | **認可タイプ** | 
| --- | --- | --- | --- | 
| aws:CurrentTime | なし | いいえ | すべて | 
| aws:EpochTime | なし | いいえ | すべて | 
| aws:TokenIssueTime | キーは、一時的セキュリティ認証情報を使用して署名されているリクエストにのみ存在します。 | はい | IAM | 
| aws:MultiFactorAuthPresent | キーは、一時的セキュリティ認証情報を使用して署名されているリクエストにのみ存在します。 | はい | IAM | 
| aws:MultiFactorAuthAge | キーは、MFA がリクエストに存在する場合にのみ存在します。 | はい | IAM | 
| aws:PrincipalAccount | なし | はい | IAM | 
| aws:PrincipalArn | なし | はい | IAM | 
| aws:PrincipalOrgID | このキーは、プリンシパルが組織のメンバーである場合にのみリクエストコンテキストに含まれます。 | はい | IAM | 
| aws:PrincipalOrgPaths | このキーは、プリンシパルが組織のメンバーである場合にのみリクエストコンテキストに含まれます。 | はい | IAM | 
| aws:PrincipalTag | このキーは、プリンシパルが、タグがアタッチされた IAM ユーザーである場合にリクエストコンテキストに含まれます。これは、タグまたはセッションタグがアタッチされた IAM ロールを使用するプリンシパルのために含まれます。 | はい | IAM | 
| aws:PrincipalType | なし | はい | IAM | 
| aws:Referer | キーは、値が HTTP ヘッダーの呼び出し元によって渡されている場合にのみ存在します。 | いいえ | すべて | 
| aws:SecureTransport | なし | いいえ | すべて | 
| aws:SourceArn | なし | いいえ | すべて | 
| aws:SourceIp | なし | いいえ | すべて | 
| aws:SourceVpc | このキーはプライベート API でのみ使用できます。 | いいえ | すべて | 
| aws:SourceVpce | このキーはプライベート API でのみ使用できます。 | いいえ | すべて | 
| aws:VpcSourceIp | このキーはプライベート API でのみ使用できます。 | いいえ | すべて | 
| aws:UserAgent | キーは、値が HTTP ヘッダーの呼び出し元によって渡されている場合にのみ存在します。 | いいえ | すべて | 
| aws:userid | なし | はい | IAM | 
| aws:username | なし | はい | IAM | 