403 使用 Sig v4 将数据从 AWS Lambda 索引到 Elasticsearch 时出错:“没有 [indices:data/write/bulk] 权限”

2023-12-19

我的函数可以从本地 Jupyter 笔记本将单个文档和批量索引到我的 AWS Elasticsearch,但是当我部署到 Lambda 时,它不断返回此错误:

"errorMessage": "AuthorizationException(403, 'security_exception', 'no permissions for
[indices:data/write/bulk] and User [name=arn:aws:iam::xxxxxxxxxxxx:role/MyLambdaRole,
backend_roles=[arn:aws:iam::xxxxxxxxxxxx:role/MyLambdaRole], requestedTenant=null]')"

我的 Elasticsearch 域(v7.7)配置如下:

Fine-grained access control: Enabled
Master user type: Internal user database
SAML authentication: Disabled
Amazon Cognito for authentication: Disabled
Require HTTPS: Enabled
Encryption at rest: Enabled
KMS master keyarn:aws:kms:us-east-1:xxxxxxxxxxxxx:key/<aws/es key>
Node-to-node encryption: Enabled

域的访问策略包含:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "es:*",
      "Resource": "*"
    }
  ]
}

MyLambdaRole 的 IAM 策略包含:

...
        {
            "Action": [
                "es:*"
            ],
            "Resource": [
                "*"
            ],
            "Effect": "Allow"
        }
    ]

在 Kibana 中,我已在 Security -> Role Mappings -> all_access 下映射了我的 AWS 管理员 IAM 用户和 MyLambdaRole。我尝试了不同的组合,将它们添加到后端角色并将它们添加到 security_manager。

Lambda 使用 AWS Signature v4 身份验证,elasticsearch 客户端版本为 7.7.0:

import boto3
from elasticsearch import Elasticsearch, RequestsHttpConnection, helpers
from requests_aws4auth import AWS4Auth

session = boto3.Session()
credentials = session.get_credentials().get_frozen_credentials()

awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, \
    session.region_name, 'es', session_token=credentials.token)

host = 'search-es-domain.us-east-1.es.amazonaws.com'

es = Elasticsearch(
    hosts = [{'host': host, 'port': 443}],
    http_auth = awsauth
    use_ssl = True,
    verify_certs = True,
    connection_class = RequestsHttpConnection
)

# Single indexing call
document = { my data }
es.index(index="my_index", doc_type="_doc", id=doc_id, body=document)

# Bulk indexing call
k = ({ my data })
helpers.bulk(es, k)

如果我更换http_auth = awsauth使用我的 Kibana 凭证http_auth = (kibana_username, kibana_password)它返回状态 200,但索引中没有创建新文档,这很奇怪。

我想知道我可能缺少什么或者我的配置可能在哪里被关闭。


这是因为启用了细粒度访问控制。我遇到了完全相同的问题,细粒度的访问控制会导致问题。您的笔记本可能正在使用您指定的主 ARN,该主 ARN 具有访问权限并且基本上始终被允许。

我重新创建了 ES 实例并禁用了细粒度访问控制,并且仅在适合我们的设置时才使用域策略。

请在此处阅读更多内容,并注意突出显示的部分重新用户/IAM 混合且无法正常工作。

https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/fgac.html https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/fgac.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

