

# API を呼び出すためのアクセスの制御
<a name="api-gateway-control-access-using-iam-policies-to-invoke-api"></a>

このセクションでは、IAM アクセス許可を使用して API へのアクセスを制御するためのアクセス許可モデルについて説明します。IAM 認可が有効な場合、クライアントは Signature Version 4a (SigV4a) および Signature Version 4 (SigV4) を使用して、AWS 認証情報でリクエストに署名する必要があります。詳細については、「[AWS Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)」を参照してください。

このセクションでは、テンプレートの IAM ポリシーステートメントとポリシーステートメントのリファレンスを示します。ポリシーステートメントのリファレンスには、API 実行サービスに関連する `Action` フィールドと `Resource` フィールドの形式が含まれています。これらのリファレンスを使用して、IAM ポリシーステートメントを作成します。IAM ポリシーステートメントを作成するときは、API Gateway リソースポリシーが承認ワークフローにどのように影響するかを検討する必要がある場合があります。詳細については、「[API Gateway リソースポリシーが認可ワークフローに与える影響](apigateway-authorization-flow.md)」を参照してください。

プライベート API の場合、API Gateway リソースポリシーと VPC エンドポイントポリシーを組み合わせて使用する必要があります。詳細については、次のトピックを参照してください。
+ [API Gateway リソースポリシーを使用して REST API へのアクセスを制御する](apigateway-resource-policies.md)
+ [API Gateway でプライベート API 用の VPC エンドポイントポリシーを使用する](apigateway-vpc-endpoint-policies.md)

## IAM ポリシーを使用した API Gateway API メソッドの呼び出しを誰に許可するかを制御する
<a name="api-gateway-who-can-invoke-an-api-method-using-iam-policies"></a>

 デプロイされた API を IAM のアクセス許可を使用して呼び出すことを誰に許可するか誰に許可しないかを制御するには、必要なアクセス許可を設定した IAM ポリシードキュメントを作成します。そのようなポリシードキュメントのテンプレートを以下に示します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "{{Permission}}",
      "Action": [
        "execute-api:{{Execution-operation}}"           
      ],
      "Resource": [
        "arn:aws:execute-api:{{region}}:{{123456789012}}:{{api-id}}/{{stage}}/{{METHOD_HTTP_VERB}}/{{Resource-path}}"
      ]
    }
  ]
}
```

------

 この場合、含まれているアクセス許可を付与または拒否するかどうかに応じて、`{{Permission}}` は `Allow` または `Deny` に置き換えられます。`{{Execution-operation}}` は、API 実行サービスでサポートされているオペレーションに置き換えられます。`{{METHOD_HTTP_VERB}}` は、指定されたリソースによってサポートされている HTTP 動詞を表します。`{{Resource-path}}` は、`[Resource](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html)` をサポートしている、デプロイされた API `{{METHOD_HTTP_VERB}}` インスタンスの URL パスのプレースホルダーです。詳細については、「[API Gateway で API を実行するための IAM ポリシーのステートメントの参照](#api-gateway-calling-api-permissions)」を参照してください。

**注記**  
IAM ポリシーが有効になるには、API メソッドで IAM 認証を有効にしている必要があり、そのためには API メソッドの `AWS_IAM` プロパティとして `[authorizationType](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html#authorizationType)` を設定します。認証を有効にしない場合、これらの API メソッドはパブリックにアクセス可能になります。

 たとえば、指定された API で公開されているペットのリストを表示するユーザーアクセス許可を付与するものの、リストにペットを追加するユーザーアクセス許可を拒否する場合は、次のステートメントを IAM ポリシーに含めます。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "execute-api:Invoke"           
      ],
      "Resource": [
        "arn:aws:execute-api:us-east-1:{{111111111111}}:{{api-id}}/{{*}}/GET/{{pets}}"
      ]
    },
    {
      "Effect": "Deny",
      "Action": [
        "execute-api:Invoke"           
      ],
      "Resource": [
        "arn:aws:execute-api:us-east-1:{{111111111111}}:{{api-id}}/{{*}}/POST/{{pets}}"
      ]
    }
  ]
}
```

------

`GET /pets/{{{petId}}}` として設定された API によって公開されている特定のペットを表示するユーザーアクセス許可を付与するには、IAM ポリシーに以下のステートメントを含めることができます。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "execute-api:Invoke"
            ],
            "Resource": [
                "arn:aws:execute-api:us-east-1:{{111122223333}}:{{api-id}}/*/GET/{{pets}}/{{a1b2}}"
            ]
        }
    ]
}
```

------

## API Gateway で API を実行するための IAM ポリシーのステートメントの参照
<a name="api-gateway-calling-api-permissions"></a>

次の情報で API を実行するためのアクセス許可の IAM ポリシーステートメントのアクションおよびリソース形式について説明します。

### API Gateway で API を実行するためのアクセス許可のアクション形式
<a name="api-gateway-iam-policy-action-format-for-executing-api"></a>

API 実行の `Action` 式には、以下の一般的な形式があります。

```
execute-api:{{action}}
```

ここで、{{action}} は使用可能な API; 実行アクションです。
+ **\***。以下のすべてのアクションを表します。
+ [**呼び出し**] は、クライアントリクエストに応じて、API を呼び出すために使用されます。
+ [**InvalidateCache**] は、クライアントリクエストに応じて、API キャッシュを無効にするために使用されます。

### API Gateway で API を実行するためのアクセス許可のリソース形式
<a name="api-gateway-iam-policy-resource-format-for-executing-api"></a>

API 実行の `Resource` 式には、以下の一般的な形式があります。

```
arn:aws:execute-api:{{region}}:{{account-id:api-id}}/{{stage-name}}/{{HTTP-VERB}}/{{resource-path-specifier}}
```

各パラメータの意味は次のとおりです。
+ {{region}} は、メソッドのデプロイされた API に対応する AWS リージョン (**us-east-1**、またはすべての **\*** リージョンを表す AWS) です。
+ {{account-id}} は、REST API 所有者の 12 桁の AWS アカウント ID です。
+ {{api-id}} は、メソッドの API に割り当てられた識別子 API Gateway です。
+ {{stage-name}} は、メソッドに関連付けられたステージの名前です。
+ {{HTTP-VERB}} はメソッドの HTTP 動詞です。GET、POST、PUT、DELETE、PATCH のいずれかになります。
+ {{resource-path-specifier}} は、目的のメソッドへのパスです

**注記**  
ワイルドカード (`*`) を指定すると、`Resource` 式はそのワイルドカードを式の残りの部分に適用します。

以下に示しているのは、いくつかのリソース式の例です。
+ 任意のステージの任意のリソースパス、任意の AWS リージョンの任意の API には **arn:aws:execute-api:\*:\*:\***。
+ 任意のステージの任意のリソースパス、AWS リージョンが `us-east-1` の任意の API には **arn:aws:execute-api:us-east-1:\*:\***。
+ 任意のステージの任意のリソースパス、AWS リージョンが us-east-1 で識別子が {{api-id}} の API には **arn:aws:execute-api:us-east-1:\*:{{api-id}}/\***。
+ ステージ `test` のリソースパス、AWS リージョンが us-east-1 で識別子が {{api-id}} の API には **arn:aws:execute-api:us-east-1:\*:{{api-id}}/`test`/\***。

詳細については[API Gateway Amazon リソースネーム (ARN) リファレンス](arn-format-reference.md)を参照してください。