AWS 上的 Kibana 中的精细权限

Granular permission in Kibana on AWS

背景

布线

我在 AWS Elasticsearch Service 上有一个 Elasticsearch 集群。它启用了 Kibana 端点。 Cognito 提供基于用户组的 AWS 角色。

Cognito 组和 AWS 角色

AWS Cognito 设置给组 viewer 的 AWS 角色是 arn:aws:iam:123:role/kibana-viewer.

AWS Cognito 设置给组 admin 的 AWS 角色是 arn:aws:iam:123:role/kibana-admin.

所需的限制

在使用 Kibana 查看数据时,只有 admin 组可以访问特定的索引模式。有限索引 Elasticsearch 模式是 secret-*.

viewer 组应该 不能通过 Kibana 访问 secret-*

问题

如何防止角色 arn:aws:iam:123:role/kibana-viewer 访问 AWS Elasticsearch 集群中的 secret-* 索引模式?

我试过的

第一次尝试

在访问策略中设置以下语句:

{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam:123:role/kibana-viewer"
  },
  "Action": "es:*",
  "Resource": "arn:aws:es:my-region:123:domain/my-domain/*"
}

viewer 能够访问索引 secret-1

第二次尝试

将上面的 Resource 设置为 arn:aws:es:my-region:123:domain/my-domain/secret-*viewer 无法登录,原因是:

User: x:x:x::xx:x is not authorized to perform: es:ESHttpGet

第三次尝试

设置两个语句:

{
  "Effect": "Deny",
  "Principal": {
    "AWS": "arn:aws:iam:123:role/kibana-viewer"
  },
  "Action": "es:ESHttpGet",
  "Resource": "arn:aws:es:my-region:123:domain/my-domain/secret-*"
},
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam:123:role/kibana-viewer"
  },
  "Action": "es:ESHttpGet",
  "Resource": "arn:aws:es:my-region:123:domain/my-domain/*"
}

A viewer 可以登录 Kibana,但由于 API 调用 _plugin/kibana/api/saved_objects/?type=index-pattern&per_page=10000.

时出现 403 错误而无法看到任何数据

我无法使用 AWS Elasticsearch 解决它。

但是,我在 EC2 上使用 Open Distro for Elasticsearch 得到了想要的结果。还写了一个detailed blog post about it.