

# API Gateway でプライベート API 用の VPC エンドポイントポリシーを使用する
<a name="apigateway-vpc-endpoint-policies"></a>

プライベート API のセキュリティを向上させるには、VPC エンドポイントポリシーを作成できます。VPC エンドポイントポリシーは、VPC エンドポイントにアタッチする IAM リソースポリシーです。詳細については、「[VPC エンドポイントによるサービスのアクセスコントロール](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)」を参照してください。

VPC エンドポイントポリシーを作成して、以下のタスクを実行できます。
+ 特定の組織やリソースにのみ、VPC エンドポイントにアクセスして API を呼び出すことを許可します。
+ API へのトラフィックを制御するために、セッションベースやロールベースのポリシーは使用しないで、単一のポリシーを使用します。
+ オンプレミスから AWS に移行する際に、アプリケーションのセキュリティ境界を厳しくします。

## VPC エンドポイントポリシーに関する考慮事項
<a name="apigateway-vpc-endpoint-policies-considerations"></a>

VPC エンドポイントポリシーに関する考慮事項は、以下のとおりです。
+ 呼び出し元の ID は、`Authorization` ヘッダー値に基づいて評価されます。VPC エンドポイントポリシーが最初に評価され、次に API Gateway はメソッドリクエストで設定された認可のタイプに基づいてリクエストを評価します。次の表は、`Authorization` ヘッダー値の内容に基づいて VPC エンドポイントポリシーがどのように評価されるかを示しています。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-vpc-endpoint-policies.html)
+ アクセスコントロールが Lambda や Amazon Cognito オーソライザーなどのベアラートークンの使用に依存している場合は、[リソースのプロパティ](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resource-properties)を使用してセキュリティ境界を制御できます。
+  認証コントロールが IAM 認証を使用している場合は、[リソースのプロパティ](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resource-properties)と[プリンシパルのプロパティ](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resource-principal)を使用してセキュリティ境界を制御できます。
+ VPC エンドポイントポリシーは、API Gateway リソースポリシーと一緒に使用できます。API Gateway リソースポリシーは、どのプリンシパルが API にアクセスできるかを指定します。エンドポイントポリシーは、誰が VPC にアクセスできるか、どの API を VPC エンドポイントから呼び出せるかを指定します。プライベート API にはリソースポリシーが必要ですが、カスタム VPC エンドポイントポリシーを作成する必要はありません。

## VPC エンドポイントポリシーの例
<a name="apigateway-vpc-endpoint-policies-examples"></a>

Amazon API Gateway で Amazon Virtual Private Cloud エンドポイントポリシーを作成し、以下を指定できます。
+ アクションを実行できるプリンシパル。
+ 実行可能なアクション。
+ 自身に対してアクションを実行できたリソース。

