假设有一个lambda函数具有访问s3://my-bucket/users/
的IAM策略。此函数由具有对s3://my-bucket/users/bob
的IAM策略访问权限的用户Bob调用。有没有办法";合并";或者将Bob用户的策略应用于lambda函数以限制访问?例如,如果Bob传递文件夹名称Alice
,则lambda函数在尝试访问s3://my-bucket/users/alice
时失败。
有什么想法吗?
否。
Lambda函数将使用与函数本身关联的IAM角色的权限运行,无论是谁或什么触发了该函数。
一种选择是Bob在调用函数时将一组凭据传递给函数(作为将传递给event
中函数的参数(,然后让Lambda函数使用这些凭据。然而,这是一件极不寻常的事情
我认为这是一个授权问题,需要自定义授权模块。
解决这个问题的一种方法如下
- 只有AWS Lambda可以编程访问S3存储桶
s3://my-bucket/users/
- 让我们假设用户Bob已通过身份验证,并且具有身份验证令牌
- Bob调用带有身份验证令牌的AWS Lambda作为请求的一部分,同时调用他们想要访问的S3文件
- AWS Lambda验证身份验证令牌
- 应用程序在数据库中维护用户可以完全访问S3桶
s3://my-bucket/users/
的哪个S3后缀 - 假设Bob可以访问以下后缀
/bob
和/admin
- 经过身份验证后,AWS Lambda拥有一个授权库,用于查询数据库中的授权前缀
- 若Bob试图访问
s3://my-bucket/users/bob/personalDetaills.json
或s3://my-bucket/users/admin/employeeDetails.json
,那个么请求将被批准并获取记录。请求被批准,因为Bob被授权使用/bob
和/admin
后缀 - 如果Bob正试图访问
s3://my-bucket/users/alice
,则会引发用户未授权错误