

# IAM アクセス許可を使用して REST API へのアクセスを制御する
<a name="permissions"></a>

 [IAM アクセス許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_controlling.html) を使用して Amazon API Gateway API へのアクセスを制御するには、次の 2 つの API Gateway コンポーネントプロセスへのアクセスを制御します。
+  API Gateway で API の作成、デプロイ、管理を行うには、API Gateway の API 管理コンポーネントでサポートされている必要なアクションを行うためのアクセス許可を API デベロッパーに付与する必要があります。
+  デプロイされた API を呼び出したり、API キャッシュを更新したりするには、API Gateway の API 実行コンポーネントでサポートされている必要な IAM アクションを行うためのアクセス許可を API の発信者に付与する必要があります。

 2 つのプロセスのアクセス制御には、以下で説明するように、異なるアクセス権限モデルが必要です。

## API を作成および管理するための API Gateway アクセス許可モデル
<a name="api-gateway-control-access-iam-permissions-model-for-managing-api"></a>

 API デベロッパーが API Gateway で API を作成および管理することを許可するには、指定した API デベロッパーが必要な [API エントリ](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html)を作成、更新、デプロイ、表示、または削除することを許可する [IAM アクセス許可ポリシーを作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)する必要があります。アクセス許可ポリシーをユーザー、ロール、またはグループにアタッチします。

アクセス権限を付与するにはユーザー、グループ、またはロールにアクセス許可を追加します。
+ AWS IAM アイデンティティセンター のユーザーとグループ:

  アクセス許可セットを作成します。「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[アクセス許可セットを作成する](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)」の手順に従ってください。
+ IAM 内で、ID プロバイダーによって管理されているユーザー:

  ID フェデレーションのロールを作成します。詳細については *IAM ユーザーガイド* の [サードパーティー ID プロバイダー (フェデレーション) 用のロールを作成する](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html) を参照してください。
+ IAM ユーザー:
  + ユーザーが担当できるロールを作成します。手順については *IAM ユーザーガイド* の [IAM ユーザーのロールの作成](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html) を参照してください。
  + (お奨めできない方法) ポリシーをユーザーに直接アタッチするか、ユーザーをユーザーグループに追加します。*IAM ユーザーガイド* の [ユーザー (コンソール) へのアクセス許可の追加](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) の指示に従います。

アクセス権限モデルを使用する方法の詳細については、「[API Gateway のアイデンティティベースのポリシー](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies)」を参照してください。

## API を呼び出すための API Gateway アクセス許可モデル
<a name="api-gateway-control-access-iam-permissions-model-for-calling-api"></a>

API の呼び出しや API キャッシュの更新を API 発信者に許可するには、ユーザー認証が有効な API メソッドを呼び出すことを、特定の API 発信者に許可する IAM ポリシーを作成する必要があります。API デベロッパーは、メソッドの `authorizationType` プロパティを `AWS_IAM` に設定して、発信者が認証対象のユーザーの認証情報を送信することを要求します。API Gateway は、Signature Version 4a (SigV4a) と Signature Version 4 (SigV4) をサポートし、ユーザーの認証情報を認証します。詳細については、「[AWS Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)」を参照してください。次に、ユーザー、グループ、またはロールにポリシーをアタッチします。

この IAM アクセス許可ポリシーのステートメントで、IAM `Resource`エレメントには、特定の HTTP 動詞および API Gateway [リソースパス](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html)によって識別されるデプロイ API されたメソッドのリストが含まれます。IAM `Action` エレメントには、API Gateway の必要な API 実行アクションが含まれます。これらのアクションには、`execute-api:Invoke` や `execute-api:InvalidateCache` が含まれます。`execute-api` は、API Gateway の基盤となる API 実行コンポーネントを示します。

アクセス権限モデルを使用する方法の詳細については、「[API を呼び出すためのアクセスの制御](api-gateway-control-access-using-iam-policies-to-invoke-api.md)」を参照してください。

 API をバックエンドの AWS のサービス (AWS Lambda など) と統合する場合、API Gateway には、統合された AWS のリソースに API 発信者に代わってアクセスする (Lambda 関数を呼び出すなど) ための許可も必要になります。これらのアクセス許可を付与するには、**API Gateway 用の AWS のサービス**タイプの IAM ロールを作成します。IAM 管理コンソールでこのロールを作成すると、API Gateway がこのロールを引き受けることを許可された信頼されたエンティティであることを宣言する以下の IAM 信頼ポリシーがロールに含まれます。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "apigateway.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

