

# API Gateway リソースポリシーの例
<a name="apigateway-resource-policies-examples"></a>

このページでは、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 の使用を許可する
<a name="apigateway-resource-policies-cross-account-example"></a>

次のリソースポリシーの例は、[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 トラフィックを拒否する
<a name="apigateway-resource-policies-source-ip-address-example"></a>

以下のリソースポリシーの例は、指定された 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 トラフィックを拒否する
<a name="apigateway-resource-policies-source-ip-address-vpc-example"></a>

次のリソースポリシーの例は、指定された 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 トラフィックを許可する
<a name="apigateway-resource-policies-source-vpc-example"></a>

次のリソースポリシーの例では、指定された 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"
                }
            }
        }
    ]
}
```

------