403 使用 Sig v4 将数据从 AWS Lambda 索引到 Elasticsearch 时出错:“没有 [indices:data/write/bulk] 权限” 的相关文章

  • 您可以克隆 AWS lambda 吗?

    针对不同环境的克隆 分期 QA PROD DEV 等 有没有一种快速简单的方法来克隆我的 lambda 给出不同的名称并从那里调整配置 您需要在新帐户中重新创建 Lambda 函数 转到 lambda 函数 单击 操作 并导出您的函数 下载
  • Terraform:如何附加服务器计数并将服务器分配给多个可用区?

    main tf resource aws instance service ami lookup var aws winamis var awsregion count var count key name var key name ins
  • 如何使用 PHP SDK 在 AWS SES 发送的电子邮件中实现 List-Unsubscribe 标头

    我尝试使用 AWS PHP SDK 添加自定义标头 以便可以实现 List unsubscribe 标头 问题是我找不到任何地方如何实现它 我已阅读文档但什么也没有 http docs aws amazon com aws sdk php
  • 如何让AWS Lambda停止执行?

    我有一个AWSLambda 函数执行操作Kinesis Firehose 该函数使用退避机制 此时我认为这是浪费我的计算时间 但无论如何 在我的代码中的某个时刻 我希望执行失败 我应该使用什么命令来停止执行 附注 我发现有这样的命令 con
  • 按存储桶键值过滤 Elasticsearch 聚合

    我有一个 Elasticsearch 文档索引 其中有一个包含 URL 列表的字段 正如预期的那样 对该字段进行聚合可以计算出唯一 URL 的数量 GET models search query match all size 0 aggs
  • AWS Fargate 任务错误 - ResourceInitializationError:无法下载环境文件:无法写入临时文件:AccessDenied

    我正在尝试使用容器定义下的环境文件配置 S3 ARN 从 Fargate ECS 任务访问存储在 S3 存储桶中的 env 文件 但 ECS 任务因停止原因而失败 资源初始化错误 无法下载 env 文件 文件下载命令 非空错误流 无法下载文
  • 为美国东部以外地区的 Cloudwatch 警报发送短信?

    AWS 似乎没有为美国东部以外的 SNS 主题订阅者提供 SMS 作为协议 我想连接我的 CloudWatch 警报并在发生故障时接收短信 但无法将其发送到 SMS YES 经过一番挖掘后 我能够让它发挥作用 它比仅仅选择一个主题或输入闹钟
  • 如何将ElasticSearch与MySQL集成?

    在我的一个项目中 我计划将 ElasticSearch 与 MySQL 结合使用 我已经成功安装ElasticSearch 我可以单独管理ES中的索引 但我不知道如何用 MySQL 实现同样的功能 我读过一些文件 但我有点困惑 没有明确的想
  • 无法更新 AWS S3 CORS 策略

    我需要更改我的 AWS S3 存储桶 CORS 策略才能将我的 ReactJS 文件上传到 AWS S3 但我不断收到此 API 响应 预期 params CORSConfiguration CORSRules 是一个数组 我现在很茫然 有
  • 查询CloudSearch中字段是否存在

    假设我在 CloudSearch 中索引的文档列表中有一个名为 xyz 的可选字段 如何查询 CloudSearch 以使其仅返回包含 xyz 的文档 如果我预先知道它是一个正整数 我可能可以这样做来获取所需的列表 q xyz 0 q pa
  • AWS API Gateway - Lambda - 内部服务器错误

    我正在通过 lambda 将图像上传到 s3 一切正常 没有错误 但 API Gateway 的响应是 500 内部服务器错误 我按照本教程配置了 api gateway 对与 Amazon API Gateway 的 API 集成的二进制
  • 我可以更改 CloudWatch 上的公制单位吗?

    我正在将指标数据发送到 CloudWatch 它们被发送到 AWSStandardUnit Count单位 但后来我把它们改为StandardUnit Milliseconds 在 AWS 的仪表板上 我仍然看到以下数据Count unit
  • 在elasticSearch中查询时定义分析器

    我对 Elasticsearch 还很陌生 只需要一些说明 我们可以在查询搜索服务器时定义一个分析器吗 我尝试使用 文本 和 字段 查询 效果很好 Query curl XPOST http localhost 9200 test user
  • AWS API Gateway 更改资源策略中的访问被拒绝响应消息

    如何从 AWS API Gateway 资源策略错误更改默认 403 正文 Message User anonymous is not authorized to perform execute api Invoke on resource
  • CNAME 速度慢吗?

    我将 CNAME 与 S3 CloudFront 一起使用来提供一些静态文件 例如 js css 图像等 我这样做是为了使存储桶的 URL 更漂亮 因为我认为最好将所有内容都定位到我的网站 以防万一将来我想移动这些文件 更改应该是透明的 今
  • 向多个 EC2 实例发送 AWS CloudWatch 警报

    我想要应用 CloudWatch 警报来停止我们的预生产环境中未使用的实例 我们经常会遇到实例被启动 使用然后保持打开状态 这确实开始花费我们相当多的钱 CloudWatch 警报有一个方便的功能 我们可以根据一些指标停止 这太棒了 我想用
  • AWS ELB 和 GoDaddy 域正在运行

    我已在 goDaddy com 中注册了一个域 并希望将流量发送到 AWS Route53 我创建了一个 ELB 我执行了以下步骤 在 Route 53 中 为我的 godaddy 域名创建一个托管区域 这反过来又为我提供了一条包含 4 个
  • 使用 AWS Elastic Beanstalk 在 AWS 上部署 Spring Boot 应用程序

    我想使用 AWS Elastic Beanstalk 在 AWS 上部署 Spring Boot 应用程序 但我没有看到上传 jar 文件的选项 只有 zip 和 war 在本教程中 他们将部署一个 jar 文件 https aws ama
  • 如何使用 boto3 让 ec2 实例访问 s3

    By googling I found this tutorial on accessing S3 from EC2 instance without credential file http parthicloud com how to
  • AWS 将 MQTT 消息存储到 DynamoDB

    我构建了一个定期发送 MQTT 消息的 python 脚本 这是发送到后端的 JSON 字符串 Id 1234 Ut 1488395951 Temp 22 86 Rh 48 24 在后端 我想将 MQTT 消息存储到 DynamoDB 表中

