---
title:  Security
---

<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

The security framework permits authentication of connecting components and authorization of operations for all communicating components of the cluster.

-   **[Security Model](security_model.html)**

    This section describes the security model for Apache Geode. It is intended to help users understand how Geode controls access to information and resources so that they can make informed decisions about how to deploy and manage Geode clusters and clients.

-   **[Security Implementation Introduction and Overview](implementing_security.html)**

    Encryption, SSL secure communication, authentication, and authorization help to secure the cluster.

-   **[Security Detail Considerations](security_audit_overview.html)**

    This section gathers discrete details in one convenient location to better help you assess and configure the security of your environment.

-   **[Enable Security with Property Definitions](enable_security.html)**

-   **[Authentication](authentication_overview.html)**

    A cluster using authentication bars malicious peers or clients, and deters inadvertent access to its cache.

-   **[Authorization](../security/authorization_overview.html)**

    Client operations on a cache server can be restricted or completely blocked based on the roles and permissions assigned to the credentials submitted by the client.

-   **[Post Processing of Region Data](../security/post_processing.html)**

-   **[SSL](../security/ssl_overview.html)**

    SSL protects your data in transit between applications.

-   **[Serialization](../security/serialization.html)**

    This section describes the serialization mechanisms available in Apache Geode, including global serialization filters and PDX serialization.
