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.
背景
布线
我在 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.