これは、認可ヘッダーの内容によって異なる場合があります。詳細については、「[VPC エンドポイントポリシーに関する考慮事項](#apigateway-vpc-endpoint-policies-considerations)」を参照してください。その他のポリシーの例については、GitHub ウェブサイトの「[Data perimeter policy examples](https://github.com/aws-samples/data-perimeter-policy-examples)」を参照してください。

VPC エンドポイントにポリシーをアタッチするには 、VPC コンソールを使用する必要があります。詳細については、「[VPC エンドポイントによるサービスのアクセスコントロール](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)」を参照してください。

## 例 1: 2 つの API へのアクセスを許可する VPC エンドポイントポリシー
<a name="apigateway-vpc-endpoint-policies-example-1"></a>

次のポリシー例では、ポリシーが関連付けられている VPC エンドポイントを経由して 2 つの特定の API へのアクセスを許可しています。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Principal": "*",
            "Action": [
                "execute-api:Invoke"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:execute-api:us-east-1:123412341234:a1b2c3d4e5/*",
                "arn:aws:execute-api:us-east-1:123412341234:aaaaa11111/*"
            ]
        }
    ]
}
```

------

## 例 2: GET メソッドへのアクセスを許可する VPC エンドポイントポリシー
<a name="apigateway-vpc-endpoint-policies-example-2"></a>

次のポリシー例では、ポリシーが関連付けられている VPC エンドポイントを経由して特定の API の`GET` メソッドへのアクセスを許可しています。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Principal": "*",
            "Action": [
                "execute-api:Invoke"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:execute-api:us-east-1:123412341234:a1b2c3d4e5/stageName/GET/*"
            ]
        }
    ]
}
```

------

## 例 3: 特定の API への特定のユーザーアクセスを許可する VPC エンドポイントポリシー
<a name="apigateway-vpc-endpoint-policies-example-3"></a>

次のポリシー例では、ポリシーが関連付けられている VPC エンドポイントを経由して特定の API への特定のユーザーアクセスを許可しています。

この場合、特定の IAM プリンシパルへのアクセスをポリシーで制限するため、メソッドの `authorizationType` を `AWS_IAM` または `NONE` に設定する必要があります。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Principal": {
                "AWS": [
                    "arn:aws:iam::123412341234:user/MyUser"
                ]
            },
            "Action": [
                "execute-api:Invoke"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:execute-api:us-east-1:123412341234:a1b2c3d4e5/*"
            ]
        }
    ]
}
```

------

## 例 4: 特定のカスタムドメイン名と、そのドメインにマッピングされたすべての API へのアクセスをユーザーに許可する VPC エンドポイントポリシー
<a name="apigateway-vpc-endpoint-policies-example-4"></a>

次のポリシー例では、ポリシーがアタッチされている VPC エンドポイントを経由して、プライベート API の特定のカスタムドメイン名へのアクセスをユーザーに許可します。このポリシーでは、ユーザーが VPC エンドポイントとカスタムドメイン名との間にドメイン名アクセスの関連付けを作成していて、そのカスタムドメイン名とそれにマッピングされているプライベート API へのアクセスが許可されている限り、そのカスタムドメイン名にマッピングされているすべての API を呼び出すことができます。詳細については、「[API Gateway でのプライベート API のカスタムドメイン名](apigateway-private-custom-domains.md)」を参照してください。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "execute-api:Invoke",
      "Resource": [
        "*"
      ],
       "Condition": {
        "ArnEquals": {
          "execute-api:viaDomainArn": "arn:aws:execute-api:us-west-2:111122223333:/domainnames/private.test.com+f4g5h6",
        }
      }
    }
  ]
}
```

------

## 例 5: 特定の API およびドメインリソースへのアクセスを許可または拒否する VPC エンドポイントポリシー
<a name="apigateway-vpc-endpoint-policies-example-5"></a>

次のポリシー例では、特定の API およびドメインリソースへのアクセスをユーザーに許可します。このポリシーでは、ユーザーが VPC エンドポイントとカスタムドメイン名との間にドメイン名アクセスの関連付けを作成していて、そのカスタムドメイン名とそれにマッピングされているプライベート API へのアクセスが許可されている限り、その許可されたプライベート API とドメインリソースを呼び出すことができます。詳細については、「[API Gateway でのプライベート API のカスタムドメイン名](apigateway-private-custom-domains.md)」を参照してください。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "execute-api:Invoke",
      "Resource": [
        "arn:aws:execute-api:us-west-2:111122223333:/domainnames/private.test.com+f4g5h6",
        "arn:aws:execute-api:us-west-2:111122223333:a1b2c3d4e5/*"
      ]
    },
    {
      "Effect": "Deny",
      "Principal": {
        "AWS": "*"
      },
      "Action": "execute-api:Invoke",
      "Resource": [
        "arn:aws:execute-api:us-west-2:111122223333:a1b2c3d4e5/admin/*",
        "arn:aws:execute-api:us-west-2:111122223333:bcd123455/*"
      ]
    }
  ]
}
```

------

## 例 6: 組織に属するプリンシパルとリソースによるアクセスを許可または拒否する VPC エンドポイントポリシー
<a name="apigateway-vpc-endpoint-policies-example-6"></a>

次のポリシー例では、組織に属するプリンシパルとリソースへのアクセスを許可します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Condition": {
                "StringEquals": {
                    "aws:ResourceOrgID": "o-abcd1234",
                    "aws:PrincipalOrgID": "o-abcd1234"
                }
            },
            "Action": "*",
            "Resource": "*",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Sid": "AllowRequestsByOrgsIdentitiesToOrgsResources"
        }
    ]
}
```

------