

# Amazon API Gateway の Identity and Access Management
<a name="security-iam"></a>

AWS Identity and Access Management (IAM) は、管理者が AWS リソースへのアクセスを安全に制御するために役立つ AWS のサービス です。IAM 管理者は、誰を*認証* (サインイン) し、誰に API Gateway リソースの使用を*承認*する (アクセス許可を付与する) かを制御します。IAM は、追加費用なしで使用できる AWS のサービス です。

**Topics**
+ [対象者](#security_iam_audience)
+ [アイデンティティによる認証](#security_iam_authentication)
+ [ポリシーを使用したアクセス権の管理](#security_iam_access-manage)
+ [Amazon API Gateway と IAM の連携方法](security_iam_service-with-iam.md)
+ [Amazon API Gateway のアイデンティティベースのポリシーの例](security_iam_id-based-policy-examples.md)
+ [Amazon API Gateway のリソースベースのポリシーの例](security_iam_resource-based-policy-examples.md)
+ [Amazon API Gateway の ID とアクセスのトラブルシューティング](security_iam_troubleshoot.md)
+ [API Gateway でのサービスリンクロールの使用](using-service-linked-roles.md)

## 対象者
<a name="security_iam_audience"></a>

AWS Identity and Access Management (IAM) の使用方法は、ロールによって異なります。
+ **サービスユーザー** - 機能にアクセスできない場合は、管理者にアクセス許可をリクエストします (「[Amazon API Gateway の ID とアクセスのトラブルシューティング](security_iam_troubleshoot.md)」を参照)。
+ **サービス管理者** - ユーザーアクセスを決定し、アクセス許可リクエストを送信します (「[Amazon API Gateway と IAM の連携方法](security_iam_service-with-iam.md)」を参照)
+ **IAM 管理者** - アクセスを管理するためのポリシーを作成します (「[Amazon API Gateway のアイデンティティベースのポリシーの例](security_iam_id-based-policy-examples.md)」を参照)

## アイデンティティによる認証
<a name="security_iam_authentication"></a>

認証とは、アイデンティティ認証情報を使用して AWS にサインインする方法です。ユーザーは、IAM ユーザー の AWS アカウントのルートユーザー として、または IAM ロールを引き受けることによって、認証される 必要があります。

AWS IAM アイデンティティセンター (IAM アイデンティティセンター)、シングルサインオン認証、Google/Facebook 認証情報などの ID ソースからの認証情報を使用して、フェデレーテッドアイデンティティとしてサインインできます。サインインの詳細については、「*AWS サインイン ユーザーガイド*」の「[AWS アカウントにサインインする方法](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)」を参照してください。

プログラムによるアクセスの場合、AWS はリクエストに暗号で署名するための SDK と CLI を提供します。詳細については、「*IAM ユーザーガイド*」の「[API リクエストに対する AWS 署名バージョン 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)」を参照してください。

### AWS アカウント のルートユーザー
<a name="security_iam_authentication-rootuser"></a>

 AWS アカウントを作成すると、すべての AWS のサービスとリソースに対する完全なアクセス権を持つ AWS アカウント *ルートユーザー*と呼ばれる 1 つのサインイン ID を使用して開始します。日常的なタスクには、ルートユーザーを使用しないことを強くお勧めします。ルートユーザー認証情報を必要とするタスクについては、「*IAM ユーザーガイド*」の「[ルートユーザー認証情報が必要なタスク](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)」を参照してください。

### IAM ユーザーとグループ
<a name="security_iam_authentication-iamuser"></a>

*[IAM ユーザー](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)*は、特定の個人やアプリケーションに対する特定のアクセス許可を持つアイデンティティです。長期認証情報を持つ IAM ユーザーの代わりに一時的な認証情報を使用することをお勧めします。詳細は「*IAM ユーザーガイド*」の「[人間のユーザーが一時的な認証情報を使用して AWS にアクセスするには ID プロバイダーとのフェデレーションの使用が必要です](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)」を参照してください。

[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)は、IAM ユーザーの集合を指定し、大量のユーザーに対するアクセス許可の管理を容易にします。詳細については、「*IAM ユーザーガイド*」の「[IAM ユーザーに関するユースケース](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html)」を参照してください。

### IAM ロール
<a name="security_iam_authentication-iamrole"></a>

*[IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)*は、特定のアクセス許可を持つアイデンティであり、一時的な認証情報を提供します。[ユーザーから IAM ロール (コンソール) に切り替える](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)、または AWS CLI や AWS API オペレーションを呼び出すことで、ロールを引き受けることができます。詳細については、「*IAM ユーザーガイド*」の「[ロールを引き受けるための各種方法](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html)」を参照してください。

IAM ロールは、フェデレーションユーザーアクセス、一時的な IAM ユーザーのアクセス許可、クロスアカウントアクセス、クロスサービスアクセス、および Amazon EC2 で実行するアプリケーションに役立ちます。詳細については、*IAM ユーザーガイド* の [IAM でのクロスアカウントリソースアクセス](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html) を参照してください。

## ポリシーを使用したアクセス権の管理
<a name="security_iam_access-manage"></a>

AWS でアクセスを制御するには、ポリシーを作成して AWS ID またはリソースにアタッチします。ポリシーは、アイデンティティやリソースとの関連付けに伴うアクセス許可を定義します。AWS は、プリンシパルがリクエストを行うときに、これらのポリシーを評価します。大半のポリシーは JSON ドキュメントとして AWS に保存されます。JSON ポリシードキュメントの詳細については、「*IAM ユーザーガイド*」の「[JSON ポリシー概要](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json)」を参照してください。

管理者は、ポリシーを使用して、どの**プリンシパル**がどの**リソース**に対して、どのような**条件**で**アクション**を実行できるかを定義することで、誰が何にアクセスできるかを指定します。

デフォルトでは、ユーザーやロールにアクセス許可はありません。IAM 管理者は IAM ポリシーを作成してロールに追加し、このロールをユーザーが引き受けられるようにします。IAM ポリシーは、オペレーションの実行方法を問わず、アクセス許可を定義します。

### アイデンティティベースのポリシー
<a name="security_iam_access-manage-id-based-policies"></a>

アイデンティティベースのポリシーは、アイデンティティ (ユーザー、グループ、またはロール) にアタッチできる JSON アクセス許可ポリシードキュメントです。これらのポリシーは、アイデンティティがどのリソースに対してどのような条件下でどのようなアクションを実行できるかを制御します。アイデンティティベースポリシーの作成方法については、*IAM ユーザーガイド* の [カスタマー管理ポリシーでカスタム IAM アクセス許可を定義する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) を参照してください。

アイデンティティベースのポリシーは、*インラインポリシー* (単一の ID に直接埋め込む) または*管理ポリシー* (複数の ID にアタッチされたスタンドアロンポリシー) にすることができます。管理ポリシーとインラインポリシーのいずれかを選択する方法については、「*IAM ユーザーガイド*」の「[管理ポリシーとインラインポリシーのいずれかを選択する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html)」を参照してください。

### リソースベースのポリシー
<a name="security_iam_access-manage-resource-based-policies"></a>

リソースベースのポリシーは、リソースに添付する JSON ポリシードキュメントです。例としては、IAM *ロール信頼ポリシー*や Amazon S3 *バケットポリシー*などがあります。リソースベースのポリシーをサポートするサービスでは、サービス管理者はポリシーを使用して特定のリソースへのアクセスを制御できます。リソースベースのポリシーでは、[プリンシパルを指定する](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)必要があります。

リソースベースのポリシーは、そのサービス内にあるインラインポリシーです。リソースベースのポリシーでは IAM の AWSマネージドポリシーは使用できません。

### アクセスコントロールリスト (ACL)
<a name="security_iam_access-manage-acl"></a>

アクセスコントロールリスト (ACL) は、どのプリンシパル (アカウントメンバー、ユーザー、またはロール) がリソースにアクセスするためのアクセス許可を持つかを制御します。ACL はリソースベースのポリシーに似ていますが、JSON ポリシードキュメント形式は使用しません。

Amazon S3、AWS WAF、および Amazon VPC は、ACL をサポートするサービスの例です。ACL の詳細については、*Amazon Simple Storage Service デベロッパーガイド* の [アクセスコントロールリスト (ACL) の概要](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html) を参照してください。

### 他のポリシータイプ
<a name="security_iam_access-manage-other-policies"></a>

AWS は、より一般的なポリシータイプで付与された最大数のアクセス許可を設定できる、追加のポリシータイプをサポートしています。
+ **アクセス許可の境界** – アイデンティティベースのポリシーで IAM エンティティに付与することのできるアクセス許可の数の上限を設定します。詳細については、「*IAM ユーザーガイド*」の「[IAM エンティティのアクセス許可境界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)」を参照してください。
+ **サービスコントロールポリシー (SCP)** - AWS Organizations 内の組織または組織単位の最大のアクセス許可を指定します。詳細については、「*AWS Organizations ユーザーガイド*」の「[サービスコントロールポリシー](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)」を参照してください。
+ **リソースコントロールポリシー (RCP)** – は、アカウント内のリソースで利用できる最大数のアクセス許可を定義します。詳細については、「*AWS Organizations ユーザーガイド*」の「[リソースコントロールポリシー (RCP)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)」を参照してください。
+ **セッションポリシー** – ロールまたはフェデレーションユーザーの一時セッションを作成する際にパラメータとして渡される高度なポリシーです。詳細については、「*IAM ユーザーガイド*」の「[セッションポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)」を参照してください。

### 複数のポリシータイプ
<a name="security_iam_access-manage-multiple-policies"></a>

1 つのリクエストに複数のタイプのポリシーが適用されると、結果として作成されるアクセス許可を理解するのがさらに難しくなります。複数のポリシータイプが関与するときに、リクエストを許可するかどうかを AWS が決定する方法の詳細については、*IAM ユーザーガイド*の「[ポリシーの評価ロジック](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)」を参照してください。

# Amazon API Gateway と IAM の連携方法
<a name="security_iam_service-with-iam"></a>

IAM を使用して API Gateway へのアクセスを管理する前に、API Gateway で使用できる IAM 機能について理解しておく必要があります。API Gateway およびその他の AWS のサービスが IAM と連携する方法の概要を把握するには、*IAM ユーザーガイド*の「[IAM と連携する AWS のサービス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)」を参照してください。

**Topics**
+ [API Gateway のアイデンティティベースのポリシー](#security_iam_service-with-iam-id-based-policies)
+ [API Gateway リソースベースのポリシー](#security_iam_service-with-iam-resource-based-policies)
+ [API Gateway タグに基づく認可](#security_iam_service-with-iam-tags)
+ [API Gateway IAM ロール](#security_iam_service-with-iam-roles)

## API Gateway のアイデンティティベースのポリシー
<a name="security_iam_service-with-iam-id-based-policies"></a>

IAM アイデンティティベースのポリシーでは、許可または拒否するアクションとリソース、およびアクションを許可または拒否する条件を指定できます。API Gateway は、特定のアクション、リソース、および条件キーをサポートしています。API Gateway 固有のアクション、リソース、条件キーの詳細については、「[Amazon API Gateway Management のアクション、リソース、および条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonapigatewaymanagement.html)」および「[Amazon API Gateway Management V2 のアクション、リソース、および条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonapigatewaymanagementv2.html)」を参照してください。JSON ポリシーで使用するすべての要素については、*IAM ユーザーガイド*の「[IAM JSON ポリシーの要素のリファレンス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)」を参照してください。

次の例は、ユーザーがプライベート REST API だけを作成または更新できるようにする ID ベースのポリシーを示しています。その他の例については、「[Amazon API Gateway のアイデンティティベースのポリシーの例](security_iam_id-based-policy-examples.md)」を参照してください。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "ScopeToPrivateApis",
      "Effect": "Allow",
      "Action": [
        "apigateway:PATCH",
        "apigateway:POST",
        "apigateway:PUT"
      ],
      "Resource": [
        "arn:aws:apigateway:us-east-1::/restapis",
        "arn:aws:apigateway:us-east-1::/restapis/??????????"
      ],
      "Condition": {
        "ForAllValues:StringEqualsIfExists": {
          "apigateway:Request/EndpointType": "PRIVATE",
          "apigateway:Resource/EndpointType": "PRIVATE"
        }
      }
    },
    {
      "Sid": "AllowResourcePolicyUpdates",
      "Effect": "Allow",
      "Action": [
          "apigateway:UpdateRestApiPolicy"
      ],
      "Resource": [
          "arn:aws:apigateway:us-east-1::/restapis/*"
      ]
    }
  ]
}
```

------

### アクション
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

JSON ポリシーの `Action` 要素は、ポリシー内のアクセスを許可または拒否するために使用できるアクションを記述します。

API Gateway のポリシーアクションでは、アクションの前にプレフィックス `apigateway:` を使用します。ポリシーステートメントには、`Action` または `NotAction` エレメントを含める必要があります。API Gateway は、このサービスで実行できるタスクを記述する独自のアクションのセットを定義します。



API が管理する `Action` 式の形式は `apigateway:action` であり、ここで *action* は、**GET**、**POST**、**PUT**、**DELETE**、**PATCH** (リソースの更新用)、または **\$1** (これまでのアクションすべて) の API Gateway アクションのいずれかになります。

`Action` 式のいくつかの例は以下の通りです。
+ **apigateway:\$1**すべての API Gateway アクションについては 。
+ **apigateway:GET**API Gateway の GET アクションのみについては 。

単一のステートメントに複数のアクションを指定するには、次のようにコンマで区切ります。

```
"Action": [
      "apigateway:action1",
      "apigateway:action2"
```

特定の API Gateway オペレーションに使用する HTTP 動詞については、「[ Amazon API Gateway Version 1 API Reference](https://docs.aws.amazon.com/apigateway/api-reference/) (REST API ) 」および「[ Amazon API Gateway Version 2 API Reference](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/api-reference.html) (WebSocket API および HTTP API) 」を参照してください。

詳細については、「[Amazon API Gateway のアイデンティティベースのポリシーの例](security_iam_id-based-policy-examples.md)」を参照してください。

### リソース
<a name="security_iam_service-with-iam-id-based-policies-resources"></a>

管理者は AWS JSON ポリシーを使用して、誰が何にアクセスできるかを指定できます。つまり、どの**プリンシパル**がどの**リソース**に対してどのような**条件下で****アクション**を実行できるかということです。

`Resource` JSON ポリシー要素はアクションが適用されるオブジェクトを指定します。ベストプラクティスとして、[Amazon リソースネーム (ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html) を使用してリソースを指定します。リソースレベルの権限をサポートしないアクションの場合は、ステートメントがすべてのリソースに適用されることを示すために、ワイルドカード (\$1) を使用します。

```
"Resource": "*"
```



API Gateway リソースには、次の ARN 形式があります。

```
arn:aws:apigateway:region::resource-path-specifier
```

たとえば、ステートメントの認証者など、ID * `api-id` * とそのサブリソースで REST API を指定するには、次の ARN を使用します。

```
"Resource": "arn:aws:apigateway:us-east-2::/restapis/api-id/*"
```

特定のアカウントに属するすべての REST API やサブリソースを指定するには、ワイルドカード (\$1) を使用します。

```
"Resource": "arn:aws:apigateway:us-east-2::/restapis/*"
```

API Gateway リソースタイプとそれらの ARN の一覧については、「[API Gateway Amazon リソースネーム (ARN) リファレンス](arn-format-reference.md)」を参照してください。

### 条件キー
<a name="security_iam_service-with-iam-id-based-policies-conditionkeys"></a>

管理者は AWS JSON ポリシーを使用して、誰が何にアクセスできるかを指定できます。つまり、どの**プリンシパル**がどんな**リソース**にどんな**条件**で**アクション**を実行できるかということです。

`Condition` 要素は、定義された基準に基づいてステートメントが実行される時期を指定します。イコールや未満などの[条件演算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)を使用して条件式を作成して、ポリシーの条件とリクエスト内の値を一致させることができます。すべての AWS グローバル条件キーを確認するには、*IAM ユーザーガイド*の「[AWS グローバル条件コンテキストキー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)」を参照してください。

API Gateway は独自の条件キーを定義し、一部のグローバル条件キーの使用もサポートしています。API Gateway の条件キーの一覧については、*IAM ユーザーガイド*の「[Amazon API Gateway の条件キー](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_manageamazonapigateway.html#manageamazonapigateway-policy-keys)」を参照してください。どのアクションおよびリソースと条件キーを使用できるかについては、「[Amazon API Gateway Management V2 のアクション、リソース、および条件キー](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_manageamazonapigateway.html#amazonapigateway-actions-as-permissions)」を参照してください。

属性ベースのアクセスコントロールなど、タグ付けの詳細については、[API Gateway リソースのタグ付け](apigateway-tagging.md) を参照してください。

### 例
<a name="security_iam_service-with-iam-id-based-policies-examples"></a>



API Gateway アイデンティティベースのポリシーの例については、「[Amazon API Gateway のアイデンティティベースのポリシーの例](security_iam_id-based-policy-examples.md)」を参照してください。

## API Gateway リソースベースのポリシー
<a name="security_iam_service-with-iam-resource-based-policies"></a>

リソースベースのポリシーとは、 API Gateway リソース上で指定するプリンシパルとしてのどのアクションをどの条件で実行できるかを指定する JSON ポリシードキュメントです。API Gateway は、REST API のリソースベースのアクセス許可ポリシーをサポートします。リソースポリシーを使用して、REST API を呼び出すことができるユーザーを管理します。詳細については、「[API Gateway リソースポリシーを使用して REST API へのアクセスを制御する](apigateway-resource-policies.md)」を参照してください。

### 例
<a name="security_iam_service-with-iam-resource-based-policies-examples"></a>

API Gateway リソースベースのポリシーの例については、「[API Gateway リソースポリシーの例](apigateway-resource-policies-examples.md)」を参照してください。

## API Gateway タグに基づく認可
<a name="security_iam_service-with-iam-tags"></a>

API Gateway リソースにタグをアタッチしたり、リクエスト内のタグを API Gateway に渡したりできます。タグに基づいてアクセスを制御するには、`apigateway:ResourceTag/key-name`、`aws:RequestTag/key-name`、または `aws:TagKeys` の条件キーを使用して、ポリシーの[条件要素](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)でタグ情報を提供します。API Gateway リソースのタグ付けの詳細については、「[タグを使用して API Gateway REST API リソースへのアクセスをコントロールする](apigateway-tagging-iam-policy.md)」を参照してください。

リソースのタグに基づいてリソースへのアクセスを制限するためのアイデンティティベースのポリシーの例については、「[タグを使用して API Gateway REST API リソースへのアクセスをコントロールする](apigateway-tagging-iam-policy.md)」を参照してください。

## API Gateway IAM ロール
<a name="security_iam_service-with-iam-roles"></a>

[IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)は AWS アカウント内のエンティティで、特定の許可を持っています。

### API Gateway での一時的な認証情報の使用
<a name="security_iam_service-with-iam-roles-tempcreds"></a>

一時的な認証情報を使用して、フェデレーションでサインイン、IAM ロールを引き受ける、またはクロスアカウントロールを引き受けることができます。一時的なセキュリティ認証情報を取得するには、[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) または [GetFederationToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetFederationToken.html) などの AWS STS API オペレーションを呼び出します。

API Gateway では、一時認証情報の使用をサポートしています。

### サービスにリンクされたロール
<a name="security_iam_service-with-iam-roles-service-linked"></a>

[サービスリンクロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)は、AWS サービスが他のサービスのリソースにアクセスしてお客様の代わりにアクションを完了することを許可します。サービスリンクロールは IAM アカウント内に表示され、サービスによって所有されます。IAM 管理者は、サービスにリンクされたロールのアクセス許可を表示できますが、編集することはできません。

API Gateway は、サービスリンクロールをサポートします。API Gateway サービスにリンクされたロールの作成または管理の詳細については、「[API Gateway でのサービスリンクロールの使用](using-service-linked-roles.md)」を参照してください。

### サービスロール
<a name="security_iam_service-with-iam-roles-service"></a>

サービスは、ユーザーに代わって[サービスロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-role)を引き受けることができます。このサービスロールにより、サービスはユーザーに代わって他のサービスのリソースにアクセスし、アクションを完了できます。サービスロールロールは、IAM アカウントに表示され、アカウントによって所有されます。そのため、管理者はこのロールのアクセス権限を変更できます。ただし、それにより、サービスの機能が損なわれる場合があります。

API Gateway は、サービスロールをサポートします。

# Amazon API Gateway のアイデンティティベースのポリシーの例
<a name="security_iam_id-based-policy-examples"></a>

デフォルトでは、IAM ユーザーとロールには API Gateway リソースを作成または変更するためのアクセス許可はありません。AWS マネジメントコンソール、AWS CLI、または AWS SDK を使用してタスクを実行することもできません。IAM 管理者は、ユーザーとロールに必要な、指定されたリソースで特定の API オペレーションを実行するアクセス許可をユーザーとロールに付与する IAM ポリシーを作成する必要があります。続いて、管理者はそれらのアクセス許可が必要な IAM ユーザーまたはグループにそのポリシーをアタッチします。

IAM ポリシーの作成方法の詳細については、* IAM ユーザーガイド* の [「[JSON] タブでのポリシーの作成 ](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-json-editor)」を参照してください。API Gateway 固有のアクション、リソース、条件の詳細については、「[Amazon API Gateway Management のアクション、リソース、および条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonapigatewaymanagement.html)」および「[Amazon API Gateway Management V2 のアクション、リソース、および条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonapigatewaymanagementv2.html)」を参照してください。

**Topics**
+ [ポリシーに関するベストプラクティス](#security_iam_service-with-iam-policy-best-practices)
+ [ユーザーが自分の権限を表示できるようにする](#security_iam_id-based-policy-examples-view-own-permissions)
+ [シンプルな読み取りアクセス許可](#api-gateway-policy-example-apigateway-general)
+ [REQUEST または JWT オーライザだけを作成する](#security_iam_id-based-policy-examples-v2-import)
+ [デフォルトの `execute-api` エンドポイントが無効になっていることを要求する](#security_iam_id-based-policy-examples-v2-endpoint-status)
+ [ユーザーにプライベート REST API の作成または更新のみを許可する](#security_iam_id-based-policy-examples-private-api)
+ [API ルートに認可を要求する](#security_iam_id-based-policy-examples-require-authorization)
+ [ユーザーが VPC リンクを作成または更新することを防止する](#security_iam_id-based-policy-examples-deny-vpc-link)
+ [ルーティングルールを使用するためのポリシーの例](#security_iam_id-based-policy-examples-routing-mode)

## ポリシーに関するベストプラクティス
<a name="security_iam_service-with-iam-policy-best-practices"></a>

ID ベースのポリシーは、あるユーザーがアカウント内で API Gateway リソースを作成、アクセス、または削除できるどうかを決定します。これらのアクションでは、AWS アカウント に費用が発生する場合があります。アイデンティティベースポリシーを作成したり編集したりする際には、以下のガイドラインと推奨事項に従ってください:
+ **AWS マネージドポリシーの使用を開始し、最小特権のアクセス許可に移行する** – ユーザーとワークロードへのアクセス許可の付与を開始するには、多くの一般的なユースケースのためにアクセス許可を付与する *AWS マネージドポリシー*を使用します。これらは AWS アカウントで使用できます。ユースケースに固有の AWS カスタマー管理ポリシーを定義して、アクセス許可を絞り込むことをお勧めします。詳細については、*IAM ユーザーガイド* の [AWS マネージドポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) または [ジョブ機能の AWS マネージドポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html) を参照してください。
+ **最小特権を適用する** – IAM ポリシーでアクセス許可を設定する場合は、タスクの実行に必要な許可のみを付与します。これを行うには、特定の条件下で特定のリソースに対して実行できるアクションを定義します。これは、*最小特権アクセス許可*とも呼ばれています。IAM を使用して許可を適用する方法の詳細については、*IAM ユーザーガイド* の [IAM でのポリシーとアクセス許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) を参照してください。
+ **IAM ポリシーで条件を使用してアクセスをさらに制限する** - ポリシーに条件を追加して、アクションやリソースへのアクセスを制限できます。たとえば、ポリシー条件を記述して、すべてのリクエストを SSL を使用して送信するように指定できます。また、CloudFormation などの特定の AWS のサービス を介して使用する場合、条件を使用してサービスアクションへのアクセスを許可することもできます。詳細については、*IAM ユーザーガイド* の [IAM JSON ポリシー要素:条件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html) を参照してください。
+ **IAM アクセスアナライザー を使用して IAM ポリシーを検証し、安全で機能的な権限を確保する** - IAM アクセスアナライザー は、新規および既存のポリシーを検証して、ポリシーが IAM ポリシー言語 (JSON) および IAM のベストプラクティスに準拠するようにします。IAM アクセスアナライザーは 100 を超えるポリシーチェックと実用的な推奨事項を提供し、安全で機能的なポリシーの作成をサポートします。詳細については、*IAM ユーザーガイド* の [IAM Access Analyzer でポリシーを検証する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html) を参照してください。
+ **多要素認証 (MFA) を要求する** – AWS アカウントで IAM ユーザーまたはルートユーザーを要求するシナリオがある場合は、セキュリティを強化するために MFA をオンにします。API オペレーションが呼び出されるときに MFA を必須にするには、ポリシーに MFA 条件を追加します。詳細については、*IAM ユーザーガイド* の [MFA を使用した安全な API アクセス](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html) を参照してください。

IAM でのベストプラクティスの詳細については、「*IAM ユーザーガイド*」の「[IAM でのセキュリティベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」を参照してください。

## ユーザーが自分の権限を表示できるようにする
<a name="security_iam_id-based-policy-examples-view-own-permissions"></a>

この例では、ユーザーアイデンティティにアタッチされたインラインおよびマネージドポリシーの表示を IAM ユーザーに許可するポリシーの作成方法を示します。このポリシーには、コンソールで、または AWS CLI か AWS API を使用してプログラム的に、このアクションを完了するアクセス許可が含まれています。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewOwnUserInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetUserPolicy",
                "iam:ListGroupsForUser",
                "iam:ListAttachedUserPolicies",
                "iam:ListUserPolicies",
                "iam:GetUser"
            ],
            "Resource": ["arn:aws:iam::*:user/${aws:username}"]
        },
        {
            "Sid": "NavigateInConsole",
            "Effect": "Allow",
            "Action": [
                "iam:GetGroupPolicy",
                "iam:GetPolicyVersion",
                "iam:GetPolicy",
                "iam:ListAttachedGroupPolicies",
                "iam:ListGroupPolicies",
                "iam:ListPolicyVersions",
                "iam:ListPolicies",
                "iam:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}
```

## シンプルな読み取りアクセス許可
<a name="api-gateway-policy-example-apigateway-general"></a>

このポリシーの例は、AWS リージョン us-east-1 の `a123456789` の識別子を使用して、HTTP または WebSocket API のすべてのリソースに関する情報を取得する許可をユーザーに付与します。リソース `arn:aws:apigateway:us-east-1::/apis/a123456789/*` には、認証者やデプロイなど、API のすべてのサブリソースが含まれます。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "apigateway:GET"
      ],
      "Resource": [
        "arn:aws:apigateway:us-east-1::/apis/a123456789/*"
      ]
    }
  ]
}
```

------

## REQUEST または JWT オーライザだけを作成する
<a name="security_iam_id-based-policy-examples-v2-import"></a>

このポリシーの例を参考にすれば、ユーザーが [インポート](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis.html#ImportApi)を含む、`REQUEST` または `JWT` オーソリザーだけを使用して API を作成できます。ポリシーの `Resource` セクションによると、`arn:aws:apigateway:us-east-1::/apis/??????????` では、リソースは最大10 文字にする必要があります。これはAPI のサブリソースでは除外されます。この例では、`ForAllValues` セクションの `Condition` を使用します。これは、ユーザーが API をインポートすることで複数のオーソリザーを一度に作成できるためです。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "OnlyAllowSomeAuthorizerTypes",
      "Effect": "Allow",
      "Action": [
        "apigateway:PUT",
        "apigateway:POST",
        "apigateway:PATCH"
      ],
      "Resource": [
        "arn:aws:apigateway:us-east-1::/apis",
        "arn:aws:apigateway:us-east-1::/apis/??????????",
        "arn:aws:apigateway:us-east-1::/apis/*/authorizers",
        "arn:aws:apigateway:us-east-1::/apis/*/authorizers/*"
      ],
      "Condition": {
        "ForAllValues:StringEqualsIfExists": {
          "apigateway:Request/AuthorizerType": [
            "REQUEST",
            "JWT"
          ]
        }
      }
    }
  ]
}
```

------

## デフォルトの `execute-api` エンドポイントが無効になっていることを要求する
<a name="security_iam_id-based-policy-examples-v2-endpoint-status"></a>

 このポリシーの例は、`DisableExecuteApiEndpoint` が `true`の場合に、ユーザーが API を作成、更新、またはインポートすることを示してます。`DisableExecuteApiEndpoint` が `true` の場合は、クライアントは API を呼び出すために、デフォルトの `execute-api` エンドポイントを使用できません。

`BoolIfExists` の条件を使用して、 `DisableExecuteApiEndpoint` 条件キーが入力されない API を更新する呼び出しを処理します。ユーザーが API を作成またはインポートしようとすると、`DisableExecuteApiEndpoint` 条件キーは常に入力されます。

`apis/*`リソースはオーソリザーやメソッドなどのサブリソースもキャプチャするため、明示的に `Deny` ステートメントを使用して API だけを範囲とします。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DisableExecuteApiEndpoint",
      "Effect": "Allow",
      "Action": [
        "apigateway:PATCH",
        "apigateway:POST",
        "apigateway:PUT"
      ],
      "Resource": [
        "arn:aws:apigateway:us-east-1::/apis",
        "arn:aws:apigateway:us-east-1::/apis/*"
      ],
      "Condition": {
        "BoolIfExists": {
          "apigateway:Request/DisableExecuteApiEndpoint": true
        }
      }
    },
    {
      "Sid": "ScopeDownToJustApis",
      "Effect": "Deny",
      "Action": [
        "apigateway:PATCH",
        "apigateway:POST",
        "apigateway:PUT"
      ],
      "Resource": [
        "arn:aws:apigateway:us-east-1::/apis/*/*"
      ]
    }
  ]
}
```

------

## ユーザーにプライベート REST API の作成または更新のみを許可する
<a name="security_iam_id-based-policy-examples-private-api"></a>

このポリシーの例は、ユーザーが `PRIVATE` API のみを作成することを必須とし、API を `PRIVATE` から別のタイプ (`REGIONAL` など) に変更する可能性がある更新が行われないように条件キーを使用します。

`ForAllValues` を使用して、API に追加されるすべての `EndpointType` が `PRIVATE` であることを義務付けています。API に対する更新はいずれも、それが `PRIVATE` の場合に限り、リソース条件キーを使用して許可されます。`ForAllValues` は、条件キーが存在する場合にのみ適用されます。

非貪欲マッチャー（`?`）を使用して、API IDと明示的に照合し、オーソリザーなどの非 API リソースを許可しないようにしています。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ScopePutToPrivateApis",
            "Effect": "Allow",
            "Action": [
                "apigateway:PUT"
            ],
            "Resource": [
                "arn:aws:apigateway:us-east-1::/restapis",
                "arn:aws:apigateway:us-east-1::/restapis/??????????"
            ],
            "Condition": {
                "ForAllValues:StringEquals": {
                    "apigateway:Resource/EndpointType": "PRIVATE"
                }
            }
        },
        {
            "Sid": "ScopeToPrivateApis",
            "Effect": "Allow",
            "Action": [
                "apigateway:DELETE",
                "apigateway:PATCH",
                "apigateway:POST"
            ],
            "Resource": [
                "arn:aws:apigateway:us-east-1::/restapis",
                "arn:aws:apigateway:us-east-1::/restapis/??????????"
            ],
            "Condition": {
                "ForAllValues:StringEquals": {
                    "apigateway:Request/EndpointType": "PRIVATE",
                    "apigateway:Resource/EndpointType": "PRIVATE"
                }
            }
        },
        {
            "Sid": "AllowResourcePolicyUpdates",
            "Effect": "Allow",
            "Action": [
                "apigateway:UpdateRestApiPolicy"
            ],
            "Resource": [
                "arn:aws:apigateway:us-east-1::/restapis/*"
            ]
        }
    ]
}
```

