/*
 * 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 lakeformation-2017-03-31.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.LakeFormation.Model
{
    /// 
    /// Container for the parameters to the AssumeDecoratedRoleWithSAML operation.
    /// Allows a caller to assume an IAM role decorated as the SAML user specified in the
    /// SAML assertion included in the request. This decoration allows Lake Formation to enforce
    /// access policies against the SAML users and groups. This API operation requires SAML
    /// federation setup in the caller’s account as it can only be called with valid SAML
    /// assertions. Lake Formation does not scope down the permission of the assumed role.
    /// All permissions attached to the role via the SAML federation setup will be included
    /// in the role session. 
    /// 
    ///  
    /// 
    ///  This decorated role is expected to access data in Amazon S3 by getting temporary
    /// access from Lake Formation which is authorized via the virtual API GetDataAccess.
    /// Therefore, all SAML roles that can be assumed via AssumeDecoratedRoleWithSAML
    /// must at a minimum include lakeformation:GetDataAccess in their role policies.
    /// A typical IAM policy attached to such a role would look as follows: 
    /// 
    /// 
    public partial class AssumeDecoratedRoleWithSAMLRequest : AmazonLakeFormationRequest
    {
        private int? _durationSeconds;
        private string _principalArn;
        private string _roleArn;
        private string _samlAssertion;
        /// 
        /// Gets and sets the property DurationSeconds. 
        /// 
        /// The time period, between 900 and 43,200 seconds, for the timeout of the temporary
        /// credentials.
        /// 
        /// 
        [AWSProperty(Min=900, Max=43200)]
        public int DurationSeconds
        {
            get { return this._durationSeconds.GetValueOrDefault(); }
            set { this._durationSeconds = value; }
        }
        // Check to see if DurationSeconds property is set
        internal bool IsSetDurationSeconds()
        {
            return this._durationSeconds.HasValue; 
        }
        /// 
        /// Gets and sets the property PrincipalArn. 
        /// 
        /// The Amazon Resource Name (ARN) of the SAML provider in IAM that describes the IdP.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public string PrincipalArn
        {
            get { return this._principalArn; }
            set { this._principalArn = value; }
        }
        // Check to see if PrincipalArn property is set
        internal bool IsSetPrincipalArn()
        {
            return this._principalArn != null;
        }
        /// 
        /// Gets and sets the property RoleArn. 
        /// 
        /// The role that represents an IAM principal whose scope down policy allows it to call
        /// credential vending APIs such as GetTemporaryTableCredentials. The caller
        /// must also have iam:PassRole permission on this role. 
        /// 
        /// 
        [AWSProperty(Required=true)]
        public string RoleArn
        {
            get { return this._roleArn; }
            set { this._roleArn = value; }
        }
        // Check to see if RoleArn property is set
        internal bool IsSetRoleArn()
        {
            return this._roleArn != null;
        }
        /// 
        /// Gets and sets the property SAMLAssertion. 
        /// 
        /// A SAML assertion consisting of an assertion statement for the user who needs temporary
        /// credentials. This must match the SAML assertion that was issued to IAM. This must
        /// be Base64 encoded.
        /// 
        /// 
        [AWSProperty(Required=true, Min=4, Max=100000)]
        public string SAMLAssertion
        {
            get { return this._samlAssertion; }
            set { this._samlAssertion = value; }
        }
        // Check to see if SAMLAssertion property is set
        internal bool IsSetSAMLAssertion()
        {
            return this._samlAssertion != null;
        }
    }
}