AWS IAM 资源策略和 Lambda 角色不起作用

问题描述 投票:0回答:1

我有一个关于 AWS Lambda 和在 AWS Opensearch 上设置访问(资源_策略(在后台使用 Elasticsearch 6.8)的问题

我想要做的是在 AWS Opensearch 上设置以下访问策略。这看起来有点奇怪,但由于某些原因,这样做是必要的(我不会详细介绍这些) (1) 我希望所有角色 (AWS: ) 能够执行所有操作 (es:),除了他们无法从我的 Opensearch 实例中删除任何内容。换句话说,我想阻止他们执行 ESHTTPDelete 操作。 (2) 但是,我确实希望 Lambda(具有角色 arn:aws:iam::123456789:role/testelk-purge-elk-role 仍然能够执行 ESHTTPDelete。

因此,我的实际访问策略如下:(显然我已经更改了名称)。这应该可行,尽管有点复杂。然而,由于 Lambda 使用其执行角色的某种方式(我尚不理解),它不起作用。任何有关该领域的想法或帮助将不胜感激。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:eu-west-2:123456789:domain/domain-elktest/*"
    },
    {
      "Effect": "Deny",
      "NotPrincipal": {
        "AWS": [
          "arn:aws:iam::123456789:role/testelk-purge-elk-role"
        ]
      },
      "Action": "es:ESHttpDelete",
      "Resource": "arn:aws:es:eu-west-2:123456789:domain/domain-elktest/*"
    }
  ]
}

我认为上述应该有效。然而,当我运行 lambda 时出现的错误如下:

索引logstash-2024.03.28删除错误授权异常:: {"path":"/logstash-2024.03.28","query":{},"statusCode":403,"response":"{"Message":"用户:arn:aws:sts::123456789:assumed -角色/testelk-purge-elk-角色/testelk-purge-elk 无权执行: es:ESHttpDelete 并明确拒绝 基于资源的政策"}"}

aws-lambda amazon-iam amazon-opensearch
1个回答
0
投票

试试这个

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:eu-west-2:123456789:domain/domain-elktest/*"
    },
    {
      "Effect": "Deny",
      "Principal": {
        "AWS": "*"
      },
      "Action": "es:ESHttpDelete",
      "Resource": "arn:aws:es:eu-west-2:123456789:domain/domain-elktest/*",
      "Condition": {
        "StringNotEquals": {
          "aws:PrincipalArn": "arn:aws:iam::123456789:role/testelk-purge-elk-role",
        }
      }
    }
  ]
}
© www.soinside.com 2019 - 2024. All rights reserved.