------

## API ルートに認可を要求する
<a name="security_iam_id-based-policy-examples-require-authorization"></a>

このポリシーにより、ルートに認可がない場合、ルートの作成または更新 ([インポート](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis.html#ImportApi)を含む) の試行が失敗します。ルートが作成または更新されていないときなど、キーが存在しないと、`ForAnyValue` は false と評価します。インポートによって複数のルートを作成することができるので、`ForAnyValue` を使用します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowUpdatesOnApisAndRoutes",
      "Effect": "Allow",
      "Action": [
        "apigateway:POST",
        "apigateway:PATCH",
        "apigateway:PUT"
      ],
      "Resource": [
        "arn:aws:apigateway:us-east-1::/apis",
        "arn:aws:apigateway:us-east-1::/apis/??????????",
        "arn:aws:apigateway:us-east-1::/apis/*/routes",
        "arn:aws:apigateway:us-east-1::/apis/*/routes/*"
      ]
    },
    {
      "Sid": "DenyUnauthorizedRoutes",
      "Effect": "Deny",
      "Action": [
        "apigateway:POST",
        "apigateway:PATCH",
        "apigateway:PUT"
      ],
      "Resource": [
        "arn:aws:apigateway:us-east-1::/apis",
        "arn:aws:apigateway:us-east-1::/apis/*"
      ],
      "Condition": {
        "ForAnyValue:StringEqualsIgnoreCase": {
          "apigateway:Request/RouteAuthorizationType": "NONE"
        }
      }
    }
  ]
}
```

------

## ユーザーが VPC リンクを作成または更新することを防止する
<a name="security_iam_id-based-policy-examples-deny-vpc-link"></a>

このポリシーは、ユーザーが VPC リンクを作成または更新することを防止します。VPC リンクを使用すると、Amazon VPC 内のリソースを VPC 外のクライアントに公開できます。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyVPCLink",
      "Effect": "Deny",
      "Action": [
        "apigateway:POST",
        "apigateway:PUT",
        "apigateway:PATCH"
      ],
      "Resource": [
        "arn:aws:apigateway:us-east-1::/vpclinks",
        "arn:aws:apigateway:us-east-1::/vpclinks/*"
      ]
    }
  ]
}
```

