Amazon API Gateway のアイデンティティベースのポリシーの例
デフォルトでは、IAM ユーザーとロールには API Gateway リソースを作成または変更するためのアクセス許可はありません。AWS Management Console、AWS CLI、または AWS SDK を使用してタスクを実行することもできません。IAM 管理者は、ユーザーとロールに必要な、指定されたリソースで特定の API オペレーションを実行するアクセス許可をユーザーとロールに付与する IAM ポリシーを作成する必要があります。続いて、管理者はそれらのアクセス許可が必要な IAM ユーザーまたはグループにそのポリシーをアタッチします。
IAM ポリシーの作成方法の詳細については、 IAM ユーザーガイド の 「[JSON] タブでのポリシーの作成 」を参照してください。API Gateway 固有のアクション、リソース、条件の詳細については、「Amazon API Gateway Management のアクション、リソース、および条件キー」および「Amazon API Gateway Management V2 のアクション、リソース、および条件キー」を参照してください。
トピック
ポリシーに関するベストプラクティス
ID ベースのポリシーは、あるユーザーがアカウント内で API Gateway リソースを作成、アクセス、または削除できるどうかを決定します。これらのアクションを実行すると、AWS アカウントに料金が発生する可能性があります。アイデンティティベースポリシーを作成したり編集したりする際には、以下のガイドラインと推奨事項に従ってください:
-
AWS マネージドポリシーを使用して開始し、最小特権の許可に移行する – ユーザーとワークロードへの許可の付与を開始するには、多くの一般的なユースケースのために許可を付与する AWS マネージドポリシーを使用します。これらは AWS アカウントで使用できます。ユースケース別に AWS カスタマーマネージドポリシーを定義して、マネージドポリシーを絞り込むことをお勧めします。詳細については、「IAM ユーザーガイド」の「AWS マネージドポリシー」または「ジョブ機能の AWS マネージドポリシー」を参照してください。
-
最小特権を適用する – IAM ポリシーで許可を設定する場合は、タスクの実行に必要な許可のみを付与します。これを行うには、特定の条件下で特定のリソースに対して実行できるアクションを定義します。これは、最小特権アクセス許可とも呼ばれています。IAM を使用して許可を適用する方法の詳細については、「IAM ユーザーガイド」の「IAM でのポリシーとアクセス許可」を参照してください。
-
IAM ポリシーで条件を使用してアクセスをさらに制限する - ポリシーに条件を追加して、アクションやリソースへのアクセスを制限できます。例えば、ポリシー条件を記述して、すべてのリクエストを SSL を使用して送信するように指定できます。また、AWS CloudFormation などの特定の AWS のサービス を介して使用する場合、条件を使用してサービスアクションへのアクセスを許可することもできます。詳細については、「IAM ユーザーガイド」の「IAM JSON ポリシー要素:条件」を参照してください。
-
IAM Access Analyzer を使用して IAM ポリシーを検証し、安全で機能的な権限を確保する - IAM Access Analyzer は、新規および既存のポリシーを検証して、ポリシーが IAM ポリシー言語 (JSON) および IAM のベストプラクティスに準拠するようにします。IAM アクセスアナライザーは 100 を超えるポリシーチェックと実用的な推奨事項を提供し、安全で機能的なポリシーの作成をサポートします。詳細については、「IAM ユーザーガイド」の「IAM Access Analyzer でポリシーを検証する」を参照してください。
-
多要素認証 (MFA) を要求する – AWS アカウントで IAM ユーザーまたはルートユーザーを要求するシナリオがある場合は、セキュリティを強化するために MFA をオンにします。API オペレーションが呼び出されるときに MFA を必須にするには、ポリシーに MFA 条件を追加します。詳細については、「IAM ユーザーガイド」の「MFA を使用した安全な API アクセス」を参照してください。
IAM でのベストプラクティスの詳細については、「IAM ユーザーガイド」の「IAM でのセキュリティベストプラクティス」を参照してください。
ユーザーが自分の権限を表示できるようにする
この例では、ユーザーアイデンティティにアタッチされたインラインおよびマネージドポリシーの表示を 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": "*" } ] }
シンプルな読み取りアクセス許可
このポリシーの例は、AWS リージョン us-east-1 の a123456789
の識別子を使用して、HTTP または WebSocket API のすべてのリソースに関する情報を取得する許可をユーザーに付与します。リソース arn:aws:apigateway:
には、認証者やデプロイなど、API のすべてのサブリソースが含まれます。us-east-1
::/apis/a123456789/*
REQUEST または JWT オーライザだけを作成する
このポリシーの例を参考にすれば、ユーザーが インポートを含む、REQUEST
または JWT
オーソリザーだけを使用して API を作成できます。ポリシーの Resource
セクションによると、arn:aws:apigateway:us-east-1::/apis/??????????
では、リソースは最大10 文字にする必要があります。これはAPI のサブリソースでは除外されます。この例では、ForAllValues
セクションの Condition
を使用します。これは、ユーザーが API をインポートすることで複数のオーソリザーを一度に作成できるためです。
デフォルトの execute-api
エンドポイントが無効になっていることを要求する
このポリシーの例は、DisableExecuteApiEndpoint
が true
の場合に、ユーザーが API を作成、更新、またはインポートすることを示してます。DisableExecuteApiEndpoint
が true
の場合は、クライアントは API を呼び出すために、デフォルトの execute-api
エンドポイントを使用できません。
BoolIfExists
の条件を使用して、 DisableExecuteApiEndpoint
条件キーが入力されない API を更新する呼び出しを処理します。ユーザーが API を作成またはインポートしようとすると、DisableExecuteApiEndpoint
条件キーは常に入力されます。
apis/*
リソースはオーソリザーやメソッドなどのサブリソースもキャプチャするため、明示的に Deny
ステートメントを使用して API だけを範囲とします。
ユーザーにプライベート REST API の作成または更新のみを許可する
このポリシーの例は、ユーザーが PRIVATE
API のみを作成することを必須とし、API を PRIVATE
から別のタイプ (REGIONAL
など) に変更する可能性がある更新が行われないように条件キーを使用します。
ForAllValues
を使用して、API に追加されるすべての EndpointType
が PRIVATE
であることを義務付けています。API に対する更新はいずれも、それが PRIVATE
の場合に限り、リソース条件キーを使用して許可されます。ForAllValues
は、条件キーが存在する場合にのみ適用されます。
非貪欲マッチャー(?
)を使用して、API IDと明示的に照合し、オーソリザーなどの非 API リソースを許可しないようにしています。
API ルートに認可を要求する
このポリシーにより、ルートに認可がない場合、ルートの作成または更新 (インポートを含む) の試行が失敗します。ルートが作成または更新されていないときなど、キーが存在しないと、ForAnyValue
は false と評価します。インポートによって複数のルートを作成することができるので、ForAnyValue
を使用します。
ユーザーが VPC リンクを作成または更新することを防止する
このポリシーは、ユーザーが VPC リンクを作成または更新することを防止します。VPC リンクを使用すると、Amazon VPC 内のリソースを VPC 外のクライアントに公開できます。
ルーティングルールを使用するためのポリシーの例
次のポリシーの例は、RoutingRule 条件キーを使用して、ユーザーがカスタムドメイン名から REST API にトラフィックをルーティングする方法を制御する方法を示しています。これらの例を使用して、ユーザーが作成できるルーティングルールの種類に関するきめ細かなポリシーを作成できます。詳細については、「API ステージを REST API のカスタムドメイン名に接続するためのルーティングルール」を参照してください。
カスタムドメイン名によるリクエストのルーティング方法をユーザーが変更できないようにする
このポリシーは、ユーザーが BasePathMapping
、ApiMapping
、または RoutingRule
を作成または更新できないようにします。これらのリソースはすべて、カスタムドメイン名がリクエストを API にルーティングする方法を変更する可能性があります。
ユーザーが特定の優先順位のルーティングルールを更新できるようにする
このポリシーは、ユーザーがルーティングルールを 1001~2000 の優先度にのみ更新できるようにします。このルールを使用して、本番稼働用ルールを優先度の低いルールから分離し、ユーザーが本番稼働用ルールに影響を与えることなく優先度の低いルールを変更できるようにします。
ユーザーが特定のベースパス値のルーティングルールまたはベースパスマッピングを更新できるようにする
このポリシーにより、ユーザーは orders
で始まる任意のベースパスのベースパスマッピングのみを更新したり、orders
で始まるベースパスに一致するルーティングルールを更新したりできます。このポリシーでは、ユーザーは orders/create
または orders123
のベースパスマッピングまたはルーティングルールを更新できますが、payment/orders
は更新できません。
ユーザーがルーティングモードを特定の値に更新できるようにする
このポリシーにより、ユーザーはルーティングモードを API_MAPPING_ONLY
および ROUTING_RULE_THEN_API_MAPPING
にのみ更新できるようになります。ルーティングモードの詳細については、「カスタムドメイン名のルーティングモードを設定する」を参照してください。