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