SCPによるリージョン制限とLambda@Edgeの相互作用について
こんにちは。サービス開発室の武田です。
AWSは地理的に離れた地域を「リージョン」と呼び、ユーザーはリソースを任意のリージョンに作成できます。さて、クラスメソッドでは「クラスメソッドメンバーズ」というAWS総合支援サービスを提供しています。請求代行やコンサルティング、運用保守代行など、AWSの利用をサポートします。
日本ユーザーは普段東京リージョンを使い、他のリージョンはあまり使用しないという方も多いでしょう。メンバーズではAWSアカウントをよりセキュアに保つオプションを提供しており、8月には特定リージョン以外の操作を制限する「リージョン制限」機能を提供開始しました。
技術的にはAWS OrganizationsのSCP(Service Control Policy)を使用しています。興味がある方はこちらのエントリなどを参考にしてください。
メンバーズでリージョン制限を有効にするには、メンバーズポータルにアクセスしていただき、 リージョン制限のオプション設定をONにするだけ です。5分程度で反映されますし、OFFにもすぐ戻せますので、ご存じなかった方がいましたらぜひお試しください。また一緒に提供している、AWS Security HubやAmazon GuardDutyのオプション設定を同時に有効にした場合、制限されるリージョンではこれらのサービスを有効化しません。そのためコストを抑えつつセキュリティサービスをご利用いただけます。
そんな基本的には「使って欲しい」機能なのですが、 Lambda@Edgeを使用する場合 そのアカウントでは、リージョン制限は非推奨となります。
Lambda@Edgeを使用する場合は非推奨となる理由
以前Lambda@Edgeのログについて、なおにしが次のエントリを書いていました。
ポイントは次の2点です。
- 実行ログの出力は実行ロールが行う(Lambda関数にアタッチされるロール)
- エラーログの出力はサービスリンクロールが行う(AWSServiceRoleForCloudFrontLoggerロール)
- ログの出力先は実行されたエッジロケーションに依存する
SCPは設定すると操作を制限などできるわけですが、一部例外があります。詳しくはドキュメントを見ていただくとして、次のようにサービスリンクロールには影響しません。
SCPs do not affect any service-linked role. Service-linked roles enable other AWS services to integrate with AWS Organizations and can't be restricted by SCPs.
これを先ほどの内容と突き合わせると、次の結論が導かれます。
- 実行ログは制限されているリージョンでは出力されない(操作制限されるため)
- エラーログは全リージョンで出力される(サービスリンクロールのため制限されない)
そもそもの話として、制限されているリージョンでもLambda@Edgeは実行されるのか?という疑問があります。しかしこれは、実際に試したところ 実行されます 。もちろんSCPの影響を受けるため、他のAWSサービスを利用する処理などは失敗するため注意してください。
まとめ
クラスメソッドメンバーズではリージョン制限という機能を提供しており、ぜひ使っていただきたい機能です。しかしLambda@Edgeを使用する場合、制限を回避するワークアラウンドがないため、リージョン制限は非推奨となります。
リージョン制限下でLambda@Edgeを動かすことは可能ですが、実行ログが出力されないなどの制限がありますので注意してください。