You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Lambda别名限制执行角色的S3写入权限?

问题:通过Lambda别名限制S3写入权限

希望设计AWS Lambda执行角色策略,通过Lambda别名限制访问权限:仅带有“Prod”别名的Lambda函数可向特定S3存储桶写入数据。尝试使用lambda:SourceFunctionArn条件,但该条件不包含别名或使用方式有误。需求是所有函数变体可写入my-bucket-test,仅Prod别名可写入my-bucket-data,请问是否可行?附原策略示例:

{
    "Version": "2012-10-17",
    "Statement": [{
            "Sid": "Logging",
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:log-group:/aws/lambda/MyLambda_*"
        },
        {
            "Sid": "S3",
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": [
                "arn:aws:s3:::my-bucket-test/*"
            ]
        },
        {
            "Sid": "S3Prod",
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::my-bucket-data/*",
            "Condition": {
                "StringLike": {
                    "lambda:SourceFunctionArn": "*Prod"
                }
            }
        }
    ]
}
解决方案

这个需求完全可行,但原策略的问题在于**lambda:SourceFunctionArn条件不会包含Lambda别名信息**,正确的做法是使用lambda:SourceAlias条件来识别调用的别名。

以下是修正后的策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Logging",
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:log-group:/aws/lambda/MyLambda_*"
        },
        {
            "Sid": "S3AllVariants",
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::my-bucket-test/*"
        },
        {
            "Sid": "S3OnlyProdAlias",
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::my-bucket-data/*",
            "Condition": {
                "StringEquals": {
                    "lambda:SourceAlias": "Prod"
                }
            }
        }
    ]
}

关键说明:

  • lambda:SourceAlias是AWS专门用于识别Lambda调用时使用的别名的条件键,当通过别名触发Lambda时,该值会被设置为对应的别名名称。
  • 使用StringEquals而非StringLike可以精准匹配别名,避免误匹配其他包含"Prod"字符的内容。
  • 所有Lambda变体(包括无别名的版本、其他别名)都能正常写入my-bucket-test,只有通过"Prod"别名触发的Lambda才能写入my-bucket-data。

注意:如果Lambda是直接通过版本ARN调用而非别名,lambda:SourceAlias不会有值,这类调用将无法通过第三个Statement的权限检查,符合需求。

内容的提问来源于stack exchange,提问作者Aleksandr Krymskiy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 02:31:16