diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -365,9 +365,3 @@
 for such a notice.
 
 You may add additional accurate notices of copyright ownership.
-
-Exhibit B - "Incompatible With Secondary Licenses" Notice
----------------------------------------------------------
-
-  This Source Code Form is "Incompatible With Secondary Licenses", as
-  defined by the Mozilla Public License, v. 2.0.
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`1.3.2`
+`1.3.3`
 
 
 ## Description
diff --git a/amazonka-cloudtrail.cabal b/amazonka-cloudtrail.cabal
--- a/amazonka-cloudtrail.cabal
+++ b/amazonka-cloudtrail.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-cloudtrail
-version:               1.3.2
+version:               1.3.3
 synopsis:              Amazon CloudTrail SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
@@ -63,11 +63,15 @@
 
     exposed-modules:
           Network.AWS.CloudTrail
+        , Network.AWS.CloudTrail.AddTags
         , Network.AWS.CloudTrail.CreateTrail
         , Network.AWS.CloudTrail.DeleteTrail
         , Network.AWS.CloudTrail.DescribeTrails
         , Network.AWS.CloudTrail.GetTrailStatus
+        , Network.AWS.CloudTrail.ListPublicKeys
+        , Network.AWS.CloudTrail.ListTags
         , Network.AWS.CloudTrail.LookupEvents
+        , Network.AWS.CloudTrail.RemoveTags
         , Network.AWS.CloudTrail.StartLogging
         , Network.AWS.CloudTrail.StopLogging
         , Network.AWS.CloudTrail.Types
@@ -79,7 +83,7 @@
         , Network.AWS.CloudTrail.Types.Sum
 
     build-depends:
-          amazonka-core == 1.3.2.*
+          amazonka-core == 1.3.3.*
         , base          >= 4.7     && < 5
 
 test-suite amazonka-cloudtrail-test
@@ -99,9 +103,9 @@
         , Test.AWS.CloudTrail.Internal
 
     build-depends:
-          amazonka-core == 1.3.2.*
-        , amazonka-test == 1.3.2.*
-        , amazonka-cloudtrail == 1.3.2.*
+          amazonka-core == 1.3.3.*
+        , amazonka-test == 1.3.3.*
+        , amazonka-cloudtrail == 1.3.3.*
         , base
         , bytestring
         , lens
diff --git a/fixture/AddTags.yaml b/fixture/AddTags.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AddTags.yaml
diff --git a/fixture/AddTagsResponse.proto b/fixture/AddTagsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AddTagsResponse.proto
diff --git a/fixture/ListPublicKeys.yaml b/fixture/ListPublicKeys.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListPublicKeys.yaml
diff --git a/fixture/ListPublicKeysResponse.proto b/fixture/ListPublicKeysResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListPublicKeysResponse.proto
diff --git a/fixture/ListTags.yaml b/fixture/ListTags.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTags.yaml
diff --git a/fixture/ListTagsResponse.proto b/fixture/ListTagsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsResponse.proto
diff --git a/fixture/RemoveTags.yaml b/fixture/RemoveTags.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveTags.yaml
diff --git a/fixture/RemoveTagsResponse.proto b/fixture/RemoveTagsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveTagsResponse.proto
diff --git a/gen/Network/AWS/CloudTrail.hs b/gen/Network/AWS/CloudTrail.hs
--- a/gen/Network/AWS/CloudTrail.hs
+++ b/gen/Network/AWS/CloudTrail.hs
@@ -53,12 +53,27 @@
     -- ** MaximumNumberOfTrailsExceededException
     , _MaximumNumberOfTrailsExceededException
 
+    -- ** UnsupportedOperationException
+    , _UnsupportedOperationException
+
+    -- ** KMSKeyDisabledException
+    , _KMSKeyDisabledException
+
+    -- ** InsufficientEncryptionPolicyException
+    , _InsufficientEncryptionPolicyException
+
     -- ** InsufficientSNSTopicPolicyException
     , _InsufficientSNSTopicPolicyException
 
     -- ** InvalidCloudWatchLogsRoleARNException
     , _InvalidCloudWatchLogsRoleARNException
 
+    -- ** TagsLimitExceededException
+    , _TagsLimitExceededException
+
+    -- ** CloudTrailARNInvalidException
+    , _CloudTrailARNInvalidException
+
     -- ** InvalidLookupAttributesException
     , _InvalidLookupAttributesException
 
@@ -68,12 +83,21 @@
     -- ** InvalidSNSTopicNameException
     , _InvalidSNSTopicNameException
 
+    -- ** ResourceTypeNotSupportedException
+    , _ResourceTypeNotSupportedException
+
     -- ** CloudWatchLogsDeliveryUnavailableException
     , _CloudWatchLogsDeliveryUnavailableException
 
+    -- ** KMSKeyNotFoundException
+    , _KMSKeyNotFoundException
+
     -- ** TrailNotFoundException
     , _TrailNotFoundException
 
+    -- ** TrailNotProvidedException
+    , _TrailNotProvidedException
+
     -- ** InvalidS3BucketNameException
     , _InvalidS3BucketNameException
 
@@ -86,6 +110,15 @@
     -- ** InvalidNextTokenException
     , _InvalidNextTokenException
 
+    -- ** InvalidTagParameterException
+    , _InvalidTagParameterException
+
+    -- ** OperationNotPermittedException
+    , _OperationNotPermittedException
+
+    -- ** InvalidTokenException
+    , _InvalidTokenException
+
     -- ** InvalidMaxResultsException
     , _InvalidMaxResultsException
 
@@ -95,6 +128,12 @@
     -- ** InvalidS3PrefixException
     , _InvalidS3PrefixException
 
+    -- ** ResourceNotFoundException
+    , _ResourceNotFoundException
+
+    -- ** InvalidKMSKeyIdException
+    , _InvalidKMSKeyIdException
+
     -- * Waiters
     -- $waiters
 
@@ -104,6 +143,12 @@
     -- ** DescribeTrails
     , module Network.AWS.CloudTrail.DescribeTrails
 
+    -- ** ListPublicKeys
+    , module Network.AWS.CloudTrail.ListPublicKeys
+
+    -- ** RemoveTags
+    , module Network.AWS.CloudTrail.RemoveTags
+
     -- ** LookupEvents
     , module Network.AWS.CloudTrail.LookupEvents
 
@@ -122,6 +167,12 @@
     -- ** GetTrailStatus
     , module Network.AWS.CloudTrail.GetTrailStatus
 
+    -- ** AddTags
+    , module Network.AWS.CloudTrail.AddTags
+
+    -- ** ListTags
+    , module Network.AWS.CloudTrail.ListTags
+
     -- ** StartLogging
     , module Network.AWS.CloudTrail.StartLogging
 
@@ -146,29 +197,56 @@
     , laAttributeKey
     , laAttributeValue
 
+    -- ** PublicKey
+    , PublicKey
+    , publicKey
+    , pkFingerprint
+    , pkValidityEndTime
+    , pkValue
+    , pkValidityStartTime
+
     -- ** Resource
     , Resource
     , resource
     , rResourceType
     , rResourceName
 
+    -- ** ResourceTag
+    , ResourceTag
+    , resourceTag
+    , rResourceId
+    , rTagsList
+
+    -- ** Tag
+    , Tag
+    , tag
+    , tagValue
+    , tagKey
+
     -- ** Trail
     , Trail
     , trail
+    , tLogFileValidationEnabled
+    , tTrailARN
     , tS3KeyPrefix
     , tSNSTopicName
     , tCloudWatchLogsLogGroupARN
+    , tKMSKeyId
     , tName
     , tIncludeGlobalServiceEvents
     , tCloudWatchLogsRoleARN
     , tS3BucketName
     ) where
 
+import           Network.AWS.CloudTrail.AddTags
 import           Network.AWS.CloudTrail.CreateTrail
 import           Network.AWS.CloudTrail.DeleteTrail
 import           Network.AWS.CloudTrail.DescribeTrails
 import           Network.AWS.CloudTrail.GetTrailStatus
+import           Network.AWS.CloudTrail.ListPublicKeys
+import           Network.AWS.CloudTrail.ListTags
 import           Network.AWS.CloudTrail.LookupEvents
+import           Network.AWS.CloudTrail.RemoveTags
 import           Network.AWS.CloudTrail.StartLogging
 import           Network.AWS.CloudTrail.StopLogging
 import           Network.AWS.CloudTrail.Types
