[Elasticsearch] X-pack Security API Key 사용 해 보기
Elastic/Elasticsearch 2020. 6. 19. 11:07Elastic Stack 이 좋은 이유는 기본 Basic license 까지 사용이 가능 하다는 것입니다.
사실 이것 말고도 엄청 많죠 ㅎㅎ
https://www.elastic.co/subscriptions
딱 API keys management 까지 사용이 됩니다. ㅎㅎㅎ
먼저 사용하기에 앞서서 Elasticsearch 와 Kibana 에 x-pack 사용을 위한 설정을 하셔야 합니다.
[Elasticsearch]
- elasticsearch.yml
xpack.monitoring.enabled: true
xpack.ml.enabled: true
xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true
xpack.security.authc.api_key.hashing.algorithm: "pbkdf2"
xpack.security.authc.api_key.cache.ttl: "1d"
xpack.security.authc.api_key.cache.max_keys: 10000
xpack.security.authc.api_key.cache.hash_algo: "ssha256"
위 설정은 기본이기 때문에 환경에 맞게 최적화 하셔야 합니다.
[Kibana]
- kibana.yml
xpack:
security:
enabled: true
encryptionKey: "9c42bff2e04f9b937966bda03e6b5828"
session:
idleTimeout: 600000
audit:
enabled: true
이렇게 설정 한 후 id/password 설정을 하시면 됩니다.
# bin/elasticsearch-setup-passwords interactive
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y
Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana]:
Reenter password for [kibana]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]
이렇게 설정이 끝나면 kibana 에 접속해서 API key 를 생성 하시면 됩니다.
아래 문서는 생성 시 도움이 되는 문서 입니다.
www.elastic.co/guide/en/elasticsearch/reference/current/security-privileges.html
www.elastic.co/guide/en/elasticsearch/reference/7.7/security-api-put-role.htmlwww.elastic.co/guide/en/elasticsearch/reference/7.7/defining-roles.htmlwww.elastic.co/guide/en/elasticsearch/reference/7.7/security-api-create-api-key.html
Kibana Console 에서 아래와 같이 생성이 가능 합니다.
POST /_security/api_key
{
"name": "team-index-command",
"expiration": "10m",
"role_descriptors": {
"role-team-index-command": {
"cluster": ["all"],
"index": [
{
"names": ["*"],
"privileges": ["all"]
}
]
}
}
}
{
"id" : "87cuynIBjKAXtnkobGgo",
"name" : "team-index-command",
"expiration" : 1592529999478,
"api_key" : "OlVGT_Q8RGq1C_ASHW7pGg"
}
생성 이후 사용을 위해서는
- ApiKey 는 id:api_key 를 base64 인코딩 합니다.
base64_encode("87cuynIBjKAXtnkobGgo"+":"+"OlVGT_Q8RGq1C_ASHW7pGg")
==> VGVVOXluSUJHUUdMaHpvcUxDVWo6aUtfSmlEMmdSMy1FUUFpdENCYzF1QQ==
curl -H
"Authorization: ApiKey VGVVOXluSUJHUUdMaHpvcUxDVWo6aUtfSmlEMmdSMy1FUUFpdENCYzF1QQ=="
http://localhost:9200/_cluster/health
이제 용도와 목적에 맞춰서 API key 를 만들고 사용 하시면 되겠습니다.