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

访问被拒绝,同时查询S3文件从AWS雅典娜在Lambda在不同的帐户

杜阳炎
2023-03-14

我试图从我的Lambda代码查询雅典娜视图。为不同帐户中的S3文件创建雅典娜表。雅典娜查询编辑器给我下面的错误:

拒绝访问(服务:Amazon S3;状态代码:403;错误代码:AccessDended;

我试图从我的Lambda代码访问Athena View。创建Lambda执行角色,并在另一个帐户S3桶的桶策略中允许此角色,如下所示:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::2222222222:role/BAccountRoleFullAccess"
            },
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::s3_bucket/*"
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111111111:role/A-Role",
                    "arn:aws:iam::111111111:role/B-Role"
                ]
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::s3_bucket",
                "arn:aws:s3:::s3_bucket/*"
            ]
        }
    ]
}

从Lambda,得到以下错误:

    'Status': {'State': 'FAILED', 'StateChangeReason': 'com.amazonaws.services.s3.model.AmazonS3Exception: 
        Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: 3A8953784EC73B17; 
    S3 Extended Request ID: LfQZdTCj7sSQWcBqVNhtHrDEnJuGxgJQxvillSHznkWIr8t5TVzSaUwNSdSNh+YzDUj+S6aOUyI=), 
    S3 Extended Request ID: LfQZdTCj7sSQWcBqVNhtHrDEnJuGxgJQxvillSHznkWIr8t5TVzSaUwNSdSNh+YzDUj+S6aOUyI=
 (Path: s3://s3_bucket/Input/myTestFile.csv)'

此Lambda函数正在使用对Athena和S3具有完全访问权限的执行角色。

有人请指引我。

共有1个答案

左丘嘉木
2023-03-14

为了重现这种情况,我做了以下工作:

  • Account-A中,创建了一个Amazon S3 bucket(bucket-A),并上传了一个CSV文件
  • Account-B中,创建了具有S3和Athena权限的IAM角色(Role-B
  • 关闭了Bucket-A上的阻止公共访问功能
  • 在引用角色B的bucket-a中添加了一个bucket策略:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::[ACCOUNT-B]:role/role-b"
            },
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Resource": [
                "arn:aws:s3:::bucket-a",
                "arn:aws:s3:::bucket-a/*"
            ]
        }
    ]
}
  • Account-B中,在Amazon Athena控制台中手动定义一个表
import boto3
import time

def lambda_handler(event, context):

    athena_client = boto3.client('athena')
    query1 = athena_client.start_query_execution(
        QueryString='SELECT * FROM foo',
        ResultConfiguration={'OutputLocation': 's3://my-athena-out-bucket/'}
    )
    time.sleep(10)

    query2 = athena_client.get_query_results(QueryExecutionId=query1['QueryExecutionId'])
    print(query2)
  • 运行Lambda函数。它成功地从CSV文件返回了数据

请将您的配置与我采取的上述步骤进行比较。希望您能找到一个不同之处,使您能够通过雅典娜进行跨账户访问。

参考:跨账户访问-亚马逊雅典娜

 类似资料:
  • 我有一个lambda函数,它使用一个具有以下策略摘录的角色 我的桶策略如下所示 我在角色和bucket策略上都允许使用GetObject和ListBucket。但是,当我的函数运行时 我明白了 [错误]ClientError:调用GetObject操作时发生错误(AccessDenied):拒绝访问 我还需要添加哪些权限?对象就在那里,当我使用管理员角色在本地运行代码时,我可以得到它。 最新消息

  • 我有两个AWS账户。帐户1有一个CloudSearch域,我需要从帐户2中的Lambda函数查询该域。我遵循了一个教程,在Account1中创建一个允许跨帐户访问的角色。 因此,在帐户1中,我有一个角色,如下所示: 此角色有一个受信任的实体,即帐户2,我可以在IAM控制台中该角色的受信任实体部分下看到正确的帐户ID。 在帐户2中,我创建了一个Lambda函数,其执行角色如下所示: 我的Lambda

  • 我在Lambda函数上收到来自S3 AWS服务的acccess denied错误。 这是代码: 这是CloudWatch上的错误: 这是堆栈错误: 没有关于S3的任何其他描述或信息,桶权限允许每个人、放置、列表和删除。 我可以做什么来访问S3桶? PS:在Lambda事件属性上,主体是正确的,并且具有管理特权。

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

  • lambda执行角色具有对51个函数的s3访问权限,包括ListBuckets和所有其他读操作。 我的S3 bucket有一个允许从lambda角色访问的策略。(反正是在同一个帐户中,所以我不认为这是必需的)。 我甚至只是为了好玩才让桶公共访问。 这是λ码。我不知道为什么bucket.objects.all()无法访问S3。 Lambda执行角色策略

  • 问题内容: 我正在尝试使用AWS开发工具包访问存储桶及其所有对象,但是在运行代码时,出现错误,线程“ main”中出现异常 请提出建议,尽管我已经对存储桶采取了以下所有许可,但我缺少的地方以及为什么发生拒绝访问错误: 代码如下: 问题答案: 现在问题已解决。代码存在以下问题: 终点不正确,应该有一个正确的终点。 没有足够的权限授予该存储桶。在AWS开发工具包中使用存储桶之前,应获取完整权限列表。