AWS Lambda 関数 URL オリジンへのアクセスを制限する
CloudFront には、Lambda 関数 URL オリジンへのアクセスを制限するためのオリジンアクセスコントロール (OAC) が用意されています。
新しい OAC を作成する
CloudFront で新しい OAC を設定するには、以下のトピックに示す手順を実行します。
注記
Lambda 関数 URL で PUT
メソッドまたは POST
メソッドを使用する場合、ユーザーは CloudFront にリクエストを送信するときに x-amz-content-sha256
ヘッダーにペイロードハッシュ値を含める必要があります。Lambda は、署名されていないペイロードをサポートしていません。
前提条件
OAC を作成して設定する前に、Lambda 関数 URL をオリジンとして持つ CloudFront ディストリビューションが必要です。詳細については、「Lambda 関数 URL を使用する」を参照してください。
Lambda 関数 URL へのアクセス許可を OAC に付与する
CloudFront ディストリビューションで OAC を作成または設定する前に、Lambda 関数 URL へのアクセス許可が OAC にあることを確認します。これは、CloudFront ディストリビューションを作成した後で、ディストリビューション設定で Lambda 関数 URL に OAC を追加する前に行います。
注記
Lambda 関数 URL の IAM ポリシーを更新するには、AWS Command Line Interface (AWS CLI) を使用する必要があります。現時点では、Lambda コンソールでの IAM ポリシーの編集はサポートされていません。
次の AWS CLI コマンドは、CloudFront サービスプリンシパル (cloudfront.amazonaws.com
) に Lambda 関数 URL へのアクセスを許可します。ポリシーの Condition
要素は、Lambda 関数 URL を含む CloudFront ディストリビューションを対象とするリクエストに限り、Lambda へのアクセス許可を CloudFront に付与します。
例 : CloudFront OAC への読み取り専用アクセスを許可するようにポリシーを更新する AWS CLI コマンド
次の AWS CLI コマンドは、CloudFront ディストリビューション (
) に Lambda E1PDK09ESKHJWT
へのアクセスを許可します。FUNCTION_URL_NAME
aws lambda add-permission \ --statement-id "AllowCloudFrontServicePrincipal" \ --action "lambda:InvokeFunctionUrl" \ --principal "cloudfront.amazonaws.com" \ --source-arn "arn:aws:cloudfront::
123456789012
:distribution/E1PDK09ESKHJWT
" \ --function-nameFUNCTION_URL_NAME
注記
作成したディストリビューションに Lambda 関数 URL へのアクセス許可がない場合は、CloudFront コンソールで [CLI コマンドをコピー] を選択し、このコマンドをコマンドラインターミナルから入力できます。詳細については、「AWS Lambda デベロッパーガイド」の「AWS のサービスへのアクセス権を関数に付与する」を参照してください。
OAC を作成する
OAC を作成するには、AWS Management Console、AWS CloudFormation、AWS CLI、または CloudFront API を使用できます。
オリジンアクセスコントロールの詳細設定
CloudFront OAC 機能には、特定のユースケースのみを対象とした詳細設定が含まれています。詳細設定が特に必要でない限り、推奨設定を使用してください。
OAC には、[署名ビヘイビア] (コンソール) または SigningBehavior
(API、CLI、AWS CloudFormation) という名前の設定が含まれています。この設定では、次のオプションを使用できます。
- オリジンリクエストに常に署名する (推奨設定)
-
コンソールの [Sign requests (recommended)] (署名リクエスト (推奨))、または API、CLI、および AWS CloudFormation の
always
という設定を使用することをお勧めします。この設定の場合、CloudFront は Lambda 関数 URL に送信するすべてのリクエストに常に署名します。 - オリジンリクエストに署名しない
-
この設定は、コンソールでは [リクエストに署名しない]、または API、CLI、およびAWS CloudFormation では
never
です。この設定を使用して、この OAC を使用するすべてのディストリビューションですべてのオリジンの OAC をオフにします。OAC を使用するすべてのオリジンとディストリビューションから OAC を 1 つずつ削除する場合と比べて、この設定で時間と労力を節約できます。この設定の場合、CloudFront は Lambda 関数 URL に送信するいずれのリクエストにも署名しません。警告
この設定を使用するには、Lambda 関数 URL がパブリックにアクセス可能である必要があります。この設定を、パブリックにアクセスできない Lambda 関数 URL で使用すると、CloudFront はオリジンにアクセスできません。Lambda 関数 URL は、CloudFront にエラーを返し、CloudFront はこれらのエラーをビューワーに渡します。詳細については、「AWS Lambda ユーザーガイド」の「Lambda 関数 URL におけるセキュリティと認証モデル」を参照してください。
- ビューワー (クライアント) の
Authorization
ヘッダーを上書きしない -
この設定は、コンソールでは [認可ヘッダーを上書きしない] で、API、CLI、および AWS CloudFormation では
no-override
です。この設定は、対応するビューワーリクエストにAuthorization
ヘッダーに含まれていない場合にのみ、CloudFront がオリジンリクエストに署名するよう指定する場合に使用します。この設定では、ビューワーリクエストが存在するが、ビューワーリクエストにAuthorization
ヘッダーが含まれていないときにオリジンリクエストに署名する (独自のAuthorization
ヘッダーを追加) ときに、CloudFront はビューワーリクエストからAuthorization
ヘッダーを渡します。警告
-
この設定を使用する場合は、CloudFront ディストリビューションの名前または CNAME の代わりに Lambda 関数 URL の署名バージョン 4 の署名を指定する必要があります。CloudFront がビューワーリクエストから Lambda 関数 URL に
Authorization
ヘッダーを転送すると、Lambda は Lambda URL ドメインのホストに対して署名を検証します。署名が Lambda URL ドメインに基づいていない場合、署名のホストは Lambda URL オリジンで使用するホストと一致しません。つまり、リクエストは失敗し、署名検証エラーが発生します。
-
ビューワーリクエストから
Authorization
ヘッダーを渡すには、このオリジンアクセスコントロールに関連付けられた Lambda 関数 URL を使用するすべてのキャッシュビヘイビアで、Authorization
ヘッダーをキャッシュポリシーに追加する必要があります。
-