diff --git a/gen/Network/AWS/CloudTrail/AddTags.hs b/gen/Network/AWS/CloudTrail/AddTags.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudTrail/AddTags.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.CloudTrail.AddTags
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds one or more tags to a trail, up to a limit of 10. Tags must be
+-- unique per trail. Overwrites an existing tag\'s value when a new value
+-- is specified for an existing tag key. If you specify a key without a
+-- value, the tag will be created with the specified key and a value of
+-- null.
+--
+-- /See:/ <http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_AddTags.html AWS API Reference> for AddTags.
+module Network.AWS.CloudTrail.AddTags
+    (
+    -- * Creating a Request
+      addTags
+    , AddTags
+    -- * Request Lenses
+    , atTagsList
+    , atResourceId
+
+    -- * Destructuring the Response
+    , addTagsResponse
+    , AddTagsResponse
+    -- * Response Lenses
+    , atrsResponseStatus
+    ) where
+
+import           Network.AWS.CloudTrail.Types
+import           Network.AWS.CloudTrail.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Specifies the tags to add to a trail.
+--
+-- /See:/ 'addTags' smart constructor.
+data AddTags = AddTags'
+    { _atTagsList   :: !(Maybe [Tag])
+    , _atResourceId :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddTags' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'atTagsList'
+--
+-- * 'atResourceId'
+addTags
+    :: Text -- ^ 'atResourceId'
+    -> AddTags
+addTags pResourceId_ =
+    AddTags'
+    { _atTagsList = Nothing
+    , _atResourceId = pResourceId_
+    }
+
+-- | Contains a list of CloudTrail tags, up to a limit of 10.
+atTagsList :: Lens' AddTags [Tag]
+atTagsList = lens _atTagsList (\ s a -> s{_atTagsList = a}) . _Default . _Coerce;
+
+-- | Specifies the ARN of the trail to which one or more tags will be added.
+-- The format of a trail ARN is
+-- 'arn:aws:cloudtrail:us-east-1:123456789012:trail\/MyTrail'.
+atResourceId :: Lens' AddTags Text
+atResourceId = lens _atResourceId (\ s a -> s{_atResourceId = a});
+
+instance AWSRequest AddTags where
+        type Rs AddTags = AddTagsResponse
+        request = postJSON cloudTrail
+        response
+          = receiveEmpty
+              (\ s h x -> AddTagsResponse' <$> (pure (fromEnum s)))
+
+instance ToHeaders AddTags where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("com.amazonaws.cloudtrail.v20131101.CloudTrail_20131101.AddTags"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON AddTags where
+        toJSON AddTags'{..}
+          = object
+              (catMaybes
+                 [("TagsList" .=) <$> _atTagsList,
+                  Just ("ResourceId" .= _atResourceId)])
+
+instance ToPath AddTags where
+        toPath = const "/"
+
+instance ToQuery AddTags where
+        toQuery = const mempty
+
+-- | Returns the objects or data listed below if successful. Otherwise,
+-- returns an error.
+--
+-- /See:/ 'addTagsResponse' smart constructor.
+newtype AddTagsResponse = AddTagsResponse'
+    { _atrsResponseStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddTagsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'atrsResponseStatus'
+addTagsResponse
+    :: Int -- ^ 'atrsResponseStatus'
+    -> AddTagsResponse
+addTagsResponse pResponseStatus_ =
+    AddTagsResponse'
+    { _atrsResponseStatus = pResponseStatus_
+    }
+
+-- | The response status code.
+atrsResponseStatus :: Lens' AddTagsResponse Int
+atrsResponseStatus = lens _atrsResponseStatus (\ s a -> s{_atrsResponseStatus = a});
diff --git a/gen/Network/AWS/CloudTrail/CreateTrail.hs b/gen/Network/AWS/CloudTrail/CreateTrail.hs
--- a/gen/Network/AWS/CloudTrail/CreateTrail.hs
+++ b/gen/Network/AWS/CloudTrail/CreateTrail.hs
@@ -18,8 +18,6 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- From the command line, use 'create-subscription'.
---
 -- Creates a trail that specifies the settings for delivery of log data to
 -- an Amazon S3 bucket.
 --
@@ -32,7 +30,9 @@
     -- * Request Lenses
     , ctS3KeyPrefix
     , ctSNSTopicName
+    , ctEnableLogFileValidation
     , ctCloudWatchLogsLogGroupARN
+    , ctKMSKeyId
     , ctIncludeGlobalServiceEvents
     , ctCloudWatchLogsRoleARN
     , ctName
@@ -42,9 +42,12 @@
     , createTrailResponse
     , CreateTrailResponse
     -- * Response Lenses
+    , ctrsLogFileValidationEnabled
+    , ctrsTrailARN
     , ctrsS3KeyPrefix
     , ctrsSNSTopicName
     , ctrsCloudWatchLogsLogGroupARN
+    , ctrsKMSKeyId
     , ctrsName
     , ctrsIncludeGlobalServiceEvents
     , ctrsCloudWatchLogsRoleARN
@@ -64,7 +67,9 @@
 data CreateTrail = CreateTrail'
     { _ctS3KeyPrefix                :: !(Maybe Text)
     , _ctSNSTopicName               :: !(Maybe Text)
+    , _ctEnableLogFileValidation    :: !(Maybe Bool)
     , _ctCloudWatchLogsLogGroupARN  :: !(Maybe Text)
+    , _ctKMSKeyId                   :: !(Maybe Text)
     , _ctIncludeGlobalServiceEvents :: !(Maybe Bool)
     , _ctCloudWatchLogsRoleARN      :: !(Maybe Text)
     , _ctName                       :: !Text
@@ -79,8 +84,12 @@
 --
 -- * 'ctSNSTopicName'
 --
+-- * 'ctEnableLogFileValidation'
+--
 -- * 'ctCloudWatchLogsLogGroupARN'
 --
+-- * 'ctKMSKeyId'
+--
 -- * 'ctIncludeGlobalServiceEvents'
 --
 -- * 'ctCloudWatchLogsRoleARN'
@@ -96,45 +105,89 @@
     CreateTrail'
     { _ctS3KeyPrefix = Nothing
     , _ctSNSTopicName = Nothing
+    , _ctEnableLogFileValidation = Nothing
     , _ctCloudWatchLogsLogGroupARN = Nothing
+    , _ctKMSKeyId = Nothing
     , _ctIncludeGlobalServiceEvents = Nothing
     , _ctCloudWatchLogsRoleARN = Nothing
     , _ctName = pName_
     , _ctS3BucketName = pS3BucketName_
     }
 
--- | Specifies the Amazon S3 key prefix that precedes the name of the bucket
--- you have designated for log file delivery.
+-- | Specifies the Amazon S3 key prefix that comes after the name of the
+-- bucket you have designated for log file delivery. For more information,
+-- see
+-- <http://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-find-log-files.html Finding Your CloudTrail Log Files>.
+-- The maximum length is 200 characters.
 ctS3KeyPrefix :: Lens' CreateTrail (Maybe Text)
 ctS3KeyPrefix = lens _ctS3KeyPrefix (\ s a -> s{_ctS3KeyPrefix = a});
 
 -- | Specifies the name of the Amazon SNS topic defined for notification of
--- log file delivery.
+-- log file delivery. The maximum length is 256 characters.
 ctSNSTopicName :: Lens' CreateTrail (Maybe Text)
 ctSNSTopicName = lens _ctSNSTopicName (\ s a -> s{_ctSNSTopicName = a});
 
+-- | Specifies whether log file integrity validation is enabled. The default
+-- is false.
+--
+-- When you disable log file integrity validation, the chain of digest
+-- files is broken after one hour. CloudTrail will not create digest files
+-- for log files that were delivered during a period in which log file
+-- integrity validation was disabled. For example, if you enable log file
+-- integrity validation at noon on January 1, disable it at noon on January
+-- 2, and re-enable it at noon on January 10, digest files will not be
+-- created for the log files delivered from noon on January 2 to noon on
+-- January 10. The same applies whenever you stop CloudTrail logging or
+-- delete a trail.
+ctEnableLogFileValidation :: Lens' CreateTrail (Maybe Bool)
+ctEnableLogFileValidation = lens _ctEnableLogFileValidation (\ s a -> s{_ctEnableLogFileValidation = a});
+
 -- | Specifies a log group name using an Amazon Resource Name (ARN), a unique
 -- identifier that represents the log group to which CloudTrail logs will
 -- be delivered. Not required unless you specify CloudWatchLogsRoleArn.
 ctCloudWatchLogsLogGroupARN :: Lens' CreateTrail (Maybe Text)
 ctCloudWatchLogsLogGroupARN = lens _ctCloudWatchLogsLogGroupARN (\ s a -> s{_ctCloudWatchLogsLogGroupARN = a});
 
+-- | Specifies the KMS key ID to use to encrypt the logs delivered by
+-- CloudTrail. The value can be a an alias name prefixed by \"alias\/\", a
+-- fully specified ARN to an alias, a fully specified ARN to a key, or a
+-- globally unique identifier.
+--
+-- Examples:
+--
+-- -   alias\/MyAliasName
+-- -   arn:aws:kms:us-east-1:123456789012:alias\/MyAliasName
+-- -   arn:aws:kms:us-east-1:123456789012:key\/12345678-1234-1234-1234-123456789012
+-- -   12345678-1234-1234-1234-123456789012
+ctKMSKeyId :: Lens' CreateTrail (Maybe Text)
+ctKMSKeyId = lens _ctKMSKeyId (\ s a -> s{_ctKMSKeyId = a});
+
 -- | Specifies whether the trail is publishing events from global services
 -- such as IAM to the log files.
 ctIncludeGlobalServiceEvents :: Lens' CreateTrail (Maybe Bool)
 ctIncludeGlobalServiceEvents = lens _ctIncludeGlobalServiceEvents (\ s a -> s{_ctIncludeGlobalServiceEvents = a});
 
 -- | Specifies the role for the CloudWatch Logs endpoint to assume to write
--- to a user’s log group.
+-- to a user\'s log group.
 ctCloudWatchLogsRoleARN :: Lens' CreateTrail (Maybe Text)
 ctCloudWatchLogsRoleARN = lens _ctCloudWatchLogsRoleARN (\ s a -> s{_ctCloudWatchLogsRoleARN = a});
 
--- | Specifies the name of the trail.
+-- | Specifies the name of the trail. The name must meet the following
+-- requirements:
+--
+-- -   Contain only ASCII letters (a-z, A-Z), numbers (0-9), periods (.),
+--     underscores (_), or dashes (-)
+-- -   Start with a letter or number, and end with a letter or number
+-- -   Be between 3 and 128 characters
+-- -   Have no adjacent periods, underscores or dashes. Names like
+--     'my-_namespace' and 'my--namespace' are invalid.
+-- -   Not be in IP address format (for example, 192.168.5.4)
 ctName :: Lens' CreateTrail Text
 ctName = lens _ctName (\ s a -> s{_ctName = a});
 
 -- | Specifies the name of the Amazon S3 bucket designated for publishing log
--- files.
+-- files. See
+-- <http://docs.aws.amazon.com/awscloudtrail/latest/userguide/create_trail_naming_policy.html Amazon S3 Bucket Naming Requirements>.
 ctS3BucketName :: Lens' CreateTrail Text
 ctS3BucketName = lens _ctS3BucketName (\ s a -> s{_ctS3BucketName = a});
 
@@ -145,8 +198,12 @@
           = receiveJSON
               (\ s h x ->
                  CreateTrailResponse' <$>
-                   (x .?> "S3KeyPrefix") <*> (x .?> "SnsTopicName") <*>
-                     (x .?> "CloudWatchLogsLogGroupArn")
+                   (x .?> "LogFileValidationEnabled") <*>
+                     (x .?> "TrailARN")
+                     <*> (x .?> "S3KeyPrefix")
+                     <*> (x .?> "SnsTopicName")
+                     <*> (x .?> "CloudWatchLogsLogGroupArn")
+                     <*> (x .?> "KmsKeyId")
                      <*> (x .?> "Name")
                      <*> (x .?> "IncludeGlobalServiceEvents")
                      <*> (x .?> "CloudWatchLogsRoleArn")
@@ -169,8 +226,11 @@
               (catMaybes
                  [("S3KeyPrefix" .=) <$> _ctS3KeyPrefix,
                   ("SnsTopicName" .=) <$> _ctSNSTopicName,
+                  ("EnableLogFileValidation" .=) <$>
+                    _ctEnableLogFileValidation,
                   ("CloudWatchLogsLogGroupArn" .=) <$>
                     _ctCloudWatchLogsLogGroupARN,
+                  ("KmsKeyId" .=) <$> _ctKMSKeyId,
                   ("IncludeGlobalServiceEvents" .=) <$>
                     _ctIncludeGlobalServiceEvents,
                   ("CloudWatchLogsRoleArn" .=) <$>
@@ -189,9 +249,12 @@
 --
 -- /See:/ 'createTrailResponse' smart constructor.
 data CreateTrailResponse = CreateTrailResponse'
-    { _ctrsS3KeyPrefix                :: !(Maybe Text)
+    { _ctrsLogFileValidationEnabled   :: !(Maybe Bool)
+    , _ctrsTrailARN                   :: !(Maybe Text)
+    , _ctrsS3KeyPrefix                :: !(Maybe Text)
     , _ctrsSNSTopicName               :: !(Maybe Text)
     , _ctrsCloudWatchLogsLogGroupARN  :: !(Maybe Text)
+    , _ctrsKMSKeyId                   :: !(Maybe Text)
     , _ctrsName                       :: !(Maybe Text)
     , _ctrsIncludeGlobalServiceEvents :: !(Maybe Bool)
     , _ctrsCloudWatchLogsRoleARN      :: !(Maybe Text)
@@ -203,12 +266,18 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'ctrsLogFileValidationEnabled'
+--
+-- * 'ctrsTrailARN'
+--
 -- * 'ctrsS3KeyPrefix'
 --
 -- * 'ctrsSNSTopicName'
 --
 -- * 'ctrsCloudWatchLogsLogGroupARN'
 --
+-- * 'ctrsKMSKeyId'
+--
 -- * 'ctrsName'
 --
 -- * 'ctrsIncludeGlobalServiceEvents'
@@ -223,9 +292,12 @@
     -> CreateTrailResponse
 createTrailResponse pResponseStatus_ =
     CreateTrailResponse'
-    { _ctrsS3KeyPrefix = Nothing
+    { _ctrsLogFileValidationEnabled = Nothing
+    , _ctrsTrailARN = Nothing
+    , _ctrsS3KeyPrefix = Nothing
     , _ctrsSNSTopicName = Nothing
     , _ctrsCloudWatchLogsLogGroupARN = Nothing
+    , _ctrsKMSKeyId = Nothing
     , _ctrsName = Nothing
     , _ctrsIncludeGlobalServiceEvents = Nothing
     , _ctrsCloudWatchLogsRoleARN = Nothing
@@ -233,8 +305,18 @@
     , _ctrsResponseStatus = pResponseStatus_
     }
 
--- | Specifies the Amazon S3 key prefix that precedes the name of the bucket
--- you have designated for log file delivery.
+-- | Specifies whether log file integrity validation is enabled.
+ctrsLogFileValidationEnabled :: Lens' CreateTrailResponse (Maybe Bool)
+ctrsLogFileValidationEnabled = lens _ctrsLogFileValidationEnabled (\ s a -> s{_ctrsLogFileValidationEnabled = a});
+
+-- | Specifies the ARN of the trail that was created.
+ctrsTrailARN :: Lens' CreateTrailResponse (Maybe Text)
+ctrsTrailARN = lens _ctrsTrailARN (\ s a -> s{_ctrsTrailARN = a});
+
+-- | Specifies the Amazon S3 key prefix that comes after the name of the
+-- bucket you have designated for log file delivery. For more information,
+-- see
+-- <http://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-find-log-files.html Finding Your CloudTrail Log Files>.
 ctrsS3KeyPrefix :: Lens' CreateTrailResponse (Maybe Text)
 ctrsS3KeyPrefix = lens _ctrsS3KeyPrefix (\ s a -> s{_ctrsS3KeyPrefix = a});
 
@@ -248,6 +330,13 @@
 ctrsCloudWatchLogsLogGroupARN :: Lens' CreateTrailResponse (Maybe Text)
 ctrsCloudWatchLogsLogGroupARN = lens _ctrsCloudWatchLogsLogGroupARN (\ s a -> s{_ctrsCloudWatchLogsLogGroupARN = a});
 
+-- | Specifies the KMS key ID that encrypts the logs delivered by CloudTrail.
+-- The value is a fully specified ARN to a KMS key in the format:
+--
+-- 'arn:aws:kms:us-east-1:123456789012:key\/12345678-1234-1234-1234-123456789012'
+ctrsKMSKeyId :: Lens' CreateTrailResponse (Maybe Text)
+ctrsKMSKeyId = lens _ctrsKMSKeyId (\ s a -> s{_ctrsKMSKeyId = a});
+
 -- | Specifies the name of the trail.
 ctrsName :: Lens' CreateTrailResponse (Maybe Text)
 ctrsName = lens _ctrsName (\ s a -> s{_ctrsName = a});
@@ -258,7 +347,7 @@
 ctrsIncludeGlobalServiceEvents = lens _ctrsIncludeGlobalServiceEvents (\ s a -> s{_ctrsIncludeGlobalServiceEvents = a});
 
 -- | Specifies the role for the CloudWatch Logs endpoint to assume to write
--- to a user’s log group.
+-- to a user\'s log group.
 ctrsCloudWatchLogsRoleARN :: Lens' CreateTrailResponse (Maybe Text)
 ctrsCloudWatchLogsRoleARN = lens _ctrsCloudWatchLogsRoleARN (\ s a -> s{_ctrsCloudWatchLogsRoleARN = a});
 
diff --git a/gen/Network/AWS/CloudTrail/DeleteTrail.hs b/gen/Network/AWS/CloudTrail/DeleteTrail.hs
--- a/gen/Network/AWS/CloudTrail/DeleteTrail.hs
+++ b/gen/Network/AWS/CloudTrail/DeleteTrail.hs
@@ -18,7 +18,8 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Deletes a trail.
+-- Deletes a trail. This operation must be called from the region in which
+-- the trail was created.
 --
 -- /See:/ <http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_DeleteTrail.html AWS API Reference> for DeleteTrail.
 module Network.AWS.CloudTrail.DeleteTrail
@@ -62,7 +63,9 @@
     { _dtName = pName_
     }
 
--- | The name of a trail to be deleted.
+-- | Specifies the name or the CloudTrail ARN of the trail to be deleted. The
+-- format of a trail ARN is
+-- 'arn:aws:cloudtrail:us-east-1:123456789012:trail\/MyTrail'.
 dtName :: Lens' DeleteTrail Text
 dtName = lens _dtName (\ s a -> s{_dtName = a});
 
diff --git a/gen/Network/AWS/CloudTrail/DescribeTrails.hs b/gen/Network/AWS/CloudTrail/DescribeTrails.hs
--- a/gen/Network/AWS/CloudTrail/DescribeTrails.hs
+++ b/gen/Network/AWS/CloudTrail/DescribeTrails.hs
@@ -63,7 +63,11 @@
     { _dtTrailNameList = Nothing
     }
 
--- | The trail returned.
+-- | Specifies a list of trail names, trail ARNs, or both, of the trails to
+-- describe. The format of a trail ARN is
+-- 'arn:aws:cloudtrail:us-east-1:123456789012:trail\/MyTrail'. If an empty
+-- list is specified, information for the trail in the current region is
+-- returned.
 dtTrailNameList :: Lens' DescribeTrails [Text]
 dtTrailNameList = lens _dtTrailNameList (\ s a -> s{_dtTrailNameList = a}) . _Default . _Coerce;
 
@@ -124,7 +128,7 @@
     , _dtrsResponseStatus = pResponseStatus_
     }
 
--- | The list of trails.
+-- | The list of trail objects.
 dtrsTrailList :: Lens' DescribeTrailsResponse [Trail]
 dtrsTrailList = lens _dtrsTrailList (\ s a -> s{_dtrsTrailList = a}) . _Default . _Coerce;
 
diff --git a/gen/Network/AWS/CloudTrail/GetTrailStatus.hs b/gen/Network/AWS/CloudTrail/GetTrailStatus.hs
--- a/gen/Network/AWS/CloudTrail/GetTrailStatus.hs
+++ b/gen/Network/AWS/CloudTrail/GetTrailStatus.hs
@@ -20,7 +20,9 @@
 --
 -- Returns a JSON-formatted list of information about the specified trail.
 -- Fields include information on delivery errors, Amazon SNS and Amazon S3
--- errors, and start and stop logging times for each trail.
+-- errors, and start and stop logging times for each trail. This operation
+-- returns trail status from a single region. To return trail status from
+-- all regions, you must call the operation on each region.
 --
 -- /See:/ <http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_GetTrailStatus.html AWS API Reference> for GetTrailStatus.
 module Network.AWS.CloudTrail.GetTrailStatus
@@ -35,14 +37,22 @@
     , getTrailStatusResponse
     , GetTrailStatusResponse
     -- * Response Lenses
+    , gtsrsTimeLoggingStopped
     , gtsrsLatestDeliveryError
+    , gtsrsLatestDigestDeliveryTime
+    , gtsrsLatestNotificationAttemptSucceeded
     , gtsrsStartLoggingTime
     , gtsrsLatestNotificationError
+    , gtsrsLatestDeliveryAttemptSucceeded
     , gtsrsIsLogging
+    , gtsrsTimeLoggingStarted
+    , gtsrsLatestDigestDeliveryError
+    , gtsrsLatestDeliveryAttemptTime
     , gtsrsLatestDeliveryTime
     , gtsrsLatestCloudWatchLogsDeliveryTime
     , gtsrsLatestCloudWatchLogsDeliveryError
     , gtsrsLatestNotificationTime
+    , gtsrsLatestNotificationAttemptTime
     , gtsrsStopLoggingTime
     , gtsrsResponseStatus
     ) where
@@ -73,7 +83,9 @@
     { _gtsName = pName_
     }
 
--- | The name of the trail for which you are requesting the current status.
+-- | Specifies the name or the CloudTrail ARN of the trail for which you are
+-- requesting status. The format of a trail ARN is
+-- 'arn:aws:cloudtrail:us-east-1:123456789012:trail\/MyTrail'.
 gtsName :: Lens' GetTrailStatus Text
 gtsName = lens _gtsName (\ s a -> s{_gtsName = a});
 
@@ -84,14 +96,22 @@
           = receiveJSON
               (\ s h x ->
                  GetTrailStatusResponse' <$>
-                   (x .?> "LatestDeliveryError") <*>
-                     (x .?> "StartLoggingTime")
+                   (x .?> "TimeLoggingStopped") <*>
+                     (x .?> "LatestDeliveryError")
+                     <*> (x .?> "LatestDigestDeliveryTime")
+                     <*> (x .?> "LatestNotificationAttemptSucceeded")
+                     <*> (x .?> "StartLoggingTime")
                      <*> (x .?> "LatestNotificationError")
+                     <*> (x .?> "LatestDeliveryAttemptSucceeded")
                      <*> (x .?> "IsLogging")
+                     <*> (x .?> "TimeLoggingStarted")
+                     <*> (x .?> "LatestDigestDeliveryError")
+                     <*> (x .?> "LatestDeliveryAttemptTime")
                      <*> (x .?> "LatestDeliveryTime")
                      <*> (x .?> "LatestCloudWatchLogsDeliveryTime")
                      <*> (x .?> "LatestCloudWatchLogsDeliveryError")
                      <*> (x .?> "LatestNotificationTime")
+                     <*> (x .?> "LatestNotificationAttemptTime")
                      <*> (x .?> "StopLoggingTime")
                      <*> (pure (fromEnum s)))
 
@@ -120,30 +140,52 @@
 --
 -- /See:/ 'getTrailStatusResponse' smart constructor.
 data GetTrailStatusResponse = GetTrailStatusResponse'
-    { _gtsrsLatestDeliveryError               :: !(Maybe Text)
-    , _gtsrsStartLoggingTime                  :: !(Maybe POSIX)
-    , _gtsrsLatestNotificationError           :: !(Maybe Text)
-    , _gtsrsIsLogging                         :: !(Maybe Bool)
-    , _gtsrsLatestDeliveryTime                :: !(Maybe POSIX)
-    , _gtsrsLatestCloudWatchLogsDeliveryTime  :: !(Maybe POSIX)
-    , _gtsrsLatestCloudWatchLogsDeliveryError :: !(Maybe Text)
-    , _gtsrsLatestNotificationTime            :: !(Maybe POSIX)
-    , _gtsrsStopLoggingTime                   :: !(Maybe POSIX)
-    , _gtsrsResponseStatus                    :: !Int
+    { _gtsrsTimeLoggingStopped                 :: !(Maybe Text)
+    , _gtsrsLatestDeliveryError                :: !(Maybe Text)
+    , _gtsrsLatestDigestDeliveryTime           :: !(Maybe POSIX)
+    , _gtsrsLatestNotificationAttemptSucceeded :: !(Maybe Text)
+    , _gtsrsStartLoggingTime                   :: !(Maybe POSIX)
+    , _gtsrsLatestNotificationError            :: !(Maybe Text)
+    , _gtsrsLatestDeliveryAttemptSucceeded     :: !(Maybe Text)
+    , _gtsrsIsLogging                          :: !(Maybe Bool)
+    , _gtsrsTimeLoggingStarted                 :: !(Maybe Text)
+    , _gtsrsLatestDigestDeliveryError          :: !(Maybe Text)
+    , _gtsrsLatestDeliveryAttemptTime          :: !(Maybe Text)
+    , _gtsrsLatestDeliveryTime                 :: !(Maybe POSIX)
+    , _gtsrsLatestCloudWatchLogsDeliveryTime   :: !(Maybe POSIX)
+    , _gtsrsLatestCloudWatchLogsDeliveryError  :: !(Maybe Text)
+    , _gtsrsLatestNotificationTime             :: !(Maybe POSIX)
+    , _gtsrsLatestNotificationAttemptTime      :: !(Maybe Text)
+    , _gtsrsStopLoggingTime                    :: !(Maybe POSIX)
+    , _gtsrsResponseStatus                     :: !Int
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'GetTrailStatusResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'gtsrsTimeLoggingStopped'
+--
 -- * 'gtsrsLatestDeliveryError'
 --
+-- * 'gtsrsLatestDigestDeliveryTime'
+--
+-- * 'gtsrsLatestNotificationAttemptSucceeded'
+--
 -- * 'gtsrsStartLoggingTime'
 --
 -- * 'gtsrsLatestNotificationError'
 --
+-- * 'gtsrsLatestDeliveryAttemptSucceeded'
+--
 -- * 'gtsrsIsLogging'
 --
+-- * 'gtsrsTimeLoggingStarted'
+--
+-- * 'gtsrsLatestDigestDeliveryError'
+--
+-- * 'gtsrsLatestDeliveryAttemptTime'
+--
 -- * 'gtsrsLatestDeliveryTime'
 --
 -- * 'gtsrsLatestCloudWatchLogsDeliveryTime'
@@ -152,6 +194,8 @@
 --
 -- * 'gtsrsLatestNotificationTime'
 --
+-- * 'gtsrsLatestNotificationAttemptTime'
+--
 -- * 'gtsrsStopLoggingTime'
 --
 -- * 'gtsrsResponseStatus'
@@ -160,26 +204,52 @@
     -> GetTrailStatusResponse
 getTrailStatusResponse pResponseStatus_ =
     GetTrailStatusResponse'
-    { _gtsrsLatestDeliveryError = Nothing
+    { _gtsrsTimeLoggingStopped = Nothing
+    , _gtsrsLatestDeliveryError = Nothing
+    , _gtsrsLatestDigestDeliveryTime = Nothing
+    , _gtsrsLatestNotificationAttemptSucceeded = Nothing
     , _gtsrsStartLoggingTime = Nothing
     , _gtsrsLatestNotificationError = Nothing
+    , _gtsrsLatestDeliveryAttemptSucceeded = Nothing
     , _gtsrsIsLogging = Nothing
+    , _gtsrsTimeLoggingStarted = Nothing
+    , _gtsrsLatestDigestDeliveryError = Nothing
+    , _gtsrsLatestDeliveryAttemptTime = Nothing
     , _gtsrsLatestDeliveryTime = Nothing
     , _gtsrsLatestCloudWatchLogsDeliveryTime = Nothing
     , _gtsrsLatestCloudWatchLogsDeliveryError = Nothing
     , _gtsrsLatestNotificationTime = Nothing
+    , _gtsrsLatestNotificationAttemptTime = Nothing
     , _gtsrsStopLoggingTime = Nothing
     , _gtsrsResponseStatus = pResponseStatus_
     }
 
+-- | This field is deprecated.
+gtsrsTimeLoggingStopped :: Lens' GetTrailStatusResponse (Maybe Text)
+gtsrsTimeLoggingStopped = lens _gtsrsTimeLoggingStopped (\ s a -> s{_gtsrsTimeLoggingStopped = a});
+
 -- | Displays any Amazon S3 error that CloudTrail encountered when attempting
 -- to deliver log files to the designated bucket. For more information see
 -- the topic
 -- <http://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html Error Responses>
 -- in the Amazon S3 API Reference.
+--
+-- This error occurs only when there is a problem with the destination S3
+-- bucket and will not occur for timeouts. To resolve the issue, create a
+-- new bucket and call 'UpdateTrail' to specify the new bucket, or fix the
+-- existing objects so that CloudTrail can again write to the bucket.
 gtsrsLatestDeliveryError :: Lens' GetTrailStatusResponse (Maybe Text)
 gtsrsLatestDeliveryError = lens _gtsrsLatestDeliveryError (\ s a -> s{_gtsrsLatestDeliveryError = a});
 
+-- | Specifies the date and time that CloudTrail last delivered a digest file
+-- to an account\'s Amazon S3 bucket.
+gtsrsLatestDigestDeliveryTime :: Lens' GetTrailStatusResponse (Maybe UTCTime)
+gtsrsLatestDigestDeliveryTime = lens _gtsrsLatestDigestDeliveryTime (\ s a -> s{_gtsrsLatestDigestDeliveryTime = a}) . mapping _Time;
+
+-- | This field is deprecated.
+gtsrsLatestNotificationAttemptSucceeded :: Lens' GetTrailStatusResponse (Maybe Text)
+gtsrsLatestNotificationAttemptSucceeded = lens _gtsrsLatestNotificationAttemptSucceeded (\ s a -> s{_gtsrsLatestNotificationAttemptSucceeded = a});
+
 -- | Specifies the most recent date and time when CloudTrail started
 -- recording API calls for an AWS account.
 gtsrsStartLoggingTime :: Lens' GetTrailStatusResponse (Maybe UTCTime)
@@ -192,10 +262,35 @@
 gtsrsLatestNotificationError :: Lens' GetTrailStatusResponse (Maybe Text)
 gtsrsLatestNotificationError = lens _gtsrsLatestNotificationError (\ s a -> s{_gtsrsLatestNotificationError = a});
 
+-- | This field is deprecated.
+gtsrsLatestDeliveryAttemptSucceeded :: Lens' GetTrailStatusResponse (Maybe Text)
+gtsrsLatestDeliveryAttemptSucceeded = lens _gtsrsLatestDeliveryAttemptSucceeded (\ s a -> s{_gtsrsLatestDeliveryAttemptSucceeded = a});
+
 -- | Whether the CloudTrail is currently logging AWS API calls.
 gtsrsIsLogging :: Lens' GetTrailStatusResponse (Maybe Bool)
 gtsrsIsLogging = lens _gtsrsIsLogging (\ s a -> s{_gtsrsIsLogging = a});
 
+-- | This field is deprecated.
+gtsrsTimeLoggingStarted :: Lens' GetTrailStatusResponse (Maybe Text)
+gtsrsTimeLoggingStarted = lens _gtsrsTimeLoggingStarted (\ s a -> s{_gtsrsTimeLoggingStarted = a});
+
+-- | Displays any Amazon S3 error that CloudTrail encountered when attempting
+-- to deliver a digest file to the designated bucket. For more information
+-- see the topic
+-- <http://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html Error Responses>
+-- in the Amazon S3 API Reference.
+--
+-- This error occurs only when there is a problem with the destination S3
+-- bucket and will not occur for timeouts. To resolve the issue, create a
+-- new bucket and call 'UpdateTrail' to specify the new bucket, or fix the
+-- existing objects so that CloudTrail can again write to the bucket.
+gtsrsLatestDigestDeliveryError :: Lens' GetTrailStatusResponse (Maybe Text)
+gtsrsLatestDigestDeliveryError = lens _gtsrsLatestDigestDeliveryError (\ s a -> s{_gtsrsLatestDigestDeliveryError = a});
+
+-- | This field is deprecated.
+gtsrsLatestDeliveryAttemptTime :: Lens' GetTrailStatusResponse (Maybe Text)
+gtsrsLatestDeliveryAttemptTime = lens _gtsrsLatestDeliveryAttemptTime (\ s a -> s{_gtsrsLatestDeliveryAttemptTime = a});
+
 -- | Specifies the date and time that CloudTrail last delivered log files to
 -- an account\'s Amazon S3 bucket.
 gtsrsLatestDeliveryTime :: Lens' GetTrailStatusResponse (Maybe UTCTime)
@@ -216,6 +311,10 @@
 -- bucket.
 gtsrsLatestNotificationTime :: Lens' GetTrailStatusResponse (Maybe UTCTime)
 gtsrsLatestNotificationTime = lens _gtsrsLatestNotificationTime (\ s a -> s{_gtsrsLatestNotificationTime = a}) . mapping _Time;
+
+-- | This field is deprecated.
+gtsrsLatestNotificationAttemptTime :: Lens' GetTrailStatusResponse (Maybe Text)
+gtsrsLatestNotificationAttemptTime = lens _gtsrsLatestNotificationAttemptTime (\ s a -> s{_gtsrsLatestNotificationAttemptTime = a});
 
 -- | Specifies the most recent date and time when CloudTrail stopped
 -- recording API calls for an AWS account.
diff --git a/gen/Network/AWS/CloudTrail/ListPublicKeys.hs b/gen/Network/AWS/CloudTrail/ListPublicKeys.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudTrail/ListPublicKeys.hs
@@ -0,0 +1,176 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.CloudTrail.ListPublicKeys
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns all public keys whose private keys were used to sign the digest
+-- files within the specified time range. The public key is needed to
+-- validate digest files that were signed with its corresponding private
+-- key.
+--
+-- CloudTrail uses different private\/public key pairs per region. Each
+-- digest file is signed with a private key unique to its region.
+-- Therefore, when you validate a digest file from a particular region, you
+-- must look in the same region for its corresponding public key.
+--
+-- /See:/ <http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_ListPublicKeys.html AWS API Reference> for ListPublicKeys.
+module Network.AWS.CloudTrail.ListPublicKeys
+    (
+    -- * Creating a Request
+      listPublicKeys
+    , ListPublicKeys
+    -- * Request Lenses
+    , lpkStartTime
+    , lpkNextToken
+    , lpkEndTime
+
+    -- * Destructuring the Response
+    , listPublicKeysResponse
+    , ListPublicKeysResponse
+    -- * Response Lenses
+    , lpkrsPublicKeyList
+    , lpkrsNextToken
+    , lpkrsResponseStatus
+    ) where
+
+import           Network.AWS.CloudTrail.Types
+import           Network.AWS.CloudTrail.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Requests the public keys for a specified time range.
+--
+-- /See:/ 'listPublicKeys' smart constructor.
+data ListPublicKeys = ListPublicKeys'
+    { _lpkStartTime :: !(Maybe POSIX)
+    , _lpkNextToken :: !(Maybe Text)
+    , _lpkEndTime   :: !(Maybe POSIX)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListPublicKeys' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lpkStartTime'
+--
+-- * 'lpkNextToken'
+--
+-- * 'lpkEndTime'
+listPublicKeys
+    :: ListPublicKeys
+listPublicKeys =
+    ListPublicKeys'
+    { _lpkStartTime = Nothing
+    , _lpkNextToken = Nothing
+    , _lpkEndTime = Nothing
+    }
+
+-- | Optionally specifies, in UTC, the start of the time range to look up
+-- public keys for CloudTrail digest files. If not specified, the current
+-- time is used, and the current public key is returned.
+lpkStartTime :: Lens' ListPublicKeys (Maybe UTCTime)
+lpkStartTime = lens _lpkStartTime (\ s a -> s{_lpkStartTime = a}) . mapping _Time;
+
+-- | Reserved for future use.
+lpkNextToken :: Lens' ListPublicKeys (Maybe Text)
+lpkNextToken = lens _lpkNextToken (\ s a -> s{_lpkNextToken = a});
+
+-- | Optionally specifies, in UTC, the end of the time range to look up
+-- public keys for CloudTrail digest files. If not specified, the current
+-- time is used.
+lpkEndTime :: Lens' ListPublicKeys (Maybe UTCTime)
+lpkEndTime = lens _lpkEndTime (\ s a -> s{_lpkEndTime = a}) . mapping _Time;
+
+instance AWSRequest ListPublicKeys where
+        type Rs ListPublicKeys = ListPublicKeysResponse
+        request = postJSON cloudTrail
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListPublicKeysResponse' <$>
+                   (x .?> "PublicKeyList" .!@ mempty) <*>
+                     (x .?> "NextToken")
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders ListPublicKeys where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("com.amazonaws.cloudtrail.v20131101.CloudTrail_20131101.ListPublicKeys"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON ListPublicKeys where
+        toJSON ListPublicKeys'{..}
+          = object
+              (catMaybes
+                 [("StartTime" .=) <$> _lpkStartTime,
+                  ("NextToken" .=) <$> _lpkNextToken,
+                  ("EndTime" .=) <$> _lpkEndTime])
+
+instance ToPath ListPublicKeys where
+        toPath = const "/"
+
+instance ToQuery ListPublicKeys where
+        toQuery = const mempty
+
+-- | Returns the objects or data listed below if successful. Otherwise,
+-- returns an error.
+--
+-- /See:/ 'listPublicKeysResponse' smart constructor.
+data ListPublicKeysResponse = ListPublicKeysResponse'
+    { _lpkrsPublicKeyList  :: !(Maybe [PublicKey])
+    , _lpkrsNextToken      :: !(Maybe Text)
+    , _lpkrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListPublicKeysResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lpkrsPublicKeyList'
+--
+-- * 'lpkrsNextToken'
+--
+-- * 'lpkrsResponseStatus'
+listPublicKeysResponse
+    :: Int -- ^ 'lpkrsResponseStatus'
+    -> ListPublicKeysResponse
+listPublicKeysResponse pResponseStatus_ =
+    ListPublicKeysResponse'
+    { _lpkrsPublicKeyList = Nothing
+    , _lpkrsNextToken = Nothing
+    , _lpkrsResponseStatus = pResponseStatus_
+    }
+
+-- | Contains an array of PublicKey objects.
+--
+-- The returned public keys may have validity time ranges that overlap.
+lpkrsPublicKeyList :: Lens' ListPublicKeysResponse [PublicKey]
+lpkrsPublicKeyList = lens _lpkrsPublicKeyList (\ s a -> s{_lpkrsPublicKeyList = a}) . _Default . _Coerce;
+
+-- | Reserved for future use.
+lpkrsNextToken :: Lens' ListPublicKeysResponse (Maybe Text)
+lpkrsNextToken = lens _lpkrsNextToken (\ s a -> s{_lpkrsNextToken = a});
+
+-- | The response status code.
+lpkrsResponseStatus :: Lens' ListPublicKeysResponse Int
+lpkrsResponseStatus = lens _lpkrsResponseStatus (\ s a -> s{_lpkrsResponseStatus = a});
diff --git a/gen/Network/AWS/CloudTrail/ListTags.hs b/gen/Network/AWS/CloudTrail/ListTags.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudTrail/ListTags.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.CloudTrail.ListTags
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the tags for the trail in the current region.
+--
+-- /See:/ <http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_ListTags.html AWS API Reference> for ListTags.
+module Network.AWS.CloudTrail.ListTags
+    (
+    -- * Creating a Request
+      listTags
+    , ListTags
+    -- * Request Lenses
+    , ltNextToken
+    , ltResourceIdList
+
+    -- * Destructuring the Response
+    , listTagsResponse
+    , ListTagsResponse
+    -- * Response Lenses
+    , ltrsNextToken
+    , ltrsResourceTagList
+    , ltrsResponseStatus
+    ) where
+
+import           Network.AWS.CloudTrail.Types
+import           Network.AWS.CloudTrail.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Specifies a list of trail tags to return.
+--
+-- /See:/ 'listTags' smart constructor.
+data ListTags = ListTags'
+    { _ltNextToken      :: !(Maybe Text)
+    , _ltResourceIdList :: ![Text]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListTags' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltNextToken'
+--
+-- * 'ltResourceIdList'
+listTags
+    :: ListTags
+listTags =
+    ListTags'
+    { _ltNextToken = Nothing
+    , _ltResourceIdList = mempty
+    }
+
+-- | Reserved for future use.
+ltNextToken :: Lens' ListTags (Maybe Text)
+ltNextToken = lens _ltNextToken (\ s a -> s{_ltNextToken = a});
+
+-- | Specifies a list of trail ARNs whose tags will be listed. The list has a
+-- limit of 20 ARNs. The format of a trail ARN is
+-- 'arn:aws:cloudtrail:us-east-1:123456789012:trail\/MyTrail'.
+ltResourceIdList :: Lens' ListTags [Text]
+ltResourceIdList = lens _ltResourceIdList (\ s a -> s{_ltResourceIdList = a}) . _Coerce;
+
+instance AWSRequest ListTags where
+        type Rs ListTags = ListTagsResponse
+        request = postJSON cloudTrail
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListTagsResponse' <$>
+                   (x .?> "NextToken") <*>
+                     (x .?> "ResourceTagList" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders ListTags where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("com.amazonaws.cloudtrail.v20131101.CloudTrail_20131101.ListTags"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON ListTags where
+        toJSON ListTags'{..}
+          = object
+              (catMaybes
+                 [("NextToken" .=) <$> _ltNextToken,
+                  Just ("ResourceIdList" .= _ltResourceIdList)])
+
+instance ToPath ListTags where
+        toPath = const "/"
+
+instance ToQuery ListTags where
+        toQuery = const mempty
+
+-- | Returns the objects or data listed below if successful. Otherwise,
+-- returns an error.
+--
+-- /See:/ 'listTagsResponse' smart constructor.
+data ListTagsResponse = ListTagsResponse'
+    { _ltrsNextToken       :: !(Maybe Text)
+    , _ltrsResourceTagList :: !(Maybe [ResourceTag])
+    , _ltrsResponseStatus  :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListTagsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltrsNextToken'
+--
+-- * 'ltrsResourceTagList'
+--
+-- * 'ltrsResponseStatus'
+listTagsResponse
+    :: Int -- ^ 'ltrsResponseStatus'
+    -> ListTagsResponse
+listTagsResponse pResponseStatus_ =
+    ListTagsResponse'
+    { _ltrsNextToken = Nothing
+    , _ltrsResourceTagList = Nothing
+    , _ltrsResponseStatus = pResponseStatus_
+    }
+
+-- | Reserved for future use.
+ltrsNextToken :: Lens' ListTagsResponse (Maybe Text)
+ltrsNextToken = lens _ltrsNextToken (\ s a -> s{_ltrsNextToken = a});
+
+-- | Undocumented member.
+ltrsResourceTagList :: Lens' ListTagsResponse [ResourceTag]
+ltrsResourceTagList = lens _ltrsResourceTagList (\ s a -> s{_ltrsResourceTagList = a}) . _Default . _Coerce;
+
+-- | The response status code.
+ltrsResponseStatus :: Lens' ListTagsResponse Int
+ltrsResponseStatus = lens _ltrsResponseStatus (\ s a -> s{_ltrsResponseStatus = a});
diff --git a/gen/Network/AWS/CloudTrail/LookupEvents.hs b/gen/Network/AWS/CloudTrail/LookupEvents.hs
--- a/gen/Network/AWS/CloudTrail/LookupEvents.hs
+++ b/gen/Network/AWS/CloudTrail/LookupEvents.hs
@@ -27,8 +27,10 @@
 -- maximum number of attributes that can be specified in any one lookup
 -- request are time range and one other attribute. The default number of
 -- results returned is 10, with a maximum of 50 possible. The response
--- includes a token that you can use to get the next page of results. The
--- rate of lookup requests is limited to one per second per account.
+-- includes a token that you can use to get the next page of results.
+--
+-- The rate of lookup requests is limited to one per second per account. If
+-- this limit is exceeded, a throttling error occurs.
 --
 -- Events that occurred during the selected time range will not be
 -- available for lookup if CloudTrail logging was not enabled when the
diff --git a/gen/Network/AWS/CloudTrail/RemoveTags.hs b/gen/Network/AWS/CloudTrail/RemoveTags.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudTrail/RemoveTags.hs
@@ -0,0 +1,134 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.CloudTrail.RemoveTags
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes the specified tags from a trail.
+--
+-- /See:/ <http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_RemoveTags.html AWS API Reference> for RemoveTags.
+module Network.AWS.CloudTrail.RemoveTags
+    (
+    -- * Creating a Request
+      removeTags
+    , RemoveTags
+    -- * Request Lenses
+    , rtTagsList
+    , rtResourceId
+
+    -- * Destructuring the Response
+    , removeTagsResponse
+    , RemoveTagsResponse
+    -- * Response Lenses
+    , rtrsResponseStatus
+    ) where
+
+import           Network.AWS.CloudTrail.Types
+import           Network.AWS.CloudTrail.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Specifies the tags to remove from a trail.
+--
+-- /See:/ 'removeTags' smart constructor.
+data RemoveTags = RemoveTags'
+    { _rtTagsList   :: !(Maybe [Tag])
+    , _rtResourceId :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RemoveTags' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rtTagsList'
+--
+-- * 'rtResourceId'
+removeTags
+    :: Text -- ^ 'rtResourceId'
+    -> RemoveTags
+removeTags pResourceId_ =
+    RemoveTags'
+    { _rtTagsList = Nothing
+    , _rtResourceId = pResourceId_
+    }
+
+-- | Specifies a list of tags to be removed.
+rtTagsList :: Lens' RemoveTags [Tag]
+rtTagsList = lens _rtTagsList (\ s a -> s{_rtTagsList = a}) . _Default . _Coerce;
+
+-- | Specifies the ARN of the trail from which tags should be removed. The
+-- format of a trail ARN is
+-- 'arn:aws:cloudtrail:us-east-1:123456789012:trail\/MyTrail'.
+rtResourceId :: Lens' RemoveTags Text
+rtResourceId = lens _rtResourceId (\ s a -> s{_rtResourceId = a});
+
+instance AWSRequest RemoveTags where
+        type Rs RemoveTags = RemoveTagsResponse
+        request = postJSON cloudTrail
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 RemoveTagsResponse' <$> (pure (fromEnum s)))
+
+instance ToHeaders RemoveTags where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("com.amazonaws.cloudtrail.v20131101.CloudTrail_20131101.RemoveTags"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON RemoveTags where
+        toJSON RemoveTags'{..}
+          = object
+              (catMaybes
+                 [("TagsList" .=) <$> _rtTagsList,
+                  Just ("ResourceId" .= _rtResourceId)])
+
+instance ToPath RemoveTags where
+        toPath = const "/"
+
+instance ToQuery RemoveTags where
+        toQuery = const mempty
+
+-- | Returns the objects or data listed below if successful. Otherwise,
+-- returns an error.
+--
+-- /See:/ 'removeTagsResponse' smart constructor.
+newtype RemoveTagsResponse = RemoveTagsResponse'
+    { _rtrsResponseStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RemoveTagsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rtrsResponseStatus'
+removeTagsResponse
+    :: Int -- ^ 'rtrsResponseStatus'
+    -> RemoveTagsResponse
+removeTagsResponse pResponseStatus_ =
+    RemoveTagsResponse'
+    { _rtrsResponseStatus = pResponseStatus_
+    }
+
+-- | The response status code.
+rtrsResponseStatus :: Lens' RemoveTagsResponse Int
+rtrsResponseStatus = lens _rtrsResponseStatus (\ s a -> s{_rtrsResponseStatus = a});
diff --git a/gen/Network/AWS/CloudTrail/StartLogging.hs b/gen/Network/AWS/CloudTrail/StartLogging.hs
--- a/gen/Network/AWS/CloudTrail/StartLogging.hs
+++ b/gen/Network/AWS/CloudTrail/StartLogging.hs
@@ -62,7 +62,9 @@
     { _sName = pName_
     }
 
--- | The name of the trail for which CloudTrail logs AWS API calls.
+-- | Specifies the name or the CloudTrail ARN of the trail for which
+-- CloudTrail logs AWS API calls. The format of a trail ARN is
+-- 'arn:aws:cloudtrail:us-east-1:123456789012:trail\/MyTrail'.
 sName :: Lens' StartLogging Text
 sName = lens _sName (\ s a -> s{_sName = a});
 
diff --git a/gen/Network/AWS/CloudTrail/StopLogging.hs b/gen/Network/AWS/CloudTrail/StopLogging.hs
--- a/gen/Network/AWS/CloudTrail/StopLogging.hs
+++ b/gen/Network/AWS/CloudTrail/StopLogging.hs
@@ -66,8 +66,9 @@
     { _slName = pName_
     }
 
--- | Communicates to CloudTrail the name of the trail for which to stop
--- logging AWS API calls.
+-- | Specifies the name or the CloudTrail ARN of the trail for which
+-- CloudTrail will stop logging AWS API calls. The format of a trail ARN is
+-- 'arn:aws:cloudtrail:us-east-1:123456789012:trail\/MyTrail'.
 slName :: Lens' StopLogging Text
 slName = lens _slName (\ s a -> s{_slName = a});
 
diff --git a/gen/Network/AWS/CloudTrail/Types.hs b/gen/Network/AWS/CloudTrail/Types.hs
--- a/gen/Network/AWS/CloudTrail/Types.hs
+++ b/gen/Network/AWS/CloudTrail/Types.hs
@@ -19,20 +19,33 @@
     , _InvalidTimeRangeException
     , _InsufficientS3BucketPolicyException
     , _MaximumNumberOfTrailsExceededException
+    , _UnsupportedOperationException
+    , _KMSKeyDisabledException
+    , _InsufficientEncryptionPolicyException
     , _InsufficientSNSTopicPolicyException
     , _InvalidCloudWatchLogsRoleARNException
+    , _TagsLimitExceededException
+    , _CloudTrailARNInvalidException
     , _InvalidLookupAttributesException
     , _InvalidTrailNameException
     , _InvalidSNSTopicNameException
+    , _ResourceTypeNotSupportedException
     , _CloudWatchLogsDeliveryUnavailableException
+    , _KMSKeyNotFoundException
     , _TrailNotFoundException
+    , _TrailNotProvidedException
     , _InvalidS3BucketNameException
     , _InvalidCloudWatchLogsLogGroupARNException
     , _S3BucketDoesNotExistException
     , _InvalidNextTokenException
+    , _InvalidTagParameterException
+    , _OperationNotPermittedException
+    , _InvalidTokenException
     , _InvalidMaxResultsException
     , _TrailAlreadyExistsException
     , _InvalidS3PrefixException
+    , _ResourceNotFoundException
+    , _InvalidKMSKeyIdException
 
     -- * LookupAttributeKey
     , LookupAttributeKey (..)
@@ -53,18 +66,41 @@
     , laAttributeKey
     , laAttributeValue
 
+    -- * PublicKey
+    , PublicKey
+    , publicKey
+    , pkFingerprint
+    , pkValidityEndTime
+    , pkValue
+    , pkValidityStartTime
+
     -- * Resource
     , Resource
     , resource
     , rResourceType
     , rResourceName
 
+    -- * ResourceTag
+    , ResourceTag
+    , resourceTag
+    , rResourceId
+    , rTagsList
+
+    -- * Tag
+    , Tag
+    , tag
+    , tagValue
+    , tagKey
+
     -- * Trail
     , Trail
     , trail
+    , tLogFileValidationEnabled
+    , tTrailARN
     , tS3KeyPrefix
     , tSNSTopicName
     , tCloudWatchLogsLogGroupARN
+    , tKMSKeyId
     , tName
     , tIncludeGlobalServiceEvents
     , tCloudWatchLogsRoleARN
@@ -125,6 +161,24 @@
 _MaximumNumberOfTrailsExceededException =
     _ServiceError . hasStatus 403 . hasCode "MaximumNumberOfTrailsExceeded"
 
+-- | This exception is thrown when the requested operation is not supported.
+-- For example, this exception will occur if an attempt is made to tag a
+-- trail and tagging is not supported in the current region.
+_UnsupportedOperationException :: AsError a => Getting (First ServiceError) a ServiceError
+_UnsupportedOperationException =
+    _ServiceError . hasStatus 400 . hasCode "UnsupportedOperation"
+
+-- | This exception is thrown when the KMS key is disabled.
+_KMSKeyDisabledException :: AsError a => Getting (First ServiceError) a ServiceError
+_KMSKeyDisabledException =
+    _ServiceError . hasStatus 400 . hasCode "KmsKeyDisabled"
+
+-- | This exception is thrown when the policy on the S3 bucket or KMS key is
+-- not sufficient.
+_InsufficientEncryptionPolicyException :: AsError a => Getting (First ServiceError) a ServiceError
+_InsufficientEncryptionPolicyException =
+    _ServiceError . hasStatus 400 . hasCode "InsufficientEncryptionPolicy"
+
 -- | This exception is thrown when the policy on the SNS topic is not
 -- sufficient.
 _InsufficientSNSTopicPolicyException :: AsError a => Getting (First ServiceError) a ServiceError
@@ -136,12 +190,34 @@
 _InvalidCloudWatchLogsRoleARNException =
     _ServiceError . hasStatus 400 . hasCode "InvalidCloudWatchLogsRoleArn"
 
+-- | The number of tags per trail has exceeded the permitted amount.
+-- Currently, the limit is 10.
+_TagsLimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
+_TagsLimitExceededException =
+    _ServiceError . hasStatus 400 . hasCode "TagsLimitExceeded"
+
+-- | This exception is thrown when an operation is called with an invalid
+-- trail ARN. The format of a trail ARN is
+-- 'arn:aws:cloudtrail:us-east-1:123456789012:trail\/MyTrail'.
+_CloudTrailARNInvalidException :: AsError a => Getting (First ServiceError) a ServiceError
+_CloudTrailARNInvalidException =
+    _ServiceError . hasStatus 400 . hasCode "CloudTrailARNInvalid"
+
 -- | Occurs when an invalid lookup attribute is specified.
 _InvalidLookupAttributesException :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidLookupAttributesException =
     _ServiceError . hasStatus 400 . hasCode "InvalidLookupAttributes"
 
 -- | This exception is thrown when the provided trail name is not valid.
+-- Trail names must meet the following requirements:
+--
+-- -   Contain only ASCII letters (a-z, A-Z), numbers (0-9), periods (.),
+--     underscores (_), or dashes (-)
+-- -   Start with a letter or number, and end with a letter or number
+-- -   Be between 3 and 128 characters
+-- -   Have no adjacent periods, underscores or dashes. Names like
+--     'my-_namespace' and 'my--namespace' are invalid.
+-- -   Not be in IP address format (for example, 192.168.5.4)
 _InvalidTrailNameException :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidTrailNameException =
     _ServiceError . hasStatus 400 . hasCode "InvalidTrailName"
@@ -151,17 +227,34 @@
 _InvalidSNSTopicNameException =
     _ServiceError . hasStatus 400 . hasCode "InvalidSnsTopicName"
 
+-- | This exception is thrown when the specified resource type is not
+-- supported by CloudTrail.
+_ResourceTypeNotSupportedException :: AsError a => Getting (First ServiceError) a ServiceError
+_ResourceTypeNotSupportedException =
+    _ServiceError . hasStatus 400 . hasCode "ResourceTypeNotSupported"
+
 -- | Cannot set a CloudWatch Logs delivery for this region.
 _CloudWatchLogsDeliveryUnavailableException :: AsError a => Getting (First ServiceError) a ServiceError
 _CloudWatchLogsDeliveryUnavailableException =
     _ServiceError . hasStatus 400 . hasCode "CloudWatchLogsDeliveryUnavailable"
 
+-- | This exception is thrown when the KMS key does not exist, or when the S3
+-- bucket and the KMS key are not in the same region.
+_KMSKeyNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
+_KMSKeyNotFoundException =
+    _ServiceError . hasStatus 400 . hasCode "KmsKeyNotFound"
+
 -- | This exception is thrown when the trail with the given name is not
 -- found.
 _TrailNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
 _TrailNotFoundException =
     _ServiceError . hasStatus 404 . hasCode "TrailNotFound"
 
+-- | This exception is deprecated.
+_TrailNotProvidedException :: AsError a => Getting (First ServiceError) a ServiceError
+_TrailNotProvidedException =
+    _ServiceError . hasStatus 404 . hasCode "TrailNotProvided"
+
 -- | This exception is thrown when the provided S3 bucket name is not valid.
 _InvalidS3BucketNameException :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidS3BucketNameException =
@@ -184,6 +277,22 @@
 _InvalidNextTokenException =
     _ServiceError . hasStatus 400 . hasCode "InvalidNextToken"
 
+-- | This exception is thrown when the key or value specified for the tag
+-- does not match the regular expression
+-- '^([\\\\p{L}\\\\p{Z}\\\\p{N}_.:\/=+\\\\-\']*)$'.
+_InvalidTagParameterException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidTagParameterException =
+    _ServiceError . hasStatus 400 . hasCode "InvalidTagParameter"
+
+-- | This exception is thrown when the requested operation is not permitted.
+_OperationNotPermittedException :: AsError a => Getting (First ServiceError) a ServiceError
+_OperationNotPermittedException =
+    _ServiceError . hasStatus 400 . hasCode "OperationNotPermitted"
+
+-- | Reserved for future use.
+_InvalidTokenException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidTokenException = _ServiceError . hasStatus 400 . hasCode "InvalidToken"
+
 -- | This exception is thrown if the limit specified is invalid.
 _InvalidMaxResultsException :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidMaxResultsException =
@@ -198,3 +307,13 @@
 _InvalidS3PrefixException :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidS3PrefixException =
     _ServiceError . hasStatus 400 . hasCode "InvalidS3Prefix"
+
+-- | This exception is thrown when the specified resource is not found.
+_ResourceNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
+_ResourceNotFoundException =
+    _ServiceError . hasStatus 400 . hasCode "ResourceNotFound"
+
+-- | This exception is thrown when the KMS key ARN is invalid.
+_InvalidKMSKeyIdException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidKMSKeyIdException =
+    _ServiceError . hasStatus 400 . hasCode "InvalidKmsKeyId"
diff --git a/gen/Network/AWS/CloudTrail/Types/Product.hs b/gen/Network/AWS/CloudTrail/Types/Product.hs
--- a/gen/Network/AWS/CloudTrail/Types/Product.hs
+++ b/gen/Network/AWS/CloudTrail/Types/Product.hs
@@ -136,6 +136,68 @@
                  [Just ("AttributeKey" .= _laAttributeKey),
                   Just ("AttributeValue" .= _laAttributeValue)])
 
+-- | Contains information about a returned public key.
+--
+-- /See:/ 'publicKey' smart constructor.
+data PublicKey = PublicKey'
+    { _pkFingerprint       :: !(Maybe Text)
+    , _pkValidityEndTime   :: !(Maybe POSIX)
+    , _pkValue             :: !(Maybe Base64)
+    , _pkValidityStartTime :: !(Maybe POSIX)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PublicKey' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pkFingerprint'
+--
+-- * 'pkValidityEndTime'
+--
+-- * 'pkValue'
+--
+-- * 'pkValidityStartTime'
+publicKey
+    :: PublicKey
+publicKey =
+    PublicKey'
+    { _pkFingerprint = Nothing
+    , _pkValidityEndTime = Nothing
+    , _pkValue = Nothing
+    , _pkValidityStartTime = Nothing
+    }
+
+-- | The fingerprint of the public key.
+pkFingerprint :: Lens' PublicKey (Maybe Text)
+pkFingerprint = lens _pkFingerprint (\ s a -> s{_pkFingerprint = a});
+
+-- | The ending time of validity of the public key.
+pkValidityEndTime :: Lens' PublicKey (Maybe UTCTime)
+pkValidityEndTime = lens _pkValidityEndTime (\ s a -> s{_pkValidityEndTime = a}) . mapping _Time;
+
+-- | The DER encoded public key value in PKCS#1 format.
+--
+-- /Note:/ This 'Lens' automatically encodes and decodes Base64 data,
+-- despite what the AWS documentation might say.
+-- The underlying isomorphism will encode to Base64 representation during
+-- serialisation, and decode from Base64 representation during deserialisation.
+-- This 'Lens' accepts and returns only raw unencoded data.
+pkValue :: Lens' PublicKey (Maybe ByteString)
+pkValue = lens _pkValue (\ s a -> s{_pkValue = a}) . mapping _Base64;
+
+-- | The starting time of validity of the public key.
+pkValidityStartTime :: Lens' PublicKey (Maybe UTCTime)
+pkValidityStartTime = lens _pkValidityStartTime (\ s a -> s{_pkValidityStartTime = a}) . mapping _Time;
+
+instance FromJSON PublicKey where
+        parseJSON
+          = withObject "PublicKey"
+              (\ x ->
+                 PublicKey' <$>
+                   (x .:? "Fingerprint") <*> (x .:? "ValidityEndTime")
+                     <*> (x .:? "Value")
+                     <*> (x .:? "ValidityStartTime"))
+
 -- | Specifies the type and name of a resource referenced by an event.
 --
 -- /See:/ 'resource' smart constructor.
@@ -182,13 +244,103 @@
                  Resource' <$>
                    (x .:? "ResourceType") <*> (x .:? "ResourceName"))
 
+-- | A resource tag.
+--
+-- /See:/ 'resourceTag' smart constructor.
+data ResourceTag = ResourceTag'
+    { _rResourceId :: !(Maybe Text)
+    , _rTagsList   :: !(Maybe [Tag])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResourceTag' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rResourceId'
+--
+-- * 'rTagsList'
+resourceTag
+    :: ResourceTag
+resourceTag =
+    ResourceTag'
+    { _rResourceId = Nothing
+    , _rTagsList = Nothing
+    }
+
+-- | Specifies the ARN of the resource.
+rResourceId :: Lens' ResourceTag (Maybe Text)
+rResourceId = lens _rResourceId (\ s a -> s{_rResourceId = a});
+
+-- | Undocumented member.
+rTagsList :: Lens' ResourceTag [Tag]
+rTagsList = lens _rTagsList (\ s a -> s{_rTagsList = a}) . _Default . _Coerce;
+
+instance FromJSON ResourceTag where
+        parseJSON
+          = withObject "ResourceTag"
+              (\ x ->
+                 ResourceTag' <$>
+                   (x .:? "ResourceId") <*>
+                     (x .:? "TagsList" .!= mempty))
+
+-- | A custom key-value pair associated with a resource such as a CloudTrail
+-- trail.
+--
+-- /See:/ 'tag' smart constructor.
+data Tag = Tag'
+    { _tagValue :: !(Maybe Text)
+    , _tagKey   :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Tag' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tagValue'
+--
+-- * 'tagKey'
+tag
+    :: Text -- ^ 'tagKey'
+    -> Tag
+tag pKey_ =
+    Tag'
+    { _tagValue = Nothing
+    , _tagKey = pKey_
+    }
+
+-- | The value in a key-value pair of a tag. The value must be no longer than
+-- 256 Unicode characters.
+tagValue :: Lens' Tag (Maybe Text)
+tagValue = lens _tagValue (\ s a -> s{_tagValue = a});
+
+-- | The key in a key-value pair. The key must be must be no longer than 128
+-- Unicode characters. The key must be unique for the resource to which it
+-- applies.
+tagKey :: Lens' Tag Text
+tagKey = lens _tagKey (\ s a -> s{_tagKey = a});
+
+instance FromJSON Tag where
+        parseJSON
+          = withObject "Tag"
+              (\ x -> Tag' <$> (x .:? "Value") <*> (x .: "Key"))
+
+instance ToJSON Tag where
+        toJSON Tag'{..}
+          = object
+              (catMaybes
+                 [("Value" .=) <$> _tagValue,
+                  Just ("Key" .= _tagKey)])
+
 -- | The settings for a trail.
 --
 -- /See:/ 'trail' smart constructor.
 data Trail = Trail'
-    { _tS3KeyPrefix                :: !(Maybe Text)
+    { _tLogFileValidationEnabled   :: !(Maybe Bool)
+    , _tTrailARN                   :: !(Maybe Text)
+    , _tS3KeyPrefix                :: !(Maybe Text)
     , _tSNSTopicName               :: !(Maybe Text)
     , _tCloudWatchLogsLogGroupARN  :: !(Maybe Text)
+    , _tKMSKeyId                   :: !(Maybe Text)
     , _tName                       :: !(Maybe Text)
     , _tIncludeGlobalServiceEvents :: !(Maybe Bool)
     , _tCloudWatchLogsRoleARN      :: !(Maybe Text)
@@ -199,12 +351,18 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'tLogFileValidationEnabled'
+--
+-- * 'tTrailARN'
+--
 -- * 'tS3KeyPrefix'
 --
 -- * 'tSNSTopicName'
 --
 -- * 'tCloudWatchLogsLogGroupARN'
 --
+-- * 'tKMSKeyId'
+--
 -- * 'tName'
 --
 -- * 'tIncludeGlobalServiceEvents'
@@ -216,21 +374,38 @@
     :: Trail
 trail =
     Trail'
-    { _tS3KeyPrefix = Nothing
+    { _tLogFileValidationEnabled = Nothing
+    , _tTrailARN = Nothing
+    , _tS3KeyPrefix = Nothing
     , _tSNSTopicName = Nothing
     , _tCloudWatchLogsLogGroupARN = Nothing
+    , _tKMSKeyId = Nothing
     , _tName = Nothing
     , _tIncludeGlobalServiceEvents = Nothing
     , _tCloudWatchLogsRoleARN = Nothing
     , _tS3BucketName = Nothing
     }
 
--- | Value of the Amazon S3 prefix.
+-- | Specifies whether log file validation is enabled.
+tLogFileValidationEnabled :: Lens' Trail (Maybe Bool)
+tLogFileValidationEnabled = lens _tLogFileValidationEnabled (\ s a -> s{_tLogFileValidationEnabled = a});
+
+-- | The Amazon Resource Name of the trail. The 'TrailARN' format is
+-- 'arn:aws:cloudtrail:us-east-1:123456789012:trail\/MyTrail'.
+tTrailARN :: Lens' Trail (Maybe Text)
+tTrailARN = lens _tTrailARN (\ s a -> s{_tTrailARN = a});
+
+-- | Specifies the Amazon S3 key prefix that comes after the name of the
+-- bucket you have designated for log file delivery. For more information,
+-- see
+-- <http://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-find-log-files.html Finding Your CloudTrail Log Files>.The
+-- maximum length is 200 characters.
 tS3KeyPrefix :: Lens' Trail (Maybe Text)
 tS3KeyPrefix = lens _tS3KeyPrefix (\ s a -> s{_tS3KeyPrefix = a});
 
 -- | Name of the existing Amazon SNS topic that CloudTrail uses to notify the
--- account owner when new CloudTrail log files have been delivered.
+-- account owner when new CloudTrail log files have been delivered. The
+-- maximum length is 256 characters.
 tSNSTopicName :: Lens' Trail (Maybe Text)
 tSNSTopicName = lens _tSNSTopicName (\ s a -> s{_tSNSTopicName = a});
 
@@ -239,7 +414,15 @@
 tCloudWatchLogsLogGroupARN :: Lens' Trail (Maybe Text)
 tCloudWatchLogsLogGroupARN = lens _tCloudWatchLogsLogGroupARN (\ s a -> s{_tCloudWatchLogsLogGroupARN = a});
 
--- | Name of the trail set by calling CreateTrail.
+-- | Specifies the KMS key ID that encrypts the logs delivered by CloudTrail.
+-- The value is a fully specified ARN to a KMS key in the format:
+--
+-- 'arn:aws:kms:us-east-1:123456789012:key\/12345678-1234-1234-1234-123456789012'
+tKMSKeyId :: Lens' Trail (Maybe Text)
+tKMSKeyId = lens _tKMSKeyId (\ s a -> s{_tKMSKeyId = a});
+
+-- | Name of the trail set by calling CreateTrail. The maximum length is 128
+-- characters.
 tName :: Lens' Trail (Maybe Text)
 tName = lens _tName (\ s a -> s{_tName = a});
 
@@ -249,12 +432,13 @@
 tIncludeGlobalServiceEvents = lens _tIncludeGlobalServiceEvents (\ s a -> s{_tIncludeGlobalServiceEvents = a});
 
 -- | Specifies the role for the CloudWatch Logs endpoint to assume to write
--- to a user’s log group.
+-- to a user\'s log group.
 tCloudWatchLogsRoleARN :: Lens' Trail (Maybe Text)
 tCloudWatchLogsRoleARN = lens _tCloudWatchLogsRoleARN (\ s a -> s{_tCloudWatchLogsRoleARN = a});
 
 -- | Name of the Amazon S3 bucket into which CloudTrail delivers your trail
--- files.
+-- files. See
+-- <http://docs.aws.amazon.com/awscloudtrail/latest/userguide/create_trail_naming_policy.html Amazon S3 Bucket Naming Requirements>.
 tS3BucketName :: Lens' Trail (Maybe Text)
 tS3BucketName = lens _tS3BucketName (\ s a -> s{_tS3BucketName = a});
 
@@ -263,8 +447,12 @@
           = withObject "Trail"
               (\ x ->
                  Trail' <$>
-                   (x .:? "S3KeyPrefix") <*> (x .:? "SnsTopicName") <*>
-                     (x .:? "CloudWatchLogsLogGroupArn")
+                   (x .:? "LogFileValidationEnabled") <*>
+                     (x .:? "TrailARN")
+                     <*> (x .:? "S3KeyPrefix")
+                     <*> (x .:? "SnsTopicName")
+                     <*> (x .:? "CloudWatchLogsLogGroupArn")
+                     <*> (x .:? "KmsKeyId")
                      <*> (x .:? "Name")
                      <*> (x .:? "IncludeGlobalServiceEvents")
                      <*> (x .:? "CloudWatchLogsRoleArn")
diff --git a/gen/Network/AWS/CloudTrail/UpdateTrail.hs b/gen/Network/AWS/CloudTrail/UpdateTrail.hs
--- a/gen/Network/AWS/CloudTrail/UpdateTrail.hs
+++ b/gen/Network/AWS/CloudTrail/UpdateTrail.hs
@@ -18,8 +18,6 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- From the command line, use 'update-subscription'.
---
 -- Updates the settings that specify delivery of log files. Changes to a
 -- trail do not require stopping the CloudTrail service. Use this action to
 -- designate an existing bucket for log delivery. If the existing bucket
@@ -35,7 +33,9 @@
     -- * Request Lenses
     , utS3KeyPrefix
     , utSNSTopicName
+    , utEnableLogFileValidation
     , utCloudWatchLogsLogGroupARN
+    , utKMSKeyId
     , utIncludeGlobalServiceEvents
     , utCloudWatchLogsRoleARN
     , utS3BucketName
@@ -45,9 +45,12 @@
     , updateTrailResponse
     , UpdateTrailResponse
     -- * Response Lenses
+    , utrsLogFileValidationEnabled
+    , utrsTrailARN
     , utrsS3KeyPrefix
     , utrsSNSTopicName
     , utrsCloudWatchLogsLogGroupARN
+    , utrsKMSKeyId
     , utrsName
     , utrsIncludeGlobalServiceEvents
     , utrsCloudWatchLogsRoleARN
@@ -67,7 +70,9 @@
 data UpdateTrail = UpdateTrail'
     { _utS3KeyPrefix                :: !(Maybe Text)
     , _utSNSTopicName               :: !(Maybe Text)
+    , _utEnableLogFileValidation    :: !(Maybe Bool)
     , _utCloudWatchLogsLogGroupARN  :: !(Maybe Text)
+    , _utKMSKeyId                   :: !(Maybe Text)
     , _utIncludeGlobalServiceEvents :: !(Maybe Bool)
     , _utCloudWatchLogsRoleARN      :: !(Maybe Text)
     , _utS3BucketName               :: !(Maybe Text)
@@ -82,8 +87,12 @@
 --
 -- * 'utSNSTopicName'
 --
+-- * 'utEnableLogFileValidation'
+--
 -- * 'utCloudWatchLogsLogGroupARN'
 --
+-- * 'utKMSKeyId'
+--
 -- * 'utIncludeGlobalServiceEvents'
 --
 -- * 'utCloudWatchLogsRoleARN'
@@ -98,45 +107,91 @@
     UpdateTrail'
     { _utS3KeyPrefix = Nothing
     , _utSNSTopicName = Nothing
+    , _utEnableLogFileValidation = Nothing
     , _utCloudWatchLogsLogGroupARN = Nothing
+    , _utKMSKeyId = Nothing
     , _utIncludeGlobalServiceEvents = Nothing
     , _utCloudWatchLogsRoleARN = Nothing
     , _utS3BucketName = Nothing
     , _utName = pName_
     }
 
--- | Specifies the Amazon S3 key prefix that precedes the name of the bucket
--- you have designated for log file delivery.
+-- | Specifies the Amazon S3 key prefix that comes after the name of the
+-- bucket you have designated for log file delivery. For more information,
+-- see
+-- <http://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-find-log-files.html Finding Your CloudTrail Log Files>.
+-- The maximum length is 200 characters.
 utS3KeyPrefix :: Lens' UpdateTrail (Maybe Text)
 utS3KeyPrefix = lens _utS3KeyPrefix (\ s a -> s{_utS3KeyPrefix = a});
 
 -- | Specifies the name of the Amazon SNS topic defined for notification of
--- log file delivery.
+-- log file delivery. The maximum length is 256 characters.
 utSNSTopicName :: Lens' UpdateTrail (Maybe Text)
 utSNSTopicName = lens _utSNSTopicName (\ s a -> s{_utSNSTopicName = a});
 
+-- | Specifies whether log file validation is enabled. The default is false.
+--
+-- When you disable log file integrity validation, the chain of digest
+-- files is broken after one hour. CloudTrail will not create digest files
+-- for log files that were delivered during a period in which log file
+-- integrity validation was disabled. For example, if you enable log file
+-- integrity validation at noon on January 1, disable it at noon on January
+-- 2, and re-enable it at noon on January 10, digest files will not be
+-- created for the log files delivered from noon on January 2 to noon on
+-- January 10. The same applies whenever you stop CloudTrail logging or
+-- delete a trail.
+utEnableLogFileValidation :: Lens' UpdateTrail (Maybe Bool)
+utEnableLogFileValidation = lens _utEnableLogFileValidation (\ s a -> s{_utEnableLogFileValidation = a});
+
 -- | Specifies a log group name using an Amazon Resource Name (ARN), a unique
 -- identifier that represents the log group to which CloudTrail logs will
 -- be delivered. Not required unless you specify CloudWatchLogsRoleArn.
 utCloudWatchLogsLogGroupARN :: Lens' UpdateTrail (Maybe Text)
 utCloudWatchLogsLogGroupARN = lens _utCloudWatchLogsLogGroupARN (\ s a -> s{_utCloudWatchLogsLogGroupARN = a});
 
+-- | Specifies the KMS key ID to use to encrypt the logs delivered by
+-- CloudTrail. The value can be a an alias name prefixed by \"alias\/\", a
+-- fully specified ARN to an alias, a fully specified ARN to a key, or a
+-- globally unique identifier.
+--
+-- Examples:
+--
+-- -   alias\/MyAliasName
+-- -   arn:aws:kms:us-east-1:123456789012:alias\/MyAliasName
+-- -   arn:aws:kms:us-east-1:123456789012:key\/12345678-1234-1234-1234-123456789012
+-- -   12345678-1234-1234-1234-123456789012
+utKMSKeyId :: Lens' UpdateTrail (Maybe Text)
+utKMSKeyId = lens _utKMSKeyId (\ s a -> s{_utKMSKeyId = a});
+
 -- | Specifies whether the trail is publishing events from global services
 -- such as IAM to the log files.
 utIncludeGlobalServiceEvents :: Lens' UpdateTrail (Maybe Bool)
 utIncludeGlobalServiceEvents = lens _utIncludeGlobalServiceEvents (\ s a -> s{_utIncludeGlobalServiceEvents = a});
 
 -- | Specifies the role for the CloudWatch Logs endpoint to assume to write
--- to a user’s log group.
+-- to a user\'s log group.
 utCloudWatchLogsRoleARN :: Lens' UpdateTrail (Maybe Text)
 utCloudWatchLogsRoleARN = lens _utCloudWatchLogsRoleARN (\ s a -> s{_utCloudWatchLogsRoleARN = a});
 
 -- | Specifies the name of the Amazon S3 bucket designated for publishing log
--- files.
+-- files. See
+-- <http://docs.aws.amazon.com/awscloudtrail/latest/userguide/create_trail_naming_policy.html Amazon S3 Bucket Naming Requirements>.
 utS3BucketName :: Lens' UpdateTrail (Maybe Text)
 utS3BucketName = lens _utS3BucketName (\ s a -> s{_utS3BucketName = a});
 
--- | Specifies the name of the trail.
+-- | Specifies the name of the trail or trail ARN. If 'Name' is a trail name,
+-- the string must meet the following requirements:
+--
+-- -   Contain only ASCII letters (a-z, A-Z), numbers (0-9), periods (.),
+--     underscores (_), or dashes (-)
+-- -   Start with a letter or number, and end with a letter or number
+-- -   Be between 3 and 128 characters
+-- -   Have no adjacent periods, underscores or dashes. Names like
+--     'my-_namespace' and 'my--namespace' are invalid.
+-- -   Not be in IP address format (for example, 192.168.5.4)
+--
+-- If 'Name' is a trail ARN, it must be in the format
+-- 'arn:aws:cloudtrail:us-east-1:123456789012:trail\/MyTrail'.
 utName :: Lens' UpdateTrail Text
 utName = lens _utName (\ s a -> s{_utName = a});
 
@@ -147,8 +202,12 @@
           = receiveJSON
               (\ s h x ->
                  UpdateTrailResponse' <$>
-                   (x .?> "S3KeyPrefix") <*> (x .?> "SnsTopicName") <*>
-                     (x .?> "CloudWatchLogsLogGroupArn")
+                   (x .?> "LogFileValidationEnabled") <*>
+                     (x .?> "TrailARN")
+                     <*> (x .?> "S3KeyPrefix")
+                     <*> (x .?> "SnsTopicName")
+                     <*> (x .?> "CloudWatchLogsLogGroupArn")
+                     <*> (x .?> "KmsKeyId")
                      <*> (x .?> "Name")
                      <*> (x .?> "IncludeGlobalServiceEvents")
                      <*> (x .?> "CloudWatchLogsRoleArn")
@@ -171,8 +230,11 @@
               (catMaybes
                  [("S3KeyPrefix" .=) <$> _utS3KeyPrefix,
                   ("SnsTopicName" .=) <$> _utSNSTopicName,
+                  ("EnableLogFileValidation" .=) <$>
+                    _utEnableLogFileValidation,
                   ("CloudWatchLogsLogGroupArn" .=) <$>
                     _utCloudWatchLogsLogGroupARN,
+                  ("KmsKeyId" .=) <$> _utKMSKeyId,
                   ("IncludeGlobalServiceEvents" .=) <$>
                     _utIncludeGlobalServiceEvents,
                   ("CloudWatchLogsRoleArn" .=) <$>
@@ -191,9 +253,12 @@
 --
 -- /See:/ 'updateTrailResponse' smart constructor.
 data UpdateTrailResponse = UpdateTrailResponse'
-    { _utrsS3KeyPrefix                :: !(Maybe Text)
+    { _utrsLogFileValidationEnabled   :: !(Maybe Bool)
+    , _utrsTrailARN                   :: !(Maybe Text)
+    , _utrsS3KeyPrefix                :: !(Maybe Text)
     , _utrsSNSTopicName               :: !(Maybe Text)
     , _utrsCloudWatchLogsLogGroupARN  :: !(Maybe Text)
+    , _utrsKMSKeyId                   :: !(Maybe Text)
     , _utrsName                       :: !(Maybe Text)
     , _utrsIncludeGlobalServiceEvents :: !(Maybe Bool)
     , _utrsCloudWatchLogsRoleARN      :: !(Maybe Text)
@@ -205,12 +270,18 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'utrsLogFileValidationEnabled'
+--
+-- * 'utrsTrailARN'
+--
 -- * 'utrsS3KeyPrefix'
 --
 -- * 'utrsSNSTopicName'
 --
 -- * 'utrsCloudWatchLogsLogGroupARN'
 --
+-- * 'utrsKMSKeyId'
+--
 -- * 'utrsName'
 --
 -- * 'utrsIncludeGlobalServiceEvents'
@@ -225,9 +296,12 @@
     -> UpdateTrailResponse
 updateTrailResponse pResponseStatus_ =
     UpdateTrailResponse'
-    { _utrsS3KeyPrefix = Nothing
+    { _utrsLogFileValidationEnabled = Nothing
+    , _utrsTrailARN = Nothing
+    , _utrsS3KeyPrefix = Nothing
     , _utrsSNSTopicName = Nothing
     , _utrsCloudWatchLogsLogGroupARN = Nothing
+    , _utrsKMSKeyId = Nothing
     , _utrsName = Nothing
     , _utrsIncludeGlobalServiceEvents = Nothing
     , _utrsCloudWatchLogsRoleARN = Nothing
@@ -235,8 +309,18 @@
     , _utrsResponseStatus = pResponseStatus_
     }
 
--- | Specifies the Amazon S3 key prefix that precedes the name of the bucket
--- you have designated for log file delivery.
+-- | Specifies whether log file integrity validation is enabled.
+utrsLogFileValidationEnabled :: Lens' UpdateTrailResponse (Maybe Bool)
+utrsLogFileValidationEnabled = lens _utrsLogFileValidationEnabled (\ s a -> s{_utrsLogFileValidationEnabled = a});
+
+-- | Specifies the ARN of the trail that was updated.
+utrsTrailARN :: Lens' UpdateTrailResponse (Maybe Text)
+utrsTrailARN = lens _utrsTrailARN (\ s a -> s{_utrsTrailARN = a});
+
+-- | Specifies the Amazon S3 key prefix that comes after the name of the
+-- bucket you have designated for log file delivery. For more information,
+-- see
+-- <http://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-find-log-files.html Finding Your CloudTrail Log Files>.
 utrsS3KeyPrefix :: Lens' UpdateTrailResponse (Maybe Text)
 utrsS3KeyPrefix = lens _utrsS3KeyPrefix (\ s a -> s{_utrsS3KeyPrefix = a});
 
@@ -250,6 +334,13 @@
 utrsCloudWatchLogsLogGroupARN :: Lens' UpdateTrailResponse (Maybe Text)
 utrsCloudWatchLogsLogGroupARN = lens _utrsCloudWatchLogsLogGroupARN (\ s a -> s{_utrsCloudWatchLogsLogGroupARN = a});
 
+-- | Specifies the KMS key ID that encrypts the logs delivered by CloudTrail.
+-- The value is a fully specified ARN to a KMS key in the format:
+--
+-- 'arn:aws:kms:us-east-1:123456789012:key\/12345678-1234-1234-1234-123456789012'
+utrsKMSKeyId :: Lens' UpdateTrailResponse (Maybe Text)
+utrsKMSKeyId = lens _utrsKMSKeyId (\ s a -> s{_utrsKMSKeyId = a});
+
 -- | Specifies the name of the trail.
 utrsName :: Lens' UpdateTrailResponse (Maybe Text)
 utrsName = lens _utrsName (\ s a -> s{_utrsName = a});
@@ -260,7 +351,7 @@
 utrsIncludeGlobalServiceEvents = lens _utrsIncludeGlobalServiceEvents (\ s a -> s{_utrsIncludeGlobalServiceEvents = a});
 
 -- | Specifies the role for the CloudWatch Logs endpoint to assume to write
--- to a user’s log group.
+-- to a user\'s log group.
 utrsCloudWatchLogsRoleARN :: Lens' UpdateTrailResponse (Maybe Text)
 utrsCloudWatchLogsRoleARN = lens _utrsCloudWatchLogsRoleARN (\ s a -> s{_utrsCloudWatchLogsRoleARN = a});
 
diff --git a/test/Test/AWS/Gen/CloudTrail.hs b/test/Test/AWS/Gen/CloudTrail.hs
--- a/test/Test/AWS/Gen/CloudTrail.hs
+++ b/test/Test/AWS/Gen/CloudTrail.hs
@@ -31,6 +31,12 @@
 --         [ testDescribeTrails $
 --             describeTrails
 --
+--         , testListPublicKeys $
+--             listPublicKeys
+--
+--         , testRemoveTags $
+--             removeTags
+--
 --         , testLookupEvents $
 --             lookupEvents
 --
@@ -49,6 +55,12 @@
 --         , testGetTrailStatus $
 --             getTrailStatus
 --
+--         , testAddTags $
+--             addTags
+--
+--         , testListTags $
+--             listTags
+--
 --         , testStartLogging $
 --             startLogging
 --
@@ -58,6 +70,12 @@
 --         [ testDescribeTrailsResponse $
 --             describeTrailsResponse
 --
+--         , testListPublicKeysResponse $
+--             listPublicKeysResponse
+--
+--         , testRemoveTagsResponse $
+--             removeTagsResponse
+--
 --         , testLookupEventsResponse $
 --             lookupEventsResponse
 --
@@ -76,6 +94,12 @@
 --         , testGetTrailStatusResponse $
 --             getTrailStatusResponse
 --
+--         , testAddTagsResponse $
+--             addTagsResponse
+--
+--         , testListTagsResponse $
+--             listTagsResponse
+--
 --         , testStartLoggingResponse $
 --             startLoggingResponse
 --
@@ -89,6 +113,16 @@
     "DescribeTrails"
     "fixture/DescribeTrails.yaml"
 
+testListPublicKeys :: ListPublicKeys -> TestTree
+testListPublicKeys = req
+    "ListPublicKeys"
+    "fixture/ListPublicKeys.yaml"
+
+testRemoveTags :: RemoveTags -> TestTree
+testRemoveTags = req
+    "RemoveTags"
+    "fixture/RemoveTags.yaml"
+
 testLookupEvents :: LookupEvents -> TestTree
 testLookupEvents = req
     "LookupEvents"
@@ -119,6 +153,16 @@
     "GetTrailStatus"
     "fixture/GetTrailStatus.yaml"
 
+testAddTags :: AddTags -> TestTree
+testAddTags = req
+    "AddTags"
+    "fixture/AddTags.yaml"
+
+testListTags :: ListTags -> TestTree
+testListTags = req
+    "ListTags"
+    "fixture/ListTags.yaml"
+
 testStartLogging :: StartLogging -> TestTree
 testStartLogging = req
     "StartLogging"
@@ -133,6 +177,20 @@
     cloudTrail
     (Proxy :: Proxy DescribeTrails)
 
+testListPublicKeysResponse :: ListPublicKeysResponse -> TestTree
+testListPublicKeysResponse = res
+    "ListPublicKeysResponse"
+    "fixture/ListPublicKeysResponse.proto"
+    cloudTrail
+    (Proxy :: Proxy ListPublicKeys)
+
+testRemoveTagsResponse :: RemoveTagsResponse -> TestTree
+testRemoveTagsResponse = res
+    "RemoveTagsResponse"
+    "fixture/RemoveTagsResponse.proto"
+    cloudTrail
+    (Proxy :: Proxy RemoveTags)
+
 testLookupEventsResponse :: LookupEventsResponse -> TestTree
 testLookupEventsResponse = res
     "LookupEventsResponse"
@@ -174,6 +232,20 @@
     "fixture/GetTrailStatusResponse.proto"
     cloudTrail
     (Proxy :: Proxy GetTrailStatus)
+
+testAddTagsResponse :: AddTagsResponse -> TestTree
+testAddTagsResponse = res
+    "AddTagsResponse"
+    "fixture/AddTagsResponse.proto"
+    cloudTrail
+    (Proxy :: Proxy AddTags)
+
+testListTagsResponse :: ListTagsResponse -> TestTree
+testListTagsResponse = res
+    "ListTagsResponse"
+    "fixture/ListTagsResponse.proto"
+    cloudTrail
+    (Proxy :: Proxy ListTags)
 
 testStartLoggingResponse :: StartLoggingResponse -> TestTree
 testStartLoggingResponse = res
