Amazon API Gateway
開発者ガイド

API へのクロスアカウントアクセスを制御する

API へのアクセスを管理するには、IAM アクセス権限ポリシーを作成して、API エンティティの作成、更新、デプロイ、表示、削除を許可または拒否するユーザーを制御します。ポリシーは、ユーザーを表す IAM ユーザー、ユーザーが属する IAM グループ、またはユーザーが引き受ける IAM ロールにアタッチします。

API 用に作成する IAM ポリシーでは、Condition エレメントを使用して、特定の Lambda 統合またはオーソライザーにのみアクセスを許可します。

Condition ブロックでは、ポリシー内の条件が、リクエスト内の値に合うようにブール条件演算子を使用しています。StringXxx 条件演算子は、AWS 統合 (値が Lambda 関数の ARN) と HTTP 統合 (値が HTTP URI) のどちらでも使用できます。次の StringXxx 条件演算子がサポートされています: StringEqualsStringNotEqualsStringEqualsIgnoreCaseStringNotEqualsIgnoreCaseStringLikeStringNotLike。詳細については、IAM ユーザーガイドの「文字列条件演算子」を参照してください。

クロスアカウントの Lambda オーソライザーの IAM ポリシー

クロスアカウントの Lambda オーソライザー関数を制御する IAM ポリシーの例を以下に示します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "apigateway:POST" ], "Resource": [ "arn:aws:apigateway:[region]::/restapis/restapi_id/authorizers" ], //Create Authorizer operation is allowed only with the following Lambda function "Condition": { "StringEquals": { "apigateway:AuthorizerUri": "arn:aws:apigateway:region:lambda:path/2015-03-31/functions/arn:aws:lambda:region:123456789012:function:example/invocations" } } } ] }

クロスアカウントの Lambda 統合の IAM ポリシー

クロスアカウント統合で、特定のリソースのオペレーション (例: 特定の Lambda 関数の put-integration) を制限するには、Condition エレメントをポリシーに追加して、影響を受けるリソース (Lambda 関数) を指定します。

クロスアカウントの Lambda 統合関数を制御する IAM ポリシーの例を以下に示します。

別の AWS アカウントに「integration:put」または「put-integration」を呼び出すアクセス権限を付与して、API に Lambda 統合を設定するには、次のステートメントを IAM ポリシーに含めることができます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "apigateway:PUT" ], "Resource": [ "arn:aws:apigateway:api-region::/restApis/api-id/resources/resource-id/methods/GET/integration" ], //PutIntegration is only valid with the following Lambda function "Condition": { "StringEquals": { "apigateway:IntegrationUri": "arn:aws:lambda:region:account-id:function:lambda-function-name" } } } ] }

OpenAPI ファイルのインポート時に使用する Lambda 関数の別のアカウントによる管理を許可する

別の AWS アカウントに「restapi:import」または「import-rest-api」を呼び出すアクセス権限を付与して、OpenAPI ファイルをインポートするには、次のステートメントを IAM ポリシーに含めることができます。

以下の Condition ステートメントでは、文字列 "lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:account-id:function:lambda-function-name" は Lambda 関数の完全な ARN です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "apigateway:POST" ], "Resource": "arn:aws:apigateway:*::/restapis", "Condition": { "StringLike": { "apigateway:IntegrationUri": [ "arn:aws:apigateway:apigateway-region:lambda:path/2015-03-31/functions/arn:aws:lambda:lambda-region:account-id:function:lambda-function-name/invocations" ] } } }, { "Effect": "Allow", "Action": [ "apigateway:POST" ], "Resource": "arn:aws:apigateway:*::/restapis", "Condition": { "StringLike": { "apigateway:AuthorizerUri": [ "arn:aws:apigateway:apigateway-region:lambda:path/2015-03-31/functions/arn:aws:lambda:lambda-region:account-id:function:lambda-function-name/invocations" ] } } } ] }