------

## ルーティングルールを使用するためのポリシーの例
<a name="security_iam_id-based-policy-examples-routing-mode"></a>

次のポリシーの例は、RoutingRule 条件キーを使用して、ユーザーがカスタムドメイン名から REST API にトラフィックをルーティングする方法を制御する方法を示しています。これらの例を使用して、ユーザーが作成できるルーティングルールの種類に関するきめ細かなポリシーを作成できます。詳細については、「[API ステージを REST API のカスタムドメイン名に接続するためのルーティングルール](rest-api-routing-rules.md)」を参照してください。

### カスタムドメイン名によるリクエストのルーティング方法をユーザーが変更できないようにする
<a name="security_iam_id-based-policy-examples-routing-mode-1"></a>

このポリシーは、ユーザーが `BasePathMapping`、`ApiMapping`、または `RoutingRule` を作成または更新できないようにします。これらのリソースはすべて、カスタムドメイン名がリクエストを API にルーティングする方法を変更する可能性があります。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyAccessBasePathMappingsApiMappingsRoutingRules",
      "Effect": "Deny",
      "Action": "apigateway:*",
      "Resource": [
        "arn:aws:apigateway:us-east-1::/domainnames/example.com/basepathmappings/*",
        "arn:aws:apigateway:us-east-1::/domainnames/example.com/apimappings/*",
        "arn:aws:apigateway:us-east-1:111122223333:/domainnames/example.com/routingrules/*"
      ]
    }
  ]
}
```

------

### ユーザーが特定の優先順位のルーティングルールを更新できるようにする
<a name="security_iam_id-based-policy-examples-routing-mode-2"></a>

このポリシーは、ユーザーがルーティングルールを 1001～2000 の優先度にのみ更新できるようにします。このルールを使用して、本番稼働用ルールを優先度の低いルールから分離し、ユーザーが本番稼働用ルールに影響を与えることなく優先度の低いルールを変更できるようにします。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "UpdatingRoutingRulePriorityBetween1001And2000",
      "Effect": "Allow",
      "Action": "apigateway:UpdateRoutingRule",
      "Resource": "arn:aws:apigateway:us-east-1:111122223333:/domainnames/example.com/routingrules/*",
      "Condition": {
        "NumericGreaterThanEquals": {
          "apigateway:Resource/Priority": 1001,
          "apigateway:Request/Priority": 1001
        },
       "NumericLessThanEquals": {
          "apigateway:Resource/Priority": 2000,
          "apigateway:Request/Priority": 2000
        } 
      }
    }
  ]
}
```

