%% WARNING: DO NOT EDIT, AUTO-GENERATED CODE! %% See https://github.com/aws-beam/aws-codegen for more details. %% @doc CloudTrail %% %% This is the CloudTrail API Reference. %% %% It provides descriptions of actions, data types, common parameters, and %% common errors for CloudTrail. %% %% CloudTrail is a web service that records Amazon Web Services API calls for %% your Amazon Web Services account and delivers log files to an Amazon S3 %% bucket. The recorded information includes the identity of the user, the %% start time of the Amazon Web Services API call, the source IP address, the %% request parameters, and the response elements returned by the service. %% %% As an alternative to the API, you can use one of the Amazon Web Services %% SDKs, which consist of libraries and sample code for various programming %% languages and platforms (Java, Ruby, .NET, iOS, Android, etc.). The SDKs %% provide programmatic access to CloudTrail. For example, the SDKs handle %% cryptographically signing requests, managing errors, and retrying requests %% automatically. For more information about the Amazon Web Services SDKs, %% including how to download and install them, see Tools to Build on Amazon %% Web Services. %% %% See the CloudTrail User Guide for information about the data that is %% included with each Amazon Web Services API call listed in the log files. -module(aws_cloudtrail). -export([add_tags/2, add_tags/3, cancel_query/2, cancel_query/3, create_channel/2, create_channel/3, create_event_data_store/2, create_event_data_store/3, create_trail/2, create_trail/3, delete_channel/2, delete_channel/3, delete_event_data_store/2, delete_event_data_store/3, delete_resource_policy/2, delete_resource_policy/3, delete_trail/2, delete_trail/3, deregister_organization_delegated_admin/2, deregister_organization_delegated_admin/3, describe_query/2, describe_query/3, describe_trails/2, describe_trails/3, disable_federation/2, disable_federation/3, enable_federation/2, enable_federation/3, get_channel/2, get_channel/3, get_event_data_store/2, get_event_data_store/3, get_event_selectors/2, get_event_selectors/3, get_import/2, get_import/3, get_insight_selectors/2, get_insight_selectors/3, get_query_results/2, get_query_results/3, get_resource_policy/2, get_resource_policy/3, get_trail/2, get_trail/3, get_trail_status/2, get_trail_status/3, list_channels/2, list_channels/3, list_event_data_stores/2, list_event_data_stores/3, list_import_failures/2, list_import_failures/3, list_imports/2, list_imports/3, list_insights_metric_data/2, list_insights_metric_data/3, list_public_keys/2, list_public_keys/3, list_queries/2, list_queries/3, list_tags/2, list_tags/3, list_trails/2, list_trails/3, lookup_events/2, lookup_events/3, put_event_selectors/2, put_event_selectors/3, put_insight_selectors/2, put_insight_selectors/3, put_resource_policy/2, put_resource_policy/3, register_organization_delegated_admin/2, register_organization_delegated_admin/3, remove_tags/2, remove_tags/3, restore_event_data_store/2, restore_event_data_store/3, start_event_data_store_ingestion/2, start_event_data_store_ingestion/3, start_import/2, start_import/3, start_logging/2, start_logging/3, start_query/2, start_query/3, stop_event_data_store_ingestion/2, stop_event_data_store_ingestion/3, stop_import/2, stop_import/3, stop_logging/2, stop_logging/3, update_channel/2, update_channel/3, update_event_data_store/2, update_event_data_store/3, update_trail/2, update_trail/3]). -include_lib("hackney/include/hackney_lib.hrl"). %%==================================================================== %% API %%==================================================================== %% @doc Adds one or more tags to a trail, event data store, or channel, up to %% a limit of 50. %% %% Overwrites an existing tag's value when a new value is specified for %% an existing tag key. Tag key names must be unique; you cannot have two %% keys with the same name but different values. If you specify a key without %% a value, the tag will be created with the specified key and a value of %% null. You can tag a trail or event data store that applies to all Amazon %% Web Services Regions only from the Region in which the trail or event data %% store was created (also known as its home Region). add_tags(Client, Input) when is_map(Client), is_map(Input) -> add_tags(Client, Input, []). add_tags(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"AddTags">>, Input, Options). %% @doc Cancels a query if the query is not in a terminated state, such as %% `CANCELLED', `FAILED', `TIMED_OUT', or `FINISHED'. %% %% You must specify an ARN value for `EventDataStore'. The ID of the %% query that you want to cancel is also required. When you run %% `CancelQuery', the query status might show as `CANCELLED' even if %% the operation is not yet finished. cancel_query(Client, Input) when is_map(Client), is_map(Input) -> cancel_query(Client, Input, []). cancel_query(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"CancelQuery">>, Input, Options). %% @doc Creates a channel for CloudTrail to ingest events from a partner or %% external source. %% %% After you create a channel, a CloudTrail Lake event data store can log %% events from the partner or source that you specify. create_channel(Client, Input) when is_map(Client), is_map(Input) -> create_channel(Client, Input, []). create_channel(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"CreateChannel">>, Input, Options). %% @doc Creates a new event data store. create_event_data_store(Client, Input) when is_map(Client), is_map(Input) -> create_event_data_store(Client, Input, []). create_event_data_store(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"CreateEventDataStore">>, Input, Options). %% @doc Creates a trail that specifies the settings for delivery of log data %% to an Amazon S3 bucket. create_trail(Client, Input) when is_map(Client), is_map(Input) -> create_trail(Client, Input, []). create_trail(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"CreateTrail">>, Input, Options). %% @doc Deletes a channel. delete_channel(Client, Input) when is_map(Client), is_map(Input) -> delete_channel(Client, Input, []). delete_channel(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DeleteChannel">>, Input, Options). %% @doc Disables the event data store specified by `EventDataStore', %% which accepts an event data store ARN. %% %% After you run `DeleteEventDataStore', the event data store enters a %% `PENDING_DELETION' state, and is automatically deleted after a wait %% period of seven days. `TerminationProtectionEnabled' must be set to %% `False' on the event data store and the `FederationStatus' must be %% `DISABLED'. You cannot delete an event data store if %% `TerminationProtectionEnabled' is `True' or the %% `FederationStatus' is `ENABLED'. %% %% After you run `DeleteEventDataStore' on an event data store, you %% cannot run `ListQueries', `DescribeQuery', or %% `GetQueryResults' on queries that are using an event data store in a %% `PENDING_DELETION' state. An event data store in the %% `PENDING_DELETION' state does not incur costs. delete_event_data_store(Client, Input) when is_map(Client), is_map(Input) -> delete_event_data_store(Client, Input, []). delete_event_data_store(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DeleteEventDataStore">>, Input, Options). %% @doc Deletes the resource-based policy attached to the CloudTrail channel. delete_resource_policy(Client, Input) when is_map(Client), is_map(Input) -> delete_resource_policy(Client, Input, []). delete_resource_policy(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DeleteResourcePolicy">>, Input, Options). %% @doc Deletes a trail. %% %% This operation must be called from the Region in which the trail was %% created. `DeleteTrail' cannot be called on the shadow trails %% (replicated trails in other Regions) of a trail that is enabled in all %% Regions. delete_trail(Client, Input) when is_map(Client), is_map(Input) -> delete_trail(Client, Input, []). delete_trail(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DeleteTrail">>, Input, Options). %% @doc Removes CloudTrail delegated administrator permissions from a member %% account in an organization. deregister_organization_delegated_admin(Client, Input) when is_map(Client), is_map(Input) -> deregister_organization_delegated_admin(Client, Input, []). deregister_organization_delegated_admin(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DeregisterOrganizationDelegatedAdmin">>, Input, Options). %% @doc Returns metadata about a query, including query run time in %% milliseconds, number of events scanned and matched, and query status. %% %% If the query results were delivered to an S3 bucket, the response also %% provides the S3 URI and the delivery status. %% %% You must specify either a `QueryID' or a `QueryAlias'. Specifying %% the `QueryAlias' parameter returns information about the last query %% run for the alias. describe_query(Client, Input) when is_map(Client), is_map(Input) -> describe_query(Client, Input, []). describe_query(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DescribeQuery">>, Input, Options). %% @doc Retrieves settings for one or more trails associated with the current %% Region for your account. describe_trails(Client, Input) when is_map(Client), is_map(Input) -> describe_trails(Client, Input, []). describe_trails(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DescribeTrails">>, Input, Options). %% @doc Disables Lake query federation on the specified event data store. %% %% When you disable federation, CloudTrail disables the integration with %% Glue, Lake Formation, and Amazon Athena. After disabling Lake query %% federation, you can no longer query your event data in Amazon Athena. %% %% No CloudTrail Lake data is deleted when you disable federation and you can %% continue to run queries in CloudTrail Lake. disable_federation(Client, Input) when is_map(Client), is_map(Input) -> disable_federation(Client, Input, []). disable_federation(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DisableFederation">>, Input, Options). %% @doc Enables Lake query federation on the specified event data store. %% %% Federating an event data store lets you view the metadata associated with %% the event data store in the Glue Data Catalog and run SQL queries against %% your event data using Amazon Athena. The table metadata stored in the Glue %% Data Catalog lets the Athena query engine know how to find, read, and %% process the data that you want to query. %% %% When you enable Lake query federation, CloudTrail creates a managed %% database named `aws:cloudtrail' (if the database doesn't already %% exist) and a managed federated table in the Glue Data Catalog. The event %% data store ID is used for the table name. CloudTrail registers the role %% ARN and event data store in Lake Formation, the service responsible for %% allowing fine-grained access control of the federated resources in the %% Glue Data Catalog. %% %% For more information about Lake query federation, see Federate an event %% data store. enable_federation(Client, Input) when is_map(Client), is_map(Input) -> enable_federation(Client, Input, []). enable_federation(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"EnableFederation">>, Input, Options). %% @doc Returns information about a specific channel. get_channel(Client, Input) when is_map(Client), is_map(Input) -> get_channel(Client, Input, []). get_channel(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetChannel">>, Input, Options). %% @doc Returns information about an event data store specified as either an %% ARN or the ID portion of the ARN. get_event_data_store(Client, Input) when is_map(Client), is_map(Input) -> get_event_data_store(Client, Input, []). get_event_data_store(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetEventDataStore">>, Input, Options). %% @doc Describes the settings for the event selectors that you configured %% for your trail. %% %% The information returned for your event selectors includes the following: %% %% For more information about logging management and data events, %% see the following topics in the CloudTrail User Guide: %% %% get_event_selectors(Client, Input) when is_map(Client), is_map(Input) -> get_event_selectors(Client, Input, []). get_event_selectors(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetEventSelectors">>, Input, Options). %% @doc Returns information about a specific import. get_import(Client, Input) when is_map(Client), is_map(Input) -> get_import(Client, Input, []). get_import(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetImport">>, Input, Options). %% @doc Describes the settings for the Insights event selectors that you %% configured for your trail or event data store. %% %% `GetInsightSelectors' shows if CloudTrail Insights event logging is %% enabled on the trail or event data store, and if it is, which Insights %% types are enabled. If you run `GetInsightSelectors' on a trail or %% event data store that does not have Insights events enabled, the operation %% throws the exception `InsightNotEnabledException' %% %% Specify either the `EventDataStore' parameter to get Insights event %% selectors for an event data store, or the `TrailName' parameter to the %% get Insights event selectors for a trail. You cannot specify these %% parameters together. %% %% For more information, see Logging CloudTrail Insights events in the %% CloudTrail User Guide. get_insight_selectors(Client, Input) when is_map(Client), is_map(Input) -> get_insight_selectors(Client, Input, []). get_insight_selectors(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetInsightSelectors">>, Input, Options). %% @doc Gets event data results of a query. %% %% You must specify the `QueryID' value returned by the `StartQuery' %% operation. get_query_results(Client, Input) when is_map(Client), is_map(Input) -> get_query_results(Client, Input, []). get_query_results(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetQueryResults">>, Input, Options). %% @doc Retrieves the JSON text of the resource-based policy document %% attached to the CloudTrail channel. get_resource_policy(Client, Input) when is_map(Client), is_map(Input) -> get_resource_policy(Client, Input, []). get_resource_policy(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetResourcePolicy">>, Input, Options). %% @doc Returns settings information for a specified trail. get_trail(Client, Input) when is_map(Client), is_map(Input) -> get_trail(Client, Input, []). get_trail(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetTrail">>, Input, Options). %% @doc 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. This operation %% returns trail status from a single Region. To return trail status from all %% Regions, you must call the operation on each Region. get_trail_status(Client, Input) when is_map(Client), is_map(Input) -> get_trail_status(Client, Input, []). get_trail_status(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetTrailStatus">>, Input, Options). %% @doc Lists the channels in the current account, and their source names. list_channels(Client, Input) when is_map(Client), is_map(Input) -> list_channels(Client, Input, []). list_channels(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListChannels">>, Input, Options). %% @doc Returns information about all event data stores in the account, in %% the current Region. list_event_data_stores(Client, Input) when is_map(Client), is_map(Input) -> list_event_data_stores(Client, Input, []). list_event_data_stores(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListEventDataStores">>, Input, Options). %% @doc Returns a list of failures for the specified import. list_import_failures(Client, Input) when is_map(Client), is_map(Input) -> list_import_failures(Client, Input, []). list_import_failures(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListImportFailures">>, Input, Options). %% @doc Returns information on all imports, or a select set of imports by %% `ImportStatus' or `Destination'. list_imports(Client, Input) when is_map(Client), is_map(Input) -> list_imports(Client, Input, []). list_imports(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListImports">>, Input, Options). %% @doc Returns Insights metrics data for trails that have enabled Insights. %% %% The request must include the `EventSource', `EventName', and %% `InsightType' parameters. %% %% If the `InsightType' is set to `ApiErrorRateInsight', the request %% must also include the `ErrorCode' parameter. %% %% The following are the available time periods for %% `ListInsightsMetricData'. Each cutoff is inclusive. %% %% Access to the `ListInsightsMetricData' API operation is %% linked to the `cloudtrail:LookupEvents' action. To use this operation, %% you must have permissions to perform the `cloudtrail:LookupEvents' %% action. list_insights_metric_data(Client, Input) when is_map(Client), is_map(Input) -> list_insights_metric_data(Client, Input, []). list_insights_metric_data(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListInsightsMetricData">>, Input, Options). %% @doc 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 and public key pairs per Region. Each %% digest file is signed with a private key unique to its Region. When you %% validate a digest file from a specific Region, you must look in the same %% Region for its corresponding public key. list_public_keys(Client, Input) when is_map(Client), is_map(Input) -> list_public_keys(Client, Input, []). list_public_keys(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListPublicKeys">>, Input, Options). %% @doc Returns a list of queries and query statuses for the past seven days. %% %% You must specify an ARN value for `EventDataStore'. Optionally, to %% shorten the list of results, you can specify a time range, formatted as %% timestamps, by adding `StartTime' and `EndTime' parameters, and a %% `QueryStatus' value. Valid values for `QueryStatus' include %% `QUEUED', `RUNNING', `FINISHED', `FAILED', %% `TIMED_OUT', or `CANCELLED'. list_queries(Client, Input) when is_map(Client), is_map(Input) -> list_queries(Client, Input, []). list_queries(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListQueries">>, Input, Options). %% @doc Lists the tags for the specified trails, event data stores, or %% channels in the current Region. list_tags(Client, Input) when is_map(Client), is_map(Input) -> list_tags(Client, Input, []). list_tags(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListTags">>, Input, Options). %% @doc Lists trails that are in the current account. list_trails(Client, Input) when is_map(Client), is_map(Input) -> list_trails(Client, Input, []). list_trails(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListTrails">>, Input, Options). %% @doc Looks up management events or CloudTrail Insights events that are %% captured by CloudTrail. %% %% You can look up events that occurred in a Region within the last 90 days. %% %% `LookupEvents' returns recent Insights events for trails that enable %% Insights. To view Insights events for an event data store, you can run %% queries on your Insights event data store, and you can also view the Lake %% dashboard for Insights. %% %% Lookup supports the following attributes for management events: %% %% Lookup supports the following attributes for Insights events: %% %% All attributes are optional. The default number of results %% returned is 50, 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 two per second, per account, per %% Region. If this limit is exceeded, a throttling error occurs. lookup_events(Client, Input) when is_map(Client), is_map(Input) -> lookup_events(Client, Input, []). lookup_events(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"LookupEvents">>, Input, Options). %% @doc Configures an event selector or advanced event selectors for your %% trail. %% %% Use event selectors or advanced event selectors to specify management and %% data event settings for your trail. If you want your trail to log Insights %% events, be sure the event selector enables logging of the Insights event %% types you want configured for your trail. For more information about %% logging Insights events, see Logging Insights events for trails in the %% CloudTrail User Guide. By default, trails created without specific event %% selectors are configured to log all read and write management events, and %% no data events. %% %% When an event occurs in your account, CloudTrail evaluates the event %% selectors or advanced event selectors in all trails. For each trail, if %% the event matches any event selector, the trail processes and logs the %% event. If the event doesn't match any event selector, the trail %% doesn't log the event. %% %% Example %% %%
  1. You create an event selector for a trail and specify that you %% want write-only events. %% %%
  2. The EC2 `GetConsoleOutput' and `RunInstances' API %% operations occur in your account. %% %%
  3. CloudTrail evaluates whether the events match your event %% selectors. %% %%
  4. The `RunInstances' is a write-only event and it matches %% your event selector. The trail logs the event. %% %%
  5. The `GetConsoleOutput' is a read-only event that %% doesn't match your event selector. The trail doesn't log the %% event. %% %%
