API Gateway リソースポリシーを作成して API にアタッチする - Amazon API Gateway

API Gateway リソースポリシーを作成して API にアタッチする

API 実行サービスを呼び出して API にアクセスすることをユーザーに許可するには、API Gateway リソースポリシーを作成して API にアタッチする必要があります。ポリシーを API にアタッチすると、ポリシー内のアクセス許可が API のメソッドに適用されます。リソースポリシーを更新する場合は、API をデプロイする必要があります。

前提条件

API Gateway リソースポリシーを更新するには、apigateway:UpdateRestApiPolicy アクセス許可と apigateway:PATCH アクセス許可が必要です。

エッジ最適化 API またはリージョン API の場合、リソースポリシーを作成時またはデプロイ後に API にアタッチできます。プライベート API の場合、リソースポリシーなしで API をデプロイすることはできません。詳細については、「API Gateway のプライベート REST API」を参照してください。

リソースポリシーを API Gateway API にアタッチする

次の手順は、リソースポリシーを API Gateway API にアタッチする方法を示しています。

AWS Management Console
リソースポリシーを API Gateway API にアタッチするには
  1. https://console.aws.amazon.com/apigateway で API Gateway コンソールにサインインします。

  2. REST API を選択します。

  3. 左のナビゲーションペインで、[リソースポリシー] を選択します。

  4. [Create policy] を選択します。

  5. (オプション) [テンプレートを選択] を選択してサンプルポリシーを生成します。

    ポリシーの例では、プレースホルダーは、二重波括弧 ("{{placeholder}}") で囲まれています。各プレースホルダー (波括弧を含む) を必要な情報に置き換えます。

  6. どのテンプレート例も使用しない場合は、リソースポリシーを入力します。

  7. [Save changes] (変更の保存) をクリックします。

API が API Gateway コンソールで以前にデプロイ済みの場合、リソースポリシーを有効にするには再デプロイする必要があります。

AWS CLI

AWS CLI を使用し、新しい API を作成してこれにリソースポリシーをアタッチするには、次のように create-rest-api コマンドを呼び出します。

aws apigateway create-rest-api \ --name "api-name" \ --policy "{\"jsonEscapedPolicyDocument\"}"

AWS CLI を使用して、リソースポリシーを既存の API にアタッチするには、次のように update-rest-api コマンドを呼び出します。

aws apigateway update-rest-api \ --rest-api-id api-id \ --patch-operations op=replace,path=/policy,value='"{\"jsonEscapedPolicyDocument\"}"'
AWS CloudFormation

AWS CloudFormation を使用して、リソースポリシーを持つ API を作成できます。次の例では、サンプルリソースポリシー 例: 送信元の IP アドレスまたは IP アドレスの範囲に基づき、API トラフィックを拒否する を使用して REST API を作成します。

AWSTemplateFormatVersion: 2010-09-09 Resources: Api: Type: 'AWS::ApiGateway::RestApi' Properties: Name: testapi Policy: Statement: - Action: 'execute-api:Invoke' Effect: Allow Principal: '*' Resource: 'execute-api/*' - Action: 'execute-api:Invoke' Effect: Deny Principal: '*' Resource: 'execute-api/*' Condition: IpAddress: 'aws:SourceIp': ["192.0.2.0/24", "198.51.100.0/24" ] Version: 2012-10-17 Resource: Type: 'AWS::ApiGateway::Resource' Properties: RestApiId: !Ref Api ParentId: !GetAtt Api.RootResourceId PathPart: 'helloworld' MethodGet: Type: 'AWS::ApiGateway::Method' Properties: RestApiId: !Ref Api ResourceId: !Ref Resource HttpMethod: GET ApiKeyRequired: false AuthorizationType: NONE Integration: Type: MOCK ApiDeployment: Type: 'AWS::ApiGateway::Deployment' DependsOn: - MethodGet Properties: RestApiId: !Ref Api StageName: test

リソースポリシーのトラブルシューティング

次のトラブルシューティングガイダンスは、リソースポリシーの問題を解決するのに役立ちます。

API が {"Message":"User: anonymous is not authorized to perform: execute-api:Invoke on resource: arn:aws:execute-api:us-east-1:********/****/****/"} を返します

リソースポリシーで、プリンシパルを次のように AWS プリンシパルに設定する場合:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", ""Principal": { "AWS": [ "arn:aws:iam::account-id:role/developer", "arn:aws:iam::account-id:role/Admin" ] }, "Action": "execute-api:Invoke", "Resource": [ "execute-api:/*" ] }, ... }

API のすべてのメソッドに AWS_IAM 認証を使用する必要があります。使用しない場合、API は前のエラーメッセージを返します。メソッドの AWS_IAM 認証を有効にする方法の詳細については、「API Gateway の REST API のメソッド」を参照してください。

リソースポリシーが更新されません

API 作成後にリソースポリシーを更新する場合は、更新後のポリシーをアタッチしてから API をデプロイし、変更を伝達する必要があります。ポリシーのみ、更新または保存した場合、API のランタイム動作が変更されることはありません。API のデプロイの詳細については、「API Gateway で REST API をデプロイする」を参照してください。

リソースポリシーから次のエラーが返されます: 無効なポリシードキュメント。ポリシー構文を確認し、プリンシパルが有効であることを確認してください。

このエラーのトラブルシューティングを行うには、まずポリシー構文を確認することをお勧めします。詳細については、「Amazon API Gateway のアクセスポリシー言語の概要」を参照してください。また、指定したすべてのプリンシパルが有効であり、削除されていないことを確認することをお勧めします。

さらに、API がオプトインリージョンにある場合は、リソースポリシー内のすべてのアカウントでリージョンが有効になっていることを確認します。