説明
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呼び出しが実行ロールを使い、以前のキーが失効していることも確認してください。