The `PutEventSelectors' operation must be called from the %% Region in which the trail was created; otherwise, an %% `InvalidHomeRegionException' exception is thrown. %% %% You can configure up to five event selectors for each trail. For more %% information, see Logging management events, Logging data events, and %% Quotas in CloudTrail in the CloudTrail User Guide. %% %% You can add advanced event selectors, and conditions for your advanced %% event selectors, up to a maximum of 500 values for all conditions and %% selectors on a trail. You can use either `AdvancedEventSelectors' or %% `EventSelectors', but not both. If you apply %% `AdvancedEventSelectors' to a trail, any existing `EventSelectors' %% are overwritten. For more information about advanced event selectors, see %% Logging data events in the CloudTrail User Guide. put_event_selectors(Client, Input) when is_map(Client), is_map(Input) -> put_event_selectors(Client, Input, []). put_event_selectors(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"PutEventSelectors">>, Input, Options). %% @doc Lets you enable Insights event logging by specifying the Insights %% selectors that you want to enable on an existing trail or event data %% store. %% %% You also use `PutInsightSelectors' to turn off Insights event logging, %% by passing an empty list of Insights types. The valid Insights event types %% are `ApiErrorRateInsight' and `ApiCallRateInsight'. %% %% To enable Insights on an event data store, you must specify the ARNs (or %% ID suffix of the ARNs) for the source event data store %% (`EventDataStore') and the destination event data store %% (`InsightsDestination'). The source event data store logs management %% events and enables Insights. The destination event data store logs %% Insights events based upon the management event activity of the source %% event data store. The source and destination event data stores must belong %% to the same Amazon Web Services account. %% %% To log Insights events for a trail, you must specify the name %% (`TrailName') of the CloudTrail trail for which you want to change or %% add Insights selectors. %% %% To log CloudTrail Insights events on API call volume, the trail or event %% data store must log `write' management events. To log CloudTrail %% Insights events on API error rate, the trail or event data store must log %% `read' or `write' management events. You can call %% `GetEventSelectors' on a trail to check whether the trail logs %% management events. You can call `GetEventDataStore' on an event data %% store to check whether the event data store logs management events. %% %% For more information, see Logging CloudTrail Insights events in the %% CloudTrail User Guide. put_insight_selectors(Client, Input) when is_map(Client), is_map(Input) -> put_insight_selectors(Client, Input, []). put_insight_selectors(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"PutInsightSelectors">>, Input, Options). %% @doc Attaches a resource-based permission policy to a CloudTrail channel %% that is used for an integration with an event source outside of Amazon Web %% Services. %% %% For more information about resource-based policies, see CloudTrail %% resource-based policy examples in the CloudTrail User Guide. put_resource_policy(Client, Input) when is_map(Client), is_map(Input) -> put_resource_policy(Client, Input, []). put_resource_policy(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"PutResourcePolicy">>, Input, Options). %% @doc Registers an organization’s member account as the CloudTrail %% delegated administrator. register_organization_delegated_admin(Client, Input) when is_map(Client), is_map(Input) -> register_organization_delegated_admin(Client, Input, []). register_organization_delegated_admin(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"RegisterOrganizationDelegatedAdmin">>, Input, Options). %% @doc Removes the specified tags from a trail, event data store, or %% channel. remove_tags(Client, Input) when is_map(Client), is_map(Input) -> remove_tags(Client, Input, []). remove_tags(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"RemoveTags">>, Input, Options). %% @doc Restores a deleted event data store specified by %% `EventDataStore', which accepts an event data store ARN. %% %% You can only restore a deleted event data store within the seven-day wait %% period after deletion. Restoring an event data store can take several %% minutes, depending on the size of the event data store. restore_event_data_store(Client, Input) when is_map(Client), is_map(Input) -> restore_event_data_store(Client, Input, []). restore_event_data_store(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"RestoreEventDataStore">>, Input, Options). %% @doc Starts the ingestion of live events on an event data store specified %% as either an ARN or the ID portion of the ARN. %% %% To start ingestion, the event data store `Status' must be %% `STOPPED_INGESTION' and the `eventCategory' must be %% `Management', `Data', or `ConfigurationItem'. start_event_data_store_ingestion(Client, Input) when is_map(Client), is_map(Input) -> start_event_data_store_ingestion(Client, Input, []). start_event_data_store_ingestion(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"StartEventDataStoreIngestion">>, Input, Options). %% @doc Starts an import of logged trail events from a source S3 bucket to a %% destination event data store. %% %% By default, CloudTrail only imports events contained in the S3 %% bucket's `CloudTrail' prefix and the prefixes inside the %% `CloudTrail' prefix, and does not check prefixes for other Amazon Web %% Services services. If you want to import CloudTrail events contained in %% another prefix, you must include the prefix in the `S3LocationUri'. %% For more considerations about importing trail events, see Considerations. %% %% When you start a new import, the `Destinations' and `ImportSource' %% parameters are required. Before starting a new import, disable any access %% control lists (ACLs) attached to the source S3 bucket. For more %% information about disabling ACLs, see Controlling ownership of objects and %% disabling ACLs for your bucket. %% %% When you retry an import, the `ImportID' parameter is required. %% %% If the destination event data store is for an organization, you must use %% the management account to import trail events. You cannot use the %% delegated administrator account for the organization. start_import(Client, Input) when is_map(Client), is_map(Input) -> start_import(Client, Input, []). start_import(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"StartImport">>, Input, Options). %% @doc Starts the recording of Amazon Web Services API calls and log file %% delivery for a trail. %% %% For a trail that is enabled in all Regions, this operation must be called %% from the Region in which the trail was created. This operation cannot be %% called on the shadow trails (replicated trails in other Regions) of a %% trail that is enabled in all Regions. start_logging(Client, Input) when is_map(Client), is_map(Input) -> start_logging(Client, Input, []). start_logging(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"StartLogging">>, Input, Options). %% @doc Starts a CloudTrail Lake query. %% %% Use the `QueryStatement' parameter to provide your SQL query, enclosed %% in single quotation marks. Use the optional `DeliveryS3Uri' parameter %% to deliver the query results to an S3 bucket. %% %% `StartQuery' requires you specify either the `QueryStatement' %% parameter, or a `QueryAlias' and any `QueryParameters'. In the %% current release, the `QueryAlias' and `QueryParameters' parameters %% are used only for the queries that populate the CloudTrail Lake %% dashboards. start_query(Client, Input) when is_map(Client), is_map(Input) -> start_query(Client, Input, []). start_query(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"StartQuery">>, Input, Options). %% @doc Stops the ingestion of live events on an event data store specified %% as either an ARN or the ID portion of the ARN. %% %% To stop ingestion, the event data store `Status' must be `ENABLED' %% and the `eventCategory' must be `Management', `Data', or %% `ConfigurationItem'. stop_event_data_store_ingestion(Client, Input) when is_map(Client), is_map(Input) -> stop_event_data_store_ingestion(Client, Input, []). stop_event_data_store_ingestion(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"StopEventDataStoreIngestion">>, Input, Options). %% @doc Stops a specified import. stop_import(Client, Input) when is_map(Client), is_map(Input) -> stop_import(Client, Input, []). stop_import(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"StopImport">>, Input, Options). %% @doc Suspends the recording of Amazon Web Services API calls and log file %% delivery for the specified trail. %% %% Under most circumstances, there is no need to use this action. You can %% update a trail without stopping it first. This action is the only way to %% stop recording. For a trail enabled in all Regions, this operation must be %% called from the Region in which the trail was created, or an %% `InvalidHomeRegionException' will occur. This operation cannot be %% called on the shadow trails (replicated trails in other Regions) of a %% trail enabled in all Regions. stop_logging(Client, Input) when is_map(Client), is_map(Input) -> stop_logging(Client, Input, []). stop_logging(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"StopLogging">>, Input, Options). %% @doc Updates a channel specified by a required channel ARN or UUID. update_channel(Client, Input) when is_map(Client), is_map(Input) -> update_channel(Client, Input, []). update_channel(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"UpdateChannel">>, Input, Options). %% @doc Updates an event data store. %% %% The required `EventDataStore' value is an ARN or the ID portion of the %% ARN. Other parameters are optional, but at least one optional parameter %% must be specified, or CloudTrail throws an error. `RetentionPeriod' is %% in days, and valid values are integers between 7 and 3653 if the %% `BillingMode' is set to `EXTENDABLE_RETENTION_PRICING', or between %% 7 and 2557 if `BillingMode' is set to `FIXED_RETENTION_PRICING'. %% By default, `TerminationProtection' is enabled. %% %% For event data stores for CloudTrail events, `AdvancedEventSelectors' %% includes or excludes management or data events in your event data store. %% For more information about `AdvancedEventSelectors', see %% AdvancedEventSelectors. %% %% For event data stores for CloudTrail Insights events, Config configuration %% items, Audit Manager evidence, or non-Amazon Web Services events, %% `AdvancedEventSelectors' includes events of that type in your event %% data store. update_event_data_store(Client, Input) when is_map(Client), is_map(Input) -> update_event_data_store(Client, Input, []). update_event_data_store(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"UpdateEventDataStore">>, Input, Options). %% @doc Updates trail settings that control what events you are logging, and %% how to handle 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 has previously been a target for CloudTrail log files, an %% IAM policy exists for the bucket. `UpdateTrail' must be called from %% the Region in which the trail was created; otherwise, an %% `InvalidHomeRegionException' is thrown. update_trail(Client, Input) when is_map(Client), is_map(Input) -> update_trail(Client, Input, []). update_trail(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"UpdateTrail">>, Input, Options). %%==================================================================== %% Internal functions %%==================================================================== -spec request(aws_client:aws_client(), binary(), map(), list()) -> {ok, Result, {integer(), list(), hackney:client()}} | {error, Error, {integer(), list(), hackney:client()}} | {error, term()} when Result :: map() | undefined, Error :: map(). request(Client, Action, Input, Options) -> RequestFun = fun() -> do_request(Client, Action, Input, Options) end, aws_request:request(RequestFun, Options). do_request(Client, Action, Input0, Options) -> Client1 = Client#{service => <<"cloudtrail">>}, Host = build_host(<<"cloudtrail">>, Client1), URL = build_url(Host, Client1), Headers = [ {<<"Host">>, Host}, {<<"Content-Type">>, <<"application/x-amz-json-1.1">>}, {<<"X-Amz-Target">>, <<"com.amazonaws.cloudtrail.v20131101.CloudTrail_20131101.", Action/binary>>} ], Input = Input0, Payload = jsx:encode(Input), SignedHeaders = aws_request:sign_request(Client1, <<"POST">>, URL, Headers, Payload), Response = hackney:request(post, URL, SignedHeaders, Payload, Options), handle_response(Response). handle_response({ok, 200, ResponseHeaders, Client}) -> case hackney:body(Client) of {ok, <<>>} -> {ok, undefined, {200, ResponseHeaders, Client}}; {ok, Body} -> Result = jsx:decode(Body), {ok, Result, {200, ResponseHeaders, Client}} end; handle_response({ok, StatusCode, ResponseHeaders, Client}) -> {ok, Body} = hackney:body(Client), Error = jsx:decode(Body), {error, Error, {StatusCode, ResponseHeaders, Client}}; handle_response({error, Reason}) -> {error, Reason}. build_host(_EndpointPrefix, #{region := <<"local">>, endpoint := Endpoint}) -> Endpoint; build_host(_EndpointPrefix, #{region := <<"local">>}) -> <<"localhost">>; build_host(EndpointPrefix, #{region := Region, endpoint := Endpoint}) -> aws_util:binary_join([EndpointPrefix, Region, Endpoint], <<".">>). build_url(Host, Client) -> Proto = aws_client:proto(Client), Port = aws_client:port(Client), aws_util:binary_join([Proto, <<"://">>, Host, <<":">>, Port, <<"/">>], <<"">>).