Amazon Elastic Search Cluster에 대한 적절한 액세스 정책
최근에 새로운 Amazon Elasticsearch Service를 사용하기 시작했는데 특정 IAM 역할이 할당 된 EC2 인스턴스에서만 서비스에 액세스 할 수 있도록 필요한 액세스 정책을 파악할 수없는 것 같습니다.
다음은 현재 ES 도메인에 할당 한 액세스 정책의 예입니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::[ACCOUNT_ID]:role/my_es_role",
]
},
"Action": "es:*",
"Resource": "arn:aws:es:us-east-1:[ACCOUNT_ID]:domain/[ES_DOMAIN]/*"
}
]
}
그러나 내가 말했듯이 이것은 작동하지 않습니다. my_es_role
역할이 연결된 EC2 인스턴스에 로그인 하고 "https : //*.es.amazonaws.com"엔드 포인트에서 간단한 curl 호출을 실행하려고하면 다음 오류가 발생합니다.
{ "Message": "User : anonymous는 수행 할 권한이 없습니다. 리소스에 대한 es : ESHttpGet : arn : aws : es : us-east-1 : [ACCOUNT_ID] : domain / [ES_DOMAIN] /“}
이 작업을 수행하기 위해 액세스 정책에서 변경해야 할 사항을 아는 사람이 있습니까?
IAM 전용 액세스를 잠글 수 있지만 브라우저에서 Kibana를 어떻게 볼 수 있습니까? 당신은 할 수 설정 프록시 ( 요점 참조 및 / 또는 NPM 모듈 ) 또는 결과를 볼 IAM 모두 IP 기반 액세스를 가능하게한다.
다음 액세스 정책을 통해 IAM 액세스 IP 제한 액세스를 모두 얻을 수있었습니다. 순서가 중요합니다. IAM 문 이전에 IP 기반 문으로 작업 할 수 없었습니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::xxxxxxxxxxxx:root"
},
"Action": "es:*",
"Resource": "arn:aws:es:us-west-2:xxxxxxxxxxxx:domain/my-elasticsearch-domain/*"
},
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "es:*",
"Resource": "arn:aws:es:us-west-2:xxxxxxxxxxxx:domain/my-elasticsearch-domain/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"192.168.1.0",
"192.168.1.1"
]
}
}
}
]
}
내 EC2 인스턴스에는 arn:aws:iam::aws:policy/AmazonESFullAccess
정책 이 포함 된 인스턴스 프로필이 있습니다. Logstash는 logstash-output-amazon-es 출력 플러그인을 사용하여 요청에 서명해야합니다 . 내 EC2 인스턴스에서 실행되는 Logstash에는 다음과 같은 출력 섹션이 포함됩니다.
output {
amazon_es {
hosts => ["ELASTICSEARCH_HOST"]
region => "AWS_REGION"
}
# If you need to do some testing & debugging, uncomment this line:
# stdout { codec => rubydebug }
}
I can access Kibana from the two IPs in the access policy (192.168.1.0 and 192.168.1.1).
According to AWS doc and as you (and I) just tested, you cannot restrict access to an AWS ES domain to a role/account/user/... and simply cURL it!
Standard clients, such as curl, cannot perform the request signing that is required of identity-based access policies. You must use an IP address-based access policy that allows anonymous access to successfully perform the instructions for this step. (http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-gsg-search.html)
So you have basically two solutions:
- change your access policy and restrict it to IP(s), I think you cannot use private IP because your ES cluster does not seems to belong to your VPC (default or not). Please use the public IP
- sign your request: http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-managedomains.html#es-managedomains-signing-service-requests
Signing your request is probably the best solution if you want to keep your access policy as is (which is more flexible than restricting to an IP), but it seems to be a bit more complex. I haven't tried so far and I cannot find any doc to help.
A bit late to the party, but I was able to deal with the exact same issue by adding signature to my requests.
If you use Python (like I do), you can use the following library to make it particularly easy to implement: https://github.com/DavidMuller/aws-requests-auth
It worked perfectly for me.
You may either use resource based policy or identity based policy rather than IP based policy which is like hard coding the IP address.
But you need to use Signature version 4 to sign the request
For Java implementation please refer http://mytechbites.blogspot.in/2017/04/secure-amazon-elastic-search-service.html
I'm also trying to do this, and I got it working using the Allow access to the domain from specific IP(s)
option with the Elastic IP of my EC2 instance (could also work using the instance's private IP, but I'm not too sure)
참고URL : https://stackoverflow.com/questions/32978026/proper-access-policy-for-amazon-elastic-search-cluster
'developer tip' 카테고리의 다른 글
Bootstrap 3이 box-sizing : border-box로 전환 한 이유는 무엇입니까? (0) | 2020.08.27 |
---|---|
Helper와 Utility 클래스의 차이점은 무엇입니까? (0) | 2020.08.27 |
Android OpenGL ES 및 2D (0) | 2020.08.27 |
git rerere를 활성화하는 데 단점이 있습니까? (0) | 2020.08.27 |
JVM 스택 기반 및 Dalvik VM 레지스터 기반 이유는 무엇입니까? (0) | 2020.08.27 |