実行ロールを共有するサーバーレス関数

関数ごとの実行ロールとポリシーを確認し、別の関数だけに必要な権限まで付与しないでください。

説明

複数のAWS::Serverless::Functionが実行ロールを共有すると、一つの関数に必要な権限がほかの関数にも付与される場合があります。各関数の目的と必要なリソースに合わせて権限を分けてください。ロール名が異なるだけでは最小権限は保証されないため、関連付けたポリシーも確認する必要があります。

想定される影響

  • 侵害された関数や誤動作した関数が、本来の処理に不要なリソースへアクセスする可能性があります。
  • 共有ロールのポリシー変更が、複数の関数の権限と動作に影響する場合があります。

対処方法

  • 各関数に必要な操作とリソースを確認し、適切な実行ロールに分けてください。ポリシーを再利用する場合も不要な権限を含めないでください。
  • ロールの信頼ポリシーと実際の権限を確認し、必要な呼び出しと意図しないアクセスの拒否をテストしてください。

例

FunctionImageにはデプロイする実際のECRイメージURIを指定してください。ロールARNは、対象アカウントに存在しLambdaが引き受けられるロールに置き換えてください。権限ポリシー自体はこの例では定義していません。

変更前

yaml
Transform: AWS::Serverless-2016-10-31
Parameters:
  FunctionImage:
    Type: String
Resources:
  Function1:
    Type: AWS::Serverless::Function
    Properties:
      PackageType: Image
      ImageUri: !Ref FunctionImage
      Role: arn:aws:iam::123456789012:role/lambda-role

  Function2:
    Type: AWS::Serverless::Function
    Properties:
      PackageType: Image
      ImageUri: !Ref FunctionImage
      Role: arn:aws:iam::123456789012:role/lambda-role

二つの関数が同じ実行ロールを使用します。必要な権限が異なる場合、共有によって不要なアクセスを許可する可能性があります。

変更後

yaml
Transform: AWS::Serverless-2016-10-31
Parameters:
  FunctionImage:
    Type: String
Resources:
  Function1:
    Type: AWS::Serverless::Function
    Properties:
      PackageType: Image
      ImageUri: !Ref FunctionImage
      Role: arn:aws:iam::123456789012:role/function1-role

  Function2:
    Type: AWS::Serverless::Function
    Properties:
      PackageType: Image
      ImageUri: !Ref FunctionImage
      Role: arn:aws:iam::123456789012:role/function2-role

関数ごとに別のロールを指定します。名前だけで判断せず、それぞれのポリシーを実際の要件に合わせて制限してください。

参考資料