------

### ユーザーが特定のベースパス値のルーティングルールまたはベースパスマッピングを更新できるようにする
<a name="security_iam_id-based-policy-examples-routing-mode-3"></a>

このポリシーにより、ユーザーは `orders` で始まる任意のベースパスのベースパスマッピングのみを更新したり、`orders` で始まるベースパスに一致するルーティングルールを更新したりできます。このポリシーでは、ユーザーは `orders/create` または `orders123` のベースパスマッピングまたはルーティングルールを更新できますが、`payment/orders` は更新できません。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
      {
        "Sid": "AllowUpdateRoutingRuleUnderPathOrders",
        "Effect": "Allow",
        "Action": "apigateway:UpdateRoutingRule",
        "Resource": "arn:aws:apigateway:us-east-1:111122223333:/domainnames/example.com/routingrules/*",
        "Condition": {
            "ForAllValues:StringLike": {
                "apigateway:Request/ConditionBasePaths": ["orders*"],
                "apigateway:Resource/ConditionBasePaths": ["orders*"]
            },
            "Null":{
                 "apigateway:Request/ConditionBasePaths":"false",
                 "apigateway:Resource/ConditionBasePaths":"false"             
          }
        }
      }
  ]
}
```

------

### ユーザーがルーティングモードを特定の値に更新できるようにする
<a name="security_iam_id-based-policy-examples-routing-mode-4"></a>

このポリシーにより、ユーザーはルーティングモードを `API_MAPPING_ONLY` および `ROUTING_RULE_THEN_API_MAPPING` にのみ更新できるようになります。ルーティングモードの詳細については、「[カスタムドメイン名のルーティングモードを設定する](set-routing-mode.md)」を参照してください。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
        {
           "Sid": "AllowUpdateRoutingModeToAnythingWithApiMapping",
           "Effect": "Allow",
           "Action": ["apigateway:PATCH"],
           "Resource": "arn:aws:apigateway:us-east-1::/domainnames/example.com",
              "Condition": {
               "StringLike": {
                   "apigateway:Request/RoutingMode":"*API_MAPPING*"
               }
           }
       }
    ]
}
```

