当前位置: 首页 > 知识库问答 >
问题:

AWS Lambda S3访问被拒绝

阎阎宝
2023-03-14

我有一个lambda函数,它使用一个具有以下策略摘录的角色

{
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::ipwl-lambda-config/*",
                "arn:aws:s3:::ipwl-lambda-config"
            ]
        }

我的桶策略如下所示

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DenyUnEncryptedObjectUploads",
            "Effect": "Deny",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::ipwl-lambda-config/*",
            "Condition": {
                "StringNotEquals": {
                    "s3:x-amz-server-side-encryption": "aws:kms"
                }
            }
        },
        {
            "Sid": "AllowLambda",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::accountid:role/iam_for_lambda"
            },
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::ipwl-lambda-config/*",
                "arn:aws:s3:::ipwl-lambda-config"
            ]
        }
    ]
}

我在角色和bucket策略上都允许使用GetObject和ListBucket。但是,当我的函数运行时

s3\u obj=s3\u res.Object(s3\u bucket,s3\u Object)

我明白了

[错误]ClientError:调用GetObject操作时发生错误(AccessDenied):拒绝访问

我还需要添加哪些权限?对象就在那里,当我使用管理员角色在本地运行代码时,我可以得到它。

最新消息

我已经检查了几十次,以确保桶和对象名称是正确的。根据堆栈轨迹,异常实际上来自第二行

s3_res = boto3.resource('s3')
s3_obj = s3_res.Object(s3_bucket, s3_object)
data = s3_obj.get()['Body'].read()

KMS应该只是PutObject的一个因素。我们有一个支持帐户,所以我可以与他们核实并更新他们的发现。

共有1个答案

左翰海
2023-03-14

要从S3下载KMS加密对象,您不仅需要能够获取该对象。您还需要能够解密AWS KMS密钥。

以下是您的Lambda函数应该具有的IAM策略示例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "s3get",
      "Effect": "Allow",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::ipwl-lambda-config/*"
    },
    {
      "Sid": "kmsdecrypt",
      "Effect": "Allow",
      "Action": "kms:Decrypt",
      "Resource": "arn:aws:kms:example-region-1:123456789012:key/example-key-id"
    }
  ]
}

密钥策略还需要允许IAM角色解密密钥,如下所示:

{
  "Sid": "kmsdecrypt",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::123456789012:role/xyz"
  },
  "Action": "kms:Decrypt",
  "Resource": "*"
}
 类似资料:
  • 问题内容: 这是我的编辑从第27行到第39行的代码: 我认为我的问题可能与Win7教授有关:(访问被拒绝) 如何解决这个问题,或者我需要做些什么或阅读才能使它起作用? 谢谢你不燃烧。 我只是更改了文件夹选项,使我获得完整的(Access …),现在我只需要弄清楚为什么在运行javac VendingMachine.java时为什么没有得到任何输出,我想是有一个新问题。 问题答案: 您的工作目录为。

  • 问题内容: 我正在尝试读取文件夹中的文件,但是当我运行该程序时,它将引发此异常。我也尝试了其他一些文件夹。它引发相同的异常。 问题答案: 您无法打开和读取目​​录,无法使用和方法区分文件和文件夹。您可以使用和方法获取文件夹的内容(分别用于文件名和s),还可以指定一个过滤器来选择列出的文件的子集。

  • 我正在使用wamp服务器,我的phpMyAdmin页面返回了以下错误。 Wamp服务器版本:2.2 MySQL版本:5.5.24 #1045-用户“root”@“本地主机”的访问被拒绝(使用密码:是) 我编辑了我的配置文件wamp\app\phpmyadmin4.1.14\config.inc.php: 但这并没有解决问题。任何帮助都将不胜感激。

  • 我正在使用JCIFS写入windows共享。这一直很有效。它突然停止工作,现在得到一个jcifs.smb.smbauthException:访问被拒绝。例外。我知道我的凭据很好,因为我可以使用smb手动连接并写入文件夹,所以这不是问题。我使用的代码是: 它在“SmbFileOutputStream outputStream=new SmbFileOutputStream(file)”行上爆炸。几个

  • 我的教授让我们从IntelliJ的社区版本升级到最终版本,并且开始使用JDK9.0和1.8并开始使用SceneBuilder。但是,当我试图构建代码时,我总是得到(访问被拒绝)错误。当我试图打开 “C:\users\username.intellijideA2017.2\system\compile-server\PT_2_868F9741\mappings” 我已经尝试卸载IntelliJ并运行

  • 问题内容: 我在FoxPro 6.0命令窗口中使用SQL命令,并遇到“文件访问被拒绝”。 我的SQL命令是: 情况: Windows 7专业版 FoxPro 6.0 main.dbf被共享给许多用户。 main.dbf不是 隐藏的 ,也不是 只写 任何意见将不胜感激! 问题答案: 此DBF文件位于共享驱动器上吗?如果是这样,则另一个用户可能使文件打开了“排他”,或者您正试图打开文件“排他”。默认状

  • 问题内容: 嘿,尝试启动正在编写的RMI应用程序时出现提示,我无法弄清楚为什么在默认端口1099或其他动态端口(当前是我的策略文件)上打开此异常时会出现此异常的原因授予所有权限(应用完成后会更改)。 我被困在哪里出了问题,任何帮助都会很有用 我的密码 } 堆栈跟踪 有效端口 65000 我的政策文件 问题答案: 基本上,我很愚蠢,我认为因为Java并不抱怨它找不到.policy文件AOK,所以事实