Lambda環境変数からのAWS認証情報漏えいの可能性

Lambdaの構成に実際のAWS認証情報を直接書かず、必要な権限を持つ実行ロールを使用してください。

説明

Lambda環境変数に長期AWS認証情報を直接書くと、テンプレート、デプロイ履歴、関数設定へのアクセスを通じて漏えいする可能性があります。値の見た目だけで有効なキーと判断せず、実際のシークレットか確認してください。AWS APIの呼び出しには通常、実行ロールの一時的な認証情報を使えます。

想定される影響

実際のアクセスキーIDとシークレットキーが一緒に漏えいすると、許可された操作を悪用される可能性があります。影響は関連付けたポリシーとほかのアクセス制御によって異なります。

対処方法

  • 実際の認証情報を削除し、関数に必要な権限だけを持つ実行ロールを使ってください。ほかのシステムのシークレットは適切な保管サービスから限定した権限で取得してください。
  • 利用先を切り替え、漏えいした実際のキーを失効・交換してください。テンプレートから消しても、リポジトリやデプロイ履歴のコピーは残ります。

例

fooの長い文字列はAWSドキュメントの公開サンプルで、実際の認証情報ではありません。コードのバケット・オブジェクトと実行ロールARNを実際の値で指定し、コードが指定ランタイムに対応することを確認してください。

変更前

yaml
Parameters:
  FunctionCodeBucket:
    Type: String
  FunctionCodeKey:
    Type: String
  ExecutionRoleArn:
    Type: String
Resources:
  LambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      Handler: index.handler
      Role: !Ref ExecutionRoleArn
      Environment:
        Variables:
          foo: "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
          databaseName: lambdadb
          databaseUser: admin
      Code:
        S3Bucket: !Ref FunctionCodeBucket
        S3Key: !Ref FunctionCodeKey
      Runtime: nodejs22.x

認証情報の値を構成に直接入れる形を示します。例の文字列を実際のキーに置き換えてデプロイしないでください。

変更後

yaml
Parameters:
  FunctionCodeBucket:
    Type: String
  FunctionCodeKey:
    Type: String
  ExecutionRoleArn:
    Type: String
Resources:
  LambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      Handler: index.handler
      Role: !Ref ExecutionRoleArn
      Environment:
        Variables:
          foo: test
          databaseName: lambdadb
          databaseUser: admin
      Code:
        S3Bucket: !Ref FunctionCodeBucket
        S3Key: !Ref FunctionCodeKey
      Runtime: nodejs22.x

通常の設定だけを残します。AWS呼び出しが実行ロールを使い、以前のキーが失効していることも確認してください。

参考資料