------

# Amazon API Gateway のリソースベースのポリシーの例
<a name="security_iam_resource-based-policy-examples"></a>

リソースベースのポリシーの例については、「[API Gateway リソースポリシーの例](apigateway-resource-policies-examples.md)」を参照してください。

# Amazon API Gateway の ID とアクセスのトラブルシューティング
<a name="security_iam_troubleshoot"></a>

次の情報は、API Gateway と IAM の使用に伴って発生する可能性がある一般的な問題の診断や修復に役立ちます。

**Topics**
+ [API Gateway でアクションを実行する権限がない](#security_iam_troubleshoot-no-permissions)
+ [iam:PassRole を実行する権限がありません](#security_iam_troubleshoot-passrole)
+ [AWS アカウント外のユーザーに API Gateway リソースへのアクセスを許可したい](#security_iam_troubleshoot-cross-account-access)

## API Gateway でアクションを実行する権限がない
<a name="security_iam_troubleshoot-no-permissions"></a>

アクションを実行する権限がないというエラーが表示された場合は、そのアクションを実行できるようにポリシーを更新する必要があります。

次のエラー例は、`mateojackson` IAM ユーザーがコンソールを使用して、ある `my-example-widget` リソースに関する詳細情報を表示しようとしたことを想定して、その際に必要な `apigateway:GetWidget` アクセス許可を持っていない場合に発生するものです。

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: apigateway:GetWidget on resource: my-example-widget because no identity-based policy allows the GetWidget action 
```

この場合、`apigateway:GetWidget` アクションを使用して `my-example-widget` リソースへのアクセスを許可するように、`mateojackson` ユーザーのポリシーを更新する必要があります。

サポートが必要な場合は、AWS 管理者に問い合わせてください。サインイン認証情報を提供した担当者が管理者です。

## iam:PassRole を実行する権限がありません
<a name="security_iam_troubleshoot-passrole"></a>

`iam:PassRole` アクションを実行する権限がないというエラーが表示された場合は、ポリシーを更新して API Gateway にロールを渡すことができるようにする必要があります。

一部の AWS のサービス では、新しいサービスロールやサービスリンクロールを作成せずに、既存のロールをサービスに渡すことができます。そのためには、サービスにロールを渡すアクセス許可が必要です。

以下の例のエラーは、`marymajor` という IAM ユーザーがコンソールを使用して API Gateway でアクションを実行しようする場合に発生します。ただし、このアクションをサービスが実行するには、サービスロールから付与されたアクセス許可が必要です。Mary には、ロールをサービスに渡すアクセス許可がありません。

```
User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole
```

この場合、Mary のポリシーを更新してメアリーに `iam:PassRole` アクションの実行を許可する必要があります。

サポートが必要な場合は、AWS 管理者に問い合わせてください。サインイン認証情報を提供した担当者が管理者です。

## AWS アカウント外のユーザーに API Gateway リソースへのアクセスを許可したい
<a name="security_iam_troubleshoot-cross-account-access"></a>

他のアカウントのユーザーや組織外のユーザーが、リソースへのアクセスに使用できるロールを作成できます。ロールの引き受けを委託するユーザーを指定できます。リソースベースのポリシーまたはアクセスコントロールリスト (ACL) をサポートするサービスの場合、それらのポリシーを使用して、リソースへのアクセスを付与できます。

詳細については、以下を参照してください。
+ API Gateway がこれらの機能をサポートしているかどうかについては、「[Amazon API Gateway と IAM の連携方法](security_iam_service-with-iam.md)」を参照してください。
+ 所有している AWS アカウント全体のリソースへのアクセス権を提供する方法については、*IAM ユーザーガイド*の「[所有している別の AWS アカウント アカウントへのアクセス権を IAM ユーザーに提供](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html)」を参照してください。
+ サードパーティの AWS アカウント にリソースへのアクセス権を提供する方法については、「*IAM ユーザーガイド*」の「[サードパーティが所有する AWS アカウント へのアクセス権を付与する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html)」を参照してください。
+ ID フェデレーションを介してアクセスを提供する方法については、*IAM ユーザーガイド* の [外部で認証されたユーザー (ID フェデレーション) へのアクセスの許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html) を参照してください。
+ クロスアカウントアクセスにおけるロールとリソースベースのポリシーの使用方法の違いについては、*IAM ユーザーガイド* の [IAM でのクロスアカウントのリソースへのアクセス](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html) を参照してください。

# API Gateway でのサービスリンクロールの使用
<a name="using-service-linked-roles"></a>

Amazon API Gateway は、AWS Identity and Access Management (IAM) [サービスリンクロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)を使用します。サービスにリンクされたロールは、API Gateway に直接リンクされた一意のタイプの IAM ロールです。サービスリンクロールは API Gateway によって事前定義されており、サービスがユーザーに代わって AWS の他のサービスを呼び出すために必要なすべての許可が含まれています。

サービスにリンクされたロールを使用することで、必要なアクセス許可を手動で追加する必要がなくなるため、API Gateway の設定が簡単になります。API Gateway は、サービスにリンクされたロールのアクセス許可を定義します。別の指定がない限り、API Gateway のみがそのロールを引き受けることができます。定義される許可は、信頼ポリシーと許可ポリシーに含まれており、その許可ポリシーを他の IAM エンティティにアタッチすることはできません。

サービスにリンクされたロールを削除するには、まずその関連リソースを削除します。これにより、リソースに対するアクセス許可が誤って削除されることがなくなり、API Gateway リソースは保護されます。

サービスにリンクされたロールをサポートする他のサービスについては、「[IAM と連携するAWS サービス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)」を参照して、**サービスにリンクされたロール**列が**はい**になっているサービスを見つけてください。サービスにリンクされたロールに関するドキュメントをサービスで表示するには、[**はい**] リンクを選択します。

## API Gateway のサービスにリンクされたロールのアクセス許可
<a name="slr-permissions"></a>

API Gateway は、**AWSServiceRoleForAPIGateway** という名前のサービスリンクロールを使用します。これにより、API Gateway がユーザーに代わって Elastic Load Balancing、Amazon Data Firehose、その他のサービスリソースにアクセスすることが許可されます。

AWSServiceRoleForAPIGateway サービスリンクロールは、以下のサービスを信頼してロールを引き受けます。
+ `ops.apigateway.amazonaws.com`

ロールのアクセス許可ポリシーは、指定したリソースに対して以下のアクションを完了することを API Gateway に許可します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "elasticloadbalancing:AddListenerCertificates",
                "elasticloadbalancing:RemoveListenerCertificates",
                "elasticloadbalancing:ModifyListener",
                "elasticloadbalancing:DescribeListeners",
                "elasticloadbalancing:DescribeLoadBalancers",
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords",
                "xray:GetSamplingTargets",
                "xray:GetSamplingRules",
                "logs:CreateLogDelivery",
                "logs:GetLogDelivery",
                "logs:UpdateLogDelivery",
                "logs:DeleteLogDelivery",
                "logs:ListLogDeliveries",
                "servicediscovery:DiscoverInstances"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "firehose:DescribeDeliveryStream",
                "firehose:PutRecord",
                "firehose:PutRecordBatch"
            ],
            "Resource": "arn:aws:firehose:*:*:deliverystream/amazon-apigateway-*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "acm:DescribeCertificate",
                "acm:GetCertificate"
            ],
            "Resource": "arn:aws:acm:*:*:certificate/*"
        },
        {
            "Effect": "Allow",
            "Action": "ec2:CreateNetworkInterfacePermission",
            "Resource": "arn:aws:ec2:*:*:network-interface/*"
        },
        {
            "Effect": "Allow",
            "Action": "ec2:CreateTags",
            "Resource": "arn:aws:ec2:*:*:network-interface/*",
            "Condition": {
                "ForAllValues:StringEquals": {
                    "aws:TagKeys": [
                        "Owner",
                        "VpcLinkId"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:ModifyNetworkInterfaceAttribute",
                "ec2:DeleteNetworkInterface",
                "ec2:AssignPrivateIpAddresses",
                "ec2:CreateNetworkInterface",
                "ec2:DeleteNetworkInterfacePermission",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribeAvailabilityZones",
                "ec2:DescribeNetworkInterfaceAttribute",
                "ec2:DescribeVpcs",
                "ec2:DescribeNetworkInterfacePermissions",
                "ec2:UnassignPrivateIpAddresses",
                "ec2:DescribeSubnets",
                "ec2:DescribeRouteTables",
                "ec2:DescribeSecurityGroups"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "servicediscovery:GetNamespace",
            "Resource": "arn:aws:servicediscovery:*:*:namespace/*"
        },
        {
            "Effect": "Allow",
            "Action": "servicediscovery:GetService",
            "Resource": "arn:aws:servicediscovery:*:*:service/*"
        }
    ]
}
```

------

サービスにリンクされたロールの作成、編集、削除を IAM エンティティ (ユーザー、グループ、ロールなど) に許可するには、アクセス許可を設定する必要があります。詳細については、*IAM ユーザーガイド*の「[サービスにリンクされたロールの許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)」を参照してください。

## API Gateway のサービスにリンクされたロールの作成
<a name="create-slr"></a>

サービスにリンクされたロールを手動で作成する必要はありません。AWS マネジメントコンソール、AWS CLI、または AWS API で、API、カスタムドメイン名、または VPC リンクを作成すると、API Gateway がサービスリンクロールを作成します。

このサービスにリンクされたロールを削除した後で再度作成する必要が生じた場合は、同じ方法でアカウントにロールを再作成できます。API、カスタムドメイン名、または VPC リンクを作成すると、API Gateway によってサービスリンクされたロールが再び作成されます。

## API Gateway のサービスにリンクされたロールの編集
<a name="edit-slr"></a>

API Gateway では、AWSServiceRoleForApigateWay サービスリンクロールを編集することはできません。サービスリンクロールを作成した後は、さまざまなエンティティがロールを参照する可能性があることから、ロール名を変更することはできません。ただし、IAM を使用したロール記述の編集はできます。詳細については、*IAM ユーザーガイド*の「[サービスにリンクされたロールの編集](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#edit-service-linked-role)」を参照してください。

## API Gateway のサービスにリンクされたロールの削除
<a name="delete-slr"></a>

サービスにリンクされたロールが必要な機能またはサービスが不要になった場合には、そのロールを削除することをお勧めします。そうすることで、使用していないエンティティがアクティブにモニタリングされたり、メンテナンスされたりすることがなくなります。ただし、手動で削除する前に、サービスにリンクされたロールのリソースをクリーンアップする必要があります。

**注記**  
リソースを削除する際に、API Gateway サービスでそのロールが使用されている場合、削除は失敗することがあります。失敗した場合は、数分待ってから再度オペレーションを実行してください。

**AWSServiceRoleForApigateWay で使用される API Gateway リソースを削除するには**

1. API Gateway ([https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway/)) コンソールを開きます。

1. サービスにリンクされたロールを使用する API、カスタムドメイン名、または VPC リンクに移動します。

1. コンソールを使用してリソースを削除します。

1. この手順を繰り返して、サービスにリンクされたロールを使用するすべての API、カスタムドメイン名、または VPC リンクを削除します。

**サービスリンクロールを IAM で手動削除するには**

IAM コンソール、AWS CLI、または AWS API を使用して、AWSServiceRoleForAPIGateway サービスリンクロールを削除します。詳細については、*IAM ユーザーガイド*の「[サービスにリンクされたロールの削除](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#delete-service-linked-role)」を参照してください。

## API Gateway サービスリンクロールでサポートされるリージョン
<a name="slr-regions"></a>

API Gateway は、サービスを利用できるすべてのリージョンで、サービスにリンクされたロールの使用をサポートします。詳細については、「[AWS サービスエンドポイント](https://docs.aws.amazon.com/general/latest/gr/rande.html)」を参照してください。

## AWS 管理ポリシーに対する API Gateway の更新
<a name="security-iam-awsmanpol-updates"></a>



API Gateway の AWS 管理ポリシーの更新に関する詳細を、このサービスがこれらの変更の追跡を開始した以降の分について表示します。このページの変更に関する自動通知については、API Gateway の[ドキュメントの履歴](history.md)ページの RSS フィードを購読してください。


| 変更 | 説明 | 日付 | 
| --- | --- | --- | 
|  `acm:GetCertificate` のサポートが `AWSServiceRoleForAPIGateway` ポリシーに追加されました。  |  `AWSServiceRoleForAPIGateway` ポリシーに ACM `GetCertificate` API アクションを呼び出すアクセス許可が含まれるようになりました。  | 2021 年 7 月 12 日 | 
|  API Gateway が変更の追跡を開始しました  |  API Gateway が AWS 管理ポリシーの変更の追跡を開始しました。  | 2021 年 7 月 12 日 | 