IAM アクセス許可を使用して REST API へのアクセスを制御する
IAM アクセス許可 を使用して 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 アクセス許可モデル
API デベロッパーが API Gateway で API を作成および管理することを許可するには、指定した API デベロッパーが必要な API エントリを作成、更新、デプロイ、表示、または削除することを許可する IAM アクセス許可ポリシーを作成する必要があります。アクセス許可ポリシーをユーザー、ロール、またはグループにアタッチします。
アクセス権限を付与するには、ユーザー、グループ、またはロールにアクセス許可を追加します。
-
AWS IAM Identity Center のユーザーとグループ:
アクセス許可セットを作成します。「AWS IAM Identity Center ユーザーガイド」の「権限設定を作成する」の手順に従ってください。
-
IAM 内で、ID プロバイダーによって管理されているユーザー:
ID フェデレーションのロールを作成します。詳細については、「IAM ユーザーガイド」の「サードパーティー ID プロバイダー (フェデレーション) 用のロールの作成」を参照してください。
-
IAM ユーザー:
-
ユーザーが担当できるロールを作成します。手順については、「IAM ユーザーガイド」の「IAM ユーザー用ロールの作成」を参照してください。
-
(お奨めできない方法) ポリシーをユーザーに直接アタッチするか、ユーザーをユーザーグループに追加する。詳細については、「IAM ユーザーガイド」の「ユーザー (コンソール) へのアクセス権限の追加」を参照してください。
-
アクセス権限モデルを使用する方法の詳細については、「API Gateway のアイデンティティベースのポリシー」を参照してください。
API を呼び出すための API Gateway アクセス許可モデル
API の呼び出しや API キャッシュの更新を API 発信者に許可するには、ユーザー認証が有効な API メソッドを呼び出すことを、特定の API 発信者に許可する IAM ポリシーを作成する必要があります。API デベロッパーは、メソッドの authorizationType
プロパティを AWS_IAM
に設定して、発信者が認証対象のユーザーの認証情報を送信することを要求します。次に、ユーザー、グループ、またはロールにポリシーをアタッチします。
この IAM アクセス許可ポリシーのステートメントで、IAM Resource
エレメントには、特定の HTTP 動詞および API Gateway リソースパスによって識別されるデプロイ API されたメソッドのリストが含まれます。IAM Action
エレメントには、API Gateway の必要な API 実行アクションが含まれます。これらのアクションには、execute-api:Invoke
や execute-api:InvalidateCache
が含まれます。execute-api
は、API Gateway の基盤となる API 実行コンポーネントを示します。
アクセス権限モデルを使用する方法の詳細については、「API を呼び出すためのアクセスの制御」を参照してください。
API をバックエンドの AWS サービス (AWS Lambda など) と統合すると、API Gateway には、API 呼び出し元に代わって AWS の統合されたリソースにアクセスする (Lambda 関数を呼び出すなど) ための許可も必要です。これらのアクセス許可を付与するには、API Gateway 用の AWS のサービスタイプの IAM ロールを作成します。IAM 管理コンソールでこのロールを作成すると、API Gateway がこのロールを引き受けることを許可された信頼されたエンティティであることを宣言する以下の IAM 信頼ポリシーがロールに含まれます。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "apigateway.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
CLI の create-role コマンドまたは対応する SDK メソッドを呼び出して IAM ロールを作成する場合、上記の信頼ポリシーを assume-role-policy-document
の入力パラメータとして指定する必要があります。このようなポリシーを、IAM マネジメントコンソールで直接作成、または AWS CLI create-policy コマンド、もしくは対応する SDK メソッドを呼び出して作成しないでください。
API Gateway で統合された AWS のサービスを呼び出すには、このロールに、統合された AWS のサービスを呼び出すための適切な IAM アクセス許可ポリシーもアタッチする必要があります。たとえば、Lambda 関数を呼び出すには、IAM ロールに次の IAM アクセス許可ポリシーを含める必要があります。
{ "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 のサービスにアクセスするよう要求できます。