#amazon-web-services #elasticsearch #kibana #amazon-kinesis-firehose
Вопрос:
Я попытался нажать на ссылку Kibana из ES-кластера. Но я получаю эту ошибку:
{"Message":"User: anonymous is not authorized to perform: es:ESHttpGet"}
Политика доступа кластера ES является:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::account-number:role/my-role"
},
"Action": "es:ESHttpGet",
"Resource": "arn:aws:es:my-region:account-number:domain/my-es-domain/*"
},
{
"Effect": "Allow",
"Principal": "*",
"Action": "es:*",
"Resource": "arn:aws:es:my-region:account-number:domain/my-es-domain/*",
"Condition": {
"IpAddress": {
"SourceIp": "xx.xxx.xxx.xx"
}
}
}
]
}
и код:
const policy1: PolicyStatement = new PolicyStatement({
effect: Effect.ALLOW,
resources: ["arn:aws:es:my-region:account-number:domain/my-es-domain/*"],
actions: ["es:ESHttpGet"],
principals: [
new ArnPrincipal("arn:aws:iam::account-number:role/my-role")
],
});
const policy2: PolicyStatement = new PolicyStatement({
effect: Effect.ALLOW,
resources: ["arn:aws:es:my-region:account-number:domain/my-es-domain/*"],
actions: ["es:*"],
principals: [
new ArnPrincipal("*")
],
conditions: {
IpAddress: {
SourceIp: ["xx.xxx.xxx.xx"]
}
}
});
// es cluster
// @ts-ignore
const elasticsearchDomain = new Domain(this,
'ElasticsearchDomain',
{
accessPolicies: [policy1, policy2],
domainName: 'my-es-domain',
version: ElasticsearchVersion.V7_10,
capacity: {
dataNodeInstanceType: "r6g.large.elasticsearch"
}
}
);
Когда мое приложение развернуто, я не могу нажать на ссылку Kibana в ES-кластере, но если я изменю политику доступа выше, чтобы:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::account-number:role/my-role"
},
"Action": "es:ESHttpGet",
"Resource": "arn:aws:es:my-region:account-number:domain/my-es-domain/*"
},
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "es:*",
"Resource": "arn:aws:es:my-region:account-number:domain/my-es-domain/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "xx.xxx.xxx.xx"
}
}
}
]
}
Тогда это сработает.
Единственным отличием политики доступа является это утверждение в основном:
"Principal": {
"AWS": "*"
}
Кто-нибудь знает, как это исправить?
Или как я должен программно корректировать свой код?
Спасибо.
Ответ №1:
Эта ошибка может указывать на то, что ваша служба ElasticSearch не поддерживает анонимные запросы (те, которые не подписаны действительными учетными данными IAM).