CLI の [create-role](https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html) コマンドまたは対応する SDK メソッドを呼び出して IAM ロールを作成する場合、上記の信頼ポリシーを `assume-role-policy-document` の入力パラメータとして指定する必要があります。このようなポリシーを、IAM マネジメントコンソールで直接作成、または AWS CLI [create-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/create-policy.html) コマンド、もしくは対応する SDK メソッドを呼び出して作成しないでください。

API Gateway で統合された AWS のサービスを呼び出すには、このロールに、統合された AWS のサービスを呼び出すための適切な IAM アクセス許可ポリシーもアタッチする必要があります。たとえば、Lambda 関数を呼び出すには、IAM ロールに次の IAM アクセス許可ポリシーを含める必要があります。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": "*"
        }
    ]
}
```

------

Lambda がサポートするリソースベースのアクセスポリシーは、信頼ポリシーとアクセス許可ポリシーの両方を組み合わせたものです。API Gateway コンソールを使用して API を Lambda 関数と統合すると、コンソールがユーザーに代わって (ユーザーの合意を得て) Lambda 関数でリソースベースのアクセス許可を設定するため、この IAM ロールを明示的に設定することは要求されません。

**注記**  
 AWS のサービスへのアクセス制御を有効にするには、発信者ベースのアクセス許可モデルを使用して、発信者のユーザーまたはグループにアクセス許可ポリシーを直接アタッチするか、ロールベースのアクセス許可モデルを使用して、API Gateway が引き受けることができる IAM ロールにアクセス許可ポリシーをアタッチすることができます。アクセス権限ポリシーは 2 つのモデル間で異なる場合があります。たとえば、呼び出し元ベースのポリシーはアクセスをブロックしますが、ロールベースのポリシーはアクセスを許可します。この差異を利用して、ユーザーが API Gateway API 経由でのみ AWS のサービスにアクセスするよう要求できます。

# 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; 実行アクションです。
+ **\$1**。以下のすべてのアクションを表します。
+ [**呼び出し**] は、クライアントリクエストに応じて、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**、またはすべての **\$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:\$1:\$1:\$1**。
+ 任意のステージの任意のリソースパス、AWS リージョンが `us-east-1` の任意の API には **arn:aws:execute-api:us-east-1:\$1:\$1**。
+ 任意のステージの任意のリソースパス、AWS リージョンが us-east-1 で識別子が *api-id* の API には **arn:aws:execute-api:us-east-1:\$1:*api-id*/\$1**。
+ ステージ `test` のリソースパス、AWS リージョンが us-east-1 で識別子が *api-id* の API には **arn:aws:execute-api:us-east-1:\$1:*api-id*/`test`/\$1**。

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

# API 実行アクセス許可の IAM ポリシーの例
<a name="api-gateway-iam-policy-examples-for-api-execution"></a>

アクセス権限モデルおよび他の背景情報については、「[API を呼び出すためのアクセスの制御](api-gateway-control-access-using-iam-policies-to-invoke-api.md)」を参照してください。

以下のポリシーステートメントは、識別子が `a123456789` の API の、ステージが `test` の `mydemoresource` のパスで任意の POST メソッドを呼び出す許可をユーザーに付与するもので、対応する API が us-east-1 の AWS リージョンにデプロイされていることを前提としています。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "execute-api:Invoke"
      ],
      "Resource": [
        "arn:aws:execute-api:us-east-1:*:a123456789/test/POST/my-demo-resource-path/*"
      ]
    }
  ]
}
```

------

以下のポリシーステートメントの例では、任意の `petstorewalkthrough/pets` リージョンの、識別子が `a123456789` の API の、任意のステージの、リソースパスが AWS の、任意のメソッドを呼び出すアクセス権限をユーザーに付与します。ただし、該当する API がそのリージョンにデプロイされているとします。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "execute-api:Invoke"
      ],
      "Resource": [
        "arn:aws:execute-api:*:*:a123456789/*/*/petstorewalkthrough/pets"
      ]
    }
  ]
}
```

------