38 lines
1.5 KiB
Plaintext
38 lines
1.5 KiB
Plaintext
---
|
|
page_title: 'State: Sensitive Data'
|
|
description: Sensitive data in Terraform state.
|
|
---
|
|
|
|
# Sensitive Data in State
|
|
|
|
Terraform state can contain sensitive data, depending on the resources in use
|
|
and your definition of "sensitive." The state contains resource IDs and all
|
|
resource attributes. For resources such as databases, this may contain initial
|
|
passwords.
|
|
|
|
When using local state, state is stored in plain-text JSON files.
|
|
|
|
When using [remote state](/language/state/remote), state is only ever held in
|
|
memory when used by Terraform. It may be encrypted at rest, but this depends on
|
|
the specific remote state backend.
|
|
|
|
## Recommendations
|
|
|
|
If you manage any sensitive data with Terraform (like database passwords, user
|
|
passwords, or private keys), treat the state itself as sensitive data.
|
|
|
|
Storing state remotely can provide better security. As of Terraform 0.9,
|
|
Terraform does not persist state to the local disk when remote state is in use,
|
|
and some backends can be configured to encrypt the state data at rest.
|
|
|
|
For example:
|
|
|
|
- [Terraform Cloud](/cloud) always encrypts state at rest and
|
|
protects it with TLS in transit. Terraform Cloud also knows the identity of
|
|
the user requesting state and maintains a history of state changes. This can
|
|
be used to control access and track activity. [Terraform Enterprise](/enterprise)
|
|
also supports detailed audit logging.
|
|
- The S3 backend supports encryption at rest when the `encrypt` option is
|
|
enabled. IAM policies and logging can be used to identify any invalid access.
|
|
Requests for the state go over a TLS connection.
|