当主体设置为aws-lambda.amazonaws.com时,访问被拒绝



我用lambda函数访问一个bucket,得到一个"访问被拒绝";错误,当我通过boto3使用lambda函数访问它时。如果我将principal设置为"*"在水桶里,一切都很好。问题出在哪里?

"Sid": "DenyIncorrectEncryptionHeader",
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
...

在bucket策略中,授予允许权限的主体应该是lambda执行角色,而不是lambda服务(lambda.amazonaws.com(。

添加更多详细信息,如果lambda执行角色与bucket在同一个AWS帐户中,那么该角色中的允许权限就足够了。只要bucket策略中没有明确的否认。

但是,如果角色和bucket在不同的帐户中,则该角色必须具有允许权限,bucket策略必须为该角色授予允许权限。

步骤如下:

  • 使用Lambda的用例创建IAM角色(这将创建一个允许AWS Lambda服务承担该角色的信任策略(
  • 向IAM角色添加授予所需Amazon S3权限的策略
  • 配置AWS Lambda函数以使用此IAM角色

对于您所声明的需求,无需使用Amazon S3 Bucket Policy。

作为一般规则,在向每个人授予权限时使用Bucket策略,在向特定用户或组授予访问权限时应使用IAM策略。(但是,使用Bucket Policies可能还有其他情况,例如授予跨帐户访问权限。(

最新更新