使用 lambda 函数的 AWS Elastic 搜索更改策略
AWS Elastic search change policy using lambda function
我正在尝试使用节点 js 通过 lambda 函数更改弹性搜索访问策略,当前访问策略如下所示
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "es:*",
"Resource": "arn:aws:es:us-east-1:XXXX:domain/YYY/*"
}
]
}
我在 lambda 中尝试过的代码
var params = {
DomainName: 'YYYY'
};
const es = new AWS.ES();
es.upgradeElasticsearchDomain(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
这总是会抛出错误
is not authorized to perform: es:UpdateElasticsearchDomainConfig on resource
错误代码 "code": "AccessDeniedException",
在 param
中,我将添加 AccessPolicies
这与我在问题中添加的政策相同,但 Effect
将是 Deny
在与 OP 进一步讨论后,发现是缺少对 Lambda 函数附加的 IAM 角色的权限。
对于面临相同问题的其他人,请确保将 ESFullAccess 附加到使用 ElasticSearch 的 Lambda 函数。
为此,转到 IAM -> 角色和 select 附加到您的 Lambda 函数的角色。
点击附加策略并附加ESFullAccess,如下图:
我正在尝试使用节点 js 通过 lambda 函数更改弹性搜索访问策略,当前访问策略如下所示
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "es:*",
"Resource": "arn:aws:es:us-east-1:XXXX:domain/YYY/*"
}
]
}
我在 lambda 中尝试过的代码
var params = {
DomainName: 'YYYY'
};
const es = new AWS.ES();
es.upgradeElasticsearchDomain(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
这总是会抛出错误
is not authorized to perform: es:UpdateElasticsearchDomainConfig on resource
错误代码 "code": "AccessDeniedException",
在 param
中,我将添加 AccessPolicies
这与我在问题中添加的政策相同,但 Effect
将是 Deny
在与 OP 进一步讨论后,发现是缺少对 Lambda 函数附加的 IAM 角色的权限。
对于面临相同问题的其他人,请确保将 ESFullAccess 附加到使用 ElasticSearch 的 Lambda 函数。
为此,转到 IAM -> 角色和 select 附加到您的 Lambda 函数的角色。
点击附加策略并附加ESFullAccess,如下图: