| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 | [[security-basic-setup]]=== Set up basic security for the Elastic Stack++++<titleabbrev>Set up basic security</titleabbrev>++++When you start {es} for the first time, passwords are generated for the `elastic`user and TLS is automatically configured for you. If you configure security manually _before_ starting your {es} nodes, the auto-configuration process will respect your security configuration. You can adjust your TLS configuration at any time, such as <<update-node-certs,updating node certificates>>.IMPORTANT: If your cluster has multiple nodes, then you must configureTLS between nodes. <<dev-vs-prod-mode,Production mode>> clusters will not startif you do not enable TLS.The transport layer relies on mutual TLS for both encryption andauthentication of nodes. Correctly applying TLS ensures that a malicious nodecannot join the cluster and exchange data with other nodes. While implementingusername and password authentication at the HTTP layer is useful for securing alocal cluster, the security of communication between nodes requires TLS.Configuring TLS between nodes is the basic security setup to preventunauthorized nodes from accessing to your cluster..Understanding transport contexts****Transport Layer Security (TLS) is the name of an industry standard protocol forapplying security controls (such as encryption) to network communications. TLSis the modern name for what used to be called Secure Sockets Layer (SSL). The{es} documentation uses the terms TLS and SSL interchangeably.Transport Protocol is the name of the protocol that {es} nodes use tocommunicate with one another. This name is specific to {es} and distinguishesthe transport port (default `9300`) from the HTTP port (default `9200`). Nodescommunicate with one another using the transport port, and REST clientscommunicate with {es} using the HTTP port.Although the word _transport_ appears in both contexts, they mean differentthings. It's possible to apply TLS to both the {es} transport port and the HTTPport. We know that these overlapping terms can be confusing, so to clarify, inthis scenario we're applying TLS to the {es} transport port. In<<security-basic-setup-https,the next scenario>>, we'll apply TLS to the {es}HTTP port.****[[generate-certificates]]==== Generate the certificate authorityYou can add as many nodes as you want in a cluster but they must be able tocommunicate with each other. The communication between nodes in a cluster ishandled by the transport module. To secure your cluster, you must ensure thatinternode communications are encrypted and verified, which is achieved withmutual TLS.In a secured cluster, {es} nodes use certificates to identifythemselves when communicating with other nodes.The cluster must validate the authenticity of these certificates. Therecommended approach is to trust a specific certificate authority (CA). Whennodes are added to your cluster they must use a certificate signed by the sameCA.For the transport layer, we recommend using a separate, dedicated CA insteadof an existing, possibly shared CA so that node membership is tightly controlled. Use the `elasticsearch-certutil` tool togenerate a CA for your cluster.. Before starting {es}, use the `elasticsearch-certutil` tool on any single nodeto generate a CA for your cluster.+[source,shell]----./bin/elasticsearch-certutil ca----   a. When prompted, accept the default file name, which is `elastic-stack-ca.p12`. This file contains the public certificate for your CA and the private key used to sign certificates for each node.   b. Enter a password for your CA. You can choose to leave the password blank   if you're not deploying to a production environment.. On any single node, generate a certificate and private key for the nodes inyour cluster. You include the `elastic-stack-ca.p12` output file that yougenerated in the previous step.+[source,shell]----./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12----+   `--ca <ca_file>`:: Name of the CA file used to sign your certificates. The   default file name from the `elasticsearch-certutil` tool is `elastic-stack-ca.p12`.+   a. Enter the password for your CA, or press *Enter* if you did not configure one in the previous step.   b. Create a password for the certificate and accept the default file name.+The output file is a keystore named `elastic-certificates.p12`. This filecontains a node certificate, node key, and CA certificate.. On *every* node in your cluster, copy the `elastic-certificates.p12` file tothe `$ES_PATH_CONF` directory.[[encrypt-internode-communication]]==== Encrypt internode communications with TLSThe transport networking layer is used for internal communication betweennodes in a cluster. When security features are enabled, you must use TLS toensure that communication between the nodes is encrypted.Now that you've generated a certificate authority and certificates, you'llupdate your cluster to use these files.NOTE: {es} monitors all files such as certificates, keys, keystores, ortruststores that are configured as values of TLS-related node settings. Ifyou update any of these files, such as when your hostnames change or yourcertificates are due to expire, {es} reloads them. The files are polled forchanges at a frequency determined by the global {es}`resource.reload.interval.high` setting, which defaults to 5 seconds.Complete the following steps *for each node in your cluster*. To join thesame cluster, all nodes must share the same `cluster.name` value.. Open the `$ES_PATH_CONF/elasticsearch.yml` file and make the followingchanges:   a. Add the <<cluster-name,`cluster-name`>> setting and enter a name for your cluster:+[source,yaml]----cluster.name: my-cluster----b. Add the <<node-name,`node.name`>> setting and enter a name for the node.The node name defaults to the hostname of the machine when {es} starts. +[source,yaml]----node.name: node-1----c. Add the following settings to enable internode communication and provideaccess to the node's certificate.+Because you are using the same `elastic-certificates.p12` file on every node inyour cluster, set the verification mode to `certificate`:+[source,yaml]----xpack.security.transport.ssl.enabled: truexpack.security.transport.ssl.verification_mode: certificate <1>xpack.security.transport.ssl.client_authentication: requiredxpack.security.transport.ssl.keystore.path: elastic-certificates.p12xpack.security.transport.ssl.truststore.path: elastic-certificates.p12----<1> If you want to use hostname verification, set the verification mode to`full`. You should generate a different certificate for each host thatmatches the DNS or IP address. See the `xpack.security.transport.ssl.verification_mode` parameter in {ref}/security-settings.html#transport-tls-ssl-settings[TLS settings].. If you entered a password when creating the node certificate, run the following commands to store the password in the {es} keystore:+--[source,shell]----./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password----[source,shell]----./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password------. Complete the previous steps for each node in your cluster.. On *every* node in your cluster, start {es}. The method for<<starting-elasticsearch,starting>> and <<starting-elasticsearch,stopping>> {es}varies depending on how you installed it.+For example, if you installed {es} with an archive distribution(`tar.gz` or `.zip`), you can enter `Ctrl+C` on the command line to stop{es}.+WARNING: You must perform a full cluster restart. Nodes that are configured touse TLS for transport cannot communicate with nodes that use unencrypted transport connection (and vice-versa).[[encrypting-internode-whatsnext]]==== What's next?Congratulations! You've encrypted communications between the nodes in yourcluster and can pass the<<bootstrap-checks-tls,TLS bootstrap check>>.To add another layer of security, <<security-basic-setup-https,Set up basic security for the Elastic Stack plus secured HTTPS traffic>>. In addition toconfiguring TLS on the transport interface of your {es} cluster, you configureTLS on the HTTP interface for both {es} and {kib}.
 |