過剰な権限を持つ可能性があるLambda実行ロール

Lambda実行ロールの実際の権限を、関数の処理と必要なリソースに限定してください。

説明

Lambda実行ロールに過剰な権限があると、コードの脆弱性や誤動作がより多くのAWSリソースに影響する可能性があります。ロールやポリシーの名前だけで判断せず、関連付けたポリシー、条件、ほかの制御を確認してください。ワイルドカードがあっても特定のサービスや操作群に限定される場合があるため、実際の許可範囲を確認する必要があります。

想定される影響

関数が侵害されると、実行ロールに許可されたデータの読み取り・変更・削除などを悪用される可能性があります。不要な権限は被害の範囲を広げます。

対処方法

  • 関数が使うAPIとリソースを確認し、実行ロールを最小権限に限定してください。共有ロールに、ほかの関数の不要な権限を蓄積させないでください。
  • 必要なログ・サービスアクセスを維持しながら不要な権限を削除し、正常な呼び出しと未承認アクセスの拒否をテストしてください。

例

固定の応答を返す最小限の関数と、その実行ロールを定義します。実際のコードには、互換性のあるランタイムと処理に必要な権限を選んでください。

変更前

yaml
Resources:
  AppendItemToListFunction:
    Type: AWS::Lambda::Function
    Properties:
      Handler: index.handler
      Role: !GetAtt LambdaExecutionRole.Arn
      Runtime: nodejs22.x
      Code:
        ZipFile: |
          exports.handler = async () => ({ statusCode: 200, body: "ok" });

  LambdaExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: sts:AssumeRole
      Policies:
        - PolicyName: AdminPolicy
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: Allow
                Action: "*"
                Resource: "*"

すべての操作とリソースを許可しており、固定の応答を返す関数に必要な範囲を大きく超えています。

変更後

yaml
Resources:
  AppendItemToListFunction:
    Type: AWS::Lambda::Function
    Properties:
      Handler: index.handler
      Role: !GetAtt LambdaExecutionRole.Arn
      Runtime: nodejs22.x
      Code:
        ZipFile: |
          exports.handler = async () => ({ statusCode: 200, body: "ok" });

  LambdaExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: sts:AssumeRole
      Policies:
        - PolicyName: LimitedPolicy
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: Allow
                Action:
                  - logs:CreateLogGroup
                  - logs:CreateLogStream
                  - logs:PutLogEvents
                Resource: "*"

このポリシーはログ関連の操作だけを許可します。対象も実際のロググループに限定できるか検討し、ほかのAWS APIを呼ぶ場合は必要な権限だけを追加してください。

参考資料