/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 * 
 *  http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file 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.
 */
/*
 * Do not modify this file. This file is generated from the logs-2014-03-28.normal.json service model.
 */
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using System.Net;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.CloudWatchLogs.Model
{
    /// 
    /// Container for the parameters to the PutAccountPolicy operation.
    /// Creates an account-level data protection policy that applies to all log groups in
    /// the account. A data protection policy can help safeguard sensitive data that's ingested
    /// by your log groups by auditing and masking the sensitive log data. Each account can
    /// have only one account-level policy.
    /// 
    ///   
    /// 
    /// Sensitive data is detected and masked when it is ingested into a log group. When you
    /// set a data protection policy, log events ingested into the log groups before that
    /// time are not masked.
    /// 
    ///   
    /// 
    /// If you use PutAccountPolicy to create a data protection policy for your
    /// whole account, it applies to both existing log groups and all log groups that are
    /// created later in this account. The account policy is applied to existing log groups
    /// with eventual consistency. It might take up to 5 minutes before sensitive data in
    /// existing log groups begins to be masked.
    /// 
    ///  
    /// 
    /// By default, when a user views a log event that includes masked data, the sensitive
    /// data is replaced by asterisks. A user who has the logs:Unmask permission
    /// can use a GetLogEvents
    /// or FilterLogEvents
    /// operation with the unmask parameter set to true to view
    /// the unmasked log events. Users with the logs:Unmask can also view unmasked
    /// data in the CloudWatch Logs console by running a CloudWatch Logs Insights query with
    /// the unmask query command.
    /// 
    ///  
    /// 
    /// For more information, including a list of types of data that can be audited and masked,
    /// see Protect
    /// sensitive log data with masking.
    /// 
    ///  
    /// 
    /// To use the PutAccountPolicy operation, you must be signed on with the
    /// logs:PutDataProtectionPolicy and logs:PutAccountPolicy permissions.
    /// 
    ///  
    /// 
    /// The PutAccountPolicy operation applies to all log groups in the account.
    /// You can also use PutDataProtectionPolicy
    /// to create a data protection policy that applies to just one log group. If a log group
    /// has its own data protection policy and the account also has an account-level data
    /// protection policy, then the two policies are cumulative. Any sensitive term specified
    /// in either policy is masked.
    /// 
    /// 
    public partial class PutAccountPolicyRequest : AmazonCloudWatchLogsRequest
    {
        private string _policyDocument;
        private string _policyName;
        private PolicyType _policyType;
        private Scope _scope;
        /// 
        /// Gets and sets the property PolicyDocument. 
        /// 
        /// Specify the data protection policy, in JSON.
        /// 
        ///  
        /// 
        /// This policy must include two JSON blocks:
        /// 
        ///   -  
        /// 
        /// The first block must include both a 
DataIdentifer array and an Operation
        /// property with an Audit action. The DataIdentifer array lists
        /// the types of sensitive data that you want to mask. For more information about the
        /// available options, see Types
        /// of data that you can mask.
        /// 
        ///  
        /// 
        /// The Operation property with an Audit action is required
        /// to find the sensitive data terms. This Audit action must contain a FindingsDestination
        /// object. You can optionally use that FindingsDestination object to list
        /// one or more destinations to send audit findings to. If you specify destinations such
        /// as log groups, Kinesis Data Firehose streams, and S3 buckets, they must already exist.
        /// 
        ///    -  
        /// 
        /// The second block must include both a 
DataIdentifer array and an Operation
        /// property with an Deidentify action. The DataIdentifer array
        /// must exactly match the DataIdentifer array in the first block of the
        /// policy.
        /// 
        ///  
        /// 
        /// The Operation property with the Deidentify action is what
        /// actually masks the data, and it must contain the  "MaskConfig": {} object.
        /// The  "MaskConfig": {} object must be empty.
        /// 
        ///    
 
        /// 
        /// For an example data protection policy, see the Examples section on this page.
        /// 
        ///   
        /// 
        /// The contents of the two DataIdentifer arrays must match exactly.
        /// 
        ///   
        /// 
        /// In addition to the two JSON blocks, the policyDocument can also include
        /// Name, Description, and Version fields. The
        /// Name is different than the operation's policyName parameter,
        /// and is used as a dimension when CloudWatch Logs reports audit findings metrics to
        /// CloudWatch.
        /// 
        ///  
        /// 
        /// The JSON specified in policyDocument can be up to 30,720 characters.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public string PolicyDocument
        {
            get { return this._policyDocument; }
            set { this._policyDocument = value; }
        }
        // Check to see if PolicyDocument property is set
        internal bool IsSetPolicyDocument()
        {
            return this._policyDocument != null;
        }
        /// 
        /// Gets and sets the property PolicyName. 
        /// 
        /// A name for the policy. This must be unique within the account.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public string PolicyName
        {
            get { return this._policyName; }
            set { this._policyName = value; }
        }
        // Check to see if PolicyName property is set
        internal bool IsSetPolicyName()
        {
            return this._policyName != null;
        }
        /// 
        /// Gets and sets the property PolicyType. 
        /// 
        /// Currently the only valid value for this parameter is DATA_PROTECTION_POLICY.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public PolicyType PolicyType
        {
            get { return this._policyType; }
            set { this._policyType = value; }
        }
        // Check to see if PolicyType property is set
        internal bool IsSetPolicyType()
        {
            return this._policyType != null;
        }
        /// 
        /// Gets and sets the property Scope. 
        /// 
        /// Currently the only valid value for this parameter is ALL, which specifies
        /// that the data protection policy applies to all log groups in the account. If you omit
        /// this parameter, the default of ALL is used.
        /// 
        /// 
        public Scope Scope
        {
            get { return this._scope; }
            set { this._scope = value; }
        }
        // Check to see if Scope property is set
        internal bool IsSetScope()
        {
            return this._scope != null;
        }
    }
}