随机推荐

  • 如何为 Android API 级别 <11 实现 CursorLoader

    我有一个包含许多列表活动 其中 5 6 个 的应用程序 并且所有活动都有来自我自己的 ContentProvider 2 的自定义游标适配器 位于 Sqlite 数据库 2 上 现在的问题是 我想实现 CursorLoader 或类似 类来
  • 将多个对象放入 HttpParams

    我在表单控件中有一些类别 我将它们发送到一个字符串数组中 如下所示 1 4 6 这是我的实际代码 let categoryIds new Array
  • 重复播种随机数生成器是合理的哈希函数吗?

    我希望生成大量随机数据 这些数据对于给定的情况是可重现的key 包含一个数字列表 a b c d e 以下是让 RNG 进入生成随机数据的状态的好方法还是明智的方法 这样对于每个 n 元组 a b c n 该数据与 相邻 n 元组的输出不相
  • TFS2008到TFS2010迁移升级

    All 我目前正在尝试创建一个可重复的过程 将 TFS 2008 安装升级到新硬件 Microsoft 称为迁移升级 但在新硬件上构建 VS 2008 项目时遇到问题 我们的 TFS 2008 安装由两台机器组成 一个包含 SQL 数据库和
  • ChartJS - 具有多个环的圆环图

    是否可以使用 ChartJS 创建具有多个环的圆环图 如下所示 您可以在以下位置找到解决方案小提琴链接 https jsfiddle net zuupzpLL var ctx document getElementById chart ar
  • 如何知道用户何时将输出从 erlang shell 重定向到文件

    我有一个示例模块 module helloworld compile export all main gt io format s s s n e 31m Hello world e 0m 当我构建时 erlc helloworld erl
  • Django 模板对象类型

    好吧 这是我的情况 我有一组通用对象 我正在 django 模板中对其进行迭代 这些对象有许多子类 我想在模板中找出我正在处理的子类 这可能吗 可取吗 该代码可能看起来类似于 其中 if 语句包含一些虚构的语法 table tr th na
  • java.awt.Frame.setBackground() 在 OS X 中不起作用

    我正在尝试解决 OS X 中 java 小程序中的一些 UI 渲染错误 但我遇到了一个我无法解决的问题 我们打开的所有扩展 java awt Frame 的窗口似乎都忽略了 setBackground 调用 而是使用 OS X 默认值 拉丝
  • 根据日期精度设置日期格式

    我正在使用维基数据查询服务来获取某些地方的人口日期 输出给出以下格式的原始结果2010 01 01T00 00 00Z 举个例子 我还检索了每个日期的日期精度 这query https query wikidata org SELECT 2
  • 你可以*仅仅*用闭包修补一个嵌套函数,还是必须重复整个外部函数?

    我们使用的第三方库包含一个相当长的函数 该函数在其中使用了嵌套函数 我们对该库的使用触发了该函数中的错误 我们非常希望解决该错误 不幸的是 库维护者的修复速度有点慢 但我们不想分叉该库 在他们解决问题之前 我们也无法暂缓发布 我们更愿意使用
  • Android Studio Java 文件未找到异常

    我尝试了我能想到的所有可能的路径组合以及文件的每个可能的位置 它根本不会停止寻找文件未找到异常 没有文件或目录 try String path D Users UserName Desktop NameofProject app src m
  • Jquery:如何睡眠或延迟?

    我想向上移动对象 延迟1000ms 然后隐藏它 我得到代码 test animate top 80px 1500 animate top 0px 1000 animate opacity 0 500 我使用 animate top 0px
  • Ionic/Cordova:如何将 Cordova 插件集成到现有的 Ionic 项目中?

    我有一个 Ionic 项目 需要 Cordova Camera 插件 我现在已成功安装 但在我的项目中 Camera API 仍然不可用 即抛出错误 ReferenceError Camera is not defined at Scope
  • Neo4j 2.0.1 graphstyle.grass 用于多个标签

    我很难为具有多个标签的节点设置属性 我的 graphstyle grass 文件如下所示 node diameter 40px color aaaaaa border color 888888 border width 1 5px text
  • 使用带有 while 循环的递归的奇怪结果

    我是 Javascript 的初学者 当我自己尝试递归时 我使用 while 循环得到了一些奇怪的结果 并且使用 If 语句得到正确的结果 这是代码和结果 var test function f n while n gt 0 documen
  • 使用 Python 在 Power BI 中自定义视觉对象

    我正在尝试为 Python 复制这个 但找不到任何答案 是否可以在Power BI的R Script Visual中使用R Plotly库 https stackoverflow com questions 39368729 is it p
  • 在 Windows 窗体中调用 Font 的 dispose()

    我遇到了与中描述的相同的问题这个问题 https stackoverflow com questions 21769908 how and when is font disposed for winforms controls 也就是说 F
  • 如何在 Magento 中获取商店安全 URL?

    我在 Magento 中有一个表单 显示在不安全的 URL http 上 但我需要它提交到安全 URL https 我显示当前使用以下代码的 URL Mage getBaseUrl Mage Core Model Store URL TYP
  • 分布式Python编程

    我试图将 python 程序的执行拆分到两台不同的机器上 我想知道是否有办法从一台机器上调用另一台机器上的 python 解释器 不是在另一台机器上运行脚本 而是将执行任务拆分到两台机器上 在接下来的几个月中 我将教授我的自分布式编程 我认
  • 403 使用 Sig v4 将数据从 AWS Lambda 索引到 Elasticsearch 时出错:“没有 [indices:data/write/bulk] 权限”

    我的函数可以从本地 Jupyter 笔记本将单个文档和批量索引到我的 AWS Elasticsearch 但是当我部署到 Lambda 时 它不断返回此错误 errorMessage AuthorizationException 403 s