Current section
Files
Jump to
Current section
Files
src/aws_shield.erl
%% WARNING: DO NOT EDIT, AUTO-GENERATED CODE!
%% See https://github.com/aws-beam/aws-codegen for more details.
%% @doc Shield Advanced
%%
%% This is the Shield Advanced API Reference.
%%
%% This guide is for developers who need detailed information about the
%% Shield Advanced API actions, data types, and errors. For detailed
%% information about WAF and Shield Advanced features and an overview of how
%% to use the WAF and Shield Advanced APIs, see the WAF and Shield Developer
%% Guide.
-module(aws_shield).
-export([associate_drt_log_bucket/2,
associate_drt_log_bucket/3,
associate_drt_role/2,
associate_drt_role/3,
associate_health_check/2,
associate_health_check/3,
associate_proactive_engagement_details/2,
associate_proactive_engagement_details/3,
create_protection/2,
create_protection/3,
create_protection_group/2,
create_protection_group/3,
create_subscription/2,
create_subscription/3,
delete_protection/2,
delete_protection/3,
delete_protection_group/2,
delete_protection_group/3,
delete_subscription/2,
delete_subscription/3,
describe_attack/2,
describe_attack/3,
describe_attack_statistics/2,
describe_attack_statistics/3,
describe_drt_access/2,
describe_drt_access/3,
describe_emergency_contact_settings/2,
describe_emergency_contact_settings/3,
describe_protection/2,
describe_protection/3,
describe_protection_group/2,
describe_protection_group/3,
describe_subscription/2,
describe_subscription/3,
disable_proactive_engagement/2,
disable_proactive_engagement/3,
disassociate_drt_log_bucket/2,
disassociate_drt_log_bucket/3,
disassociate_drt_role/2,
disassociate_drt_role/3,
disassociate_health_check/2,
disassociate_health_check/3,
enable_proactive_engagement/2,
enable_proactive_engagement/3,
get_subscription_state/2,
get_subscription_state/3,
list_attacks/2,
list_attacks/3,
list_protection_groups/2,
list_protection_groups/3,
list_protections/2,
list_protections/3,
list_resources_in_protection_group/2,
list_resources_in_protection_group/3,
list_tags_for_resource/2,
list_tags_for_resource/3,
tag_resource/2,
tag_resource/3,
untag_resource/2,
untag_resource/3,
update_emergency_contact_settings/2,
update_emergency_contact_settings/3,
update_protection_group/2,
update_protection_group/3,
update_subscription/2,
update_subscription/3]).
-include_lib("hackney/include/hackney_lib.hrl").
%%====================================================================
%% API
%%====================================================================
%% @doc Authorizes the Shield Response Team (SRT) to access the specified
%% Amazon S3 bucket containing log data such as Application Load Balancer
%% access logs, CloudFront logs, or logs from third party sources.
%%
%% You can associate up to 10 Amazon S3 buckets with your subscription.
%%
%% To use the services of the SRT and make an `AssociateDRTLogBucket'
%% request, you must be subscribed to the Business Support plan or the
%% Enterprise Support plan.
associate_drt_log_bucket(Client, Input)
when is_map(Client), is_map(Input) ->
associate_drt_log_bucket(Client, Input, []).
associate_drt_log_bucket(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"AssociateDRTLogBucket">>, Input, Options).
%% @doc Authorizes the Shield Response Team (SRT) using the specified role,
%% to access your Amazon Web Services account to assist with DDoS attack
%% mitigation during potential attacks.
%%
%% This enables the SRT to inspect your WAF configuration and create or
%% update WAF rules and web ACLs.
%%
%% You can associate only one `RoleArn' with your subscription. If you submit
%% an `AssociateDRTRole' request for an account that already has an
%% associated role, the new `RoleArn' will replace the existing `RoleArn'.
%%
%% Prior to making the `AssociateDRTRole' request, you must attach the
%% AWSShieldDRTAccessPolicy managed policy to the role you will specify in
%% the request. For more information see Attaching and Detaching IAM
%% Policies. The role must also trust the service principal `
%% drt.shield.amazonaws.com'. For more information, see IAM JSON Policy
%% Elements: Principal.
%%
%% The SRT will have access only to your WAF and Shield resources. By
%% submitting this request, you authorize the SRT to inspect your WAF and
%% Shield configuration and create and update WAF rules and web ACLs on your
%% behalf. The SRT takes these actions only if explicitly authorized by you.
%%
%% You must have the `iam:PassRole' permission to make an `AssociateDRTRole'
%% request. For more information, see Granting a User Permissions to Pass a
%% Role to an Amazon Web Services Service.
%%
%% To use the services of the SRT and make an `AssociateDRTRole' request, you
%% must be subscribed to the Business Support plan or the Enterprise Support
%% plan.
associate_drt_role(Client, Input)
when is_map(Client), is_map(Input) ->
associate_drt_role(Client, Input, []).
associate_drt_role(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"AssociateDRTRole">>, Input, Options).
%% @doc Adds health-based detection to the Shield Advanced protection for a
%% resource.
%%
%% Shield Advanced health-based detection uses the health of your Amazon Web
%% Services resource to improve responsiveness and accuracy in attack
%% detection and mitigation.
%%
%% You define the health check in Route 53 and then associate it with your
%% Shield Advanced protection. For more information, see Shield Advanced
%% Health-Based Detection in the WAF Developer Guide.
associate_health_check(Client, Input)
when is_map(Client), is_map(Input) ->
associate_health_check(Client, Input, []).
associate_health_check(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"AssociateHealthCheck">>, Input, Options).
%% @doc Initializes proactive engagement and sets the list of contacts for
%% the Shield Response Team (SRT) to use.
%%
%% You must provide at least one phone number in the emergency contact list.
%%
%% After you have initialized proactive engagement using this call, to
%% disable or enable proactive engagement, use the calls
%% `DisableProactiveEngagement' and `EnableProactiveEngagement'.
%%
%% This call defines the list of email addresses and phone numbers that the
%% SRT can use to contact you for escalations to the SRT and to initiate
%% proactive customer support.
%%
%% The contacts that you provide in the request replace any contacts that
%% were already defined. If you already have contacts defined and want to use
%% them, retrieve the list using `DescribeEmergencyContactSettings' and then
%% provide it to this call.
associate_proactive_engagement_details(Client, Input)
when is_map(Client), is_map(Input) ->
associate_proactive_engagement_details(Client, Input, []).
associate_proactive_engagement_details(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"AssociateProactiveEngagementDetails">>, Input, Options).
%% @doc Enables Shield Advanced for a specific Amazon Web Services resource.
%%
%% The resource can be an Amazon CloudFront distribution, Elastic Load
%% Balancing load balancer, Global Accelerator accelerator, Elastic IP
%% Address, or an Amazon Route 53 hosted zone.
%%
%% You can add protection to only a single resource with each
%% CreateProtection request. If you want to add protection to multiple
%% resources at once, use the WAF console. For more information see Getting
%% Started with Shield Advanced and Add Shield Advanced Protection to more
%% Amazon Web Services Resources.
create_protection(Client, Input)
when is_map(Client), is_map(Input) ->
create_protection(Client, Input, []).
create_protection(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"CreateProtection">>, Input, Options).
%% @doc Creates a grouping of protected resources so they can be handled as a
%% collective.
%%
%% This resource grouping improves the accuracy of detection and reduces
%% false positives.
create_protection_group(Client, Input)
when is_map(Client), is_map(Input) ->
create_protection_group(Client, Input, []).
create_protection_group(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"CreateProtectionGroup">>, Input, Options).
%% @doc Activates Shield Advanced for an account.
%%
%% When you initally create a subscription, your subscription is set to be
%% automatically renewed at the end of the existing subscription period. You
%% can change this by submitting an `UpdateSubscription' request.
create_subscription(Client, Input)
when is_map(Client), is_map(Input) ->
create_subscription(Client, Input, []).
create_subscription(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"CreateSubscription">>, Input, Options).
%% @doc Deletes an Shield Advanced `Protection'.
delete_protection(Client, Input)
when is_map(Client), is_map(Input) ->
delete_protection(Client, Input, []).
delete_protection(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DeleteProtection">>, Input, Options).
%% @doc Removes the specified protection group.
delete_protection_group(Client, Input)
when is_map(Client), is_map(Input) ->
delete_protection_group(Client, Input, []).
delete_protection_group(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DeleteProtectionGroup">>, Input, Options).
%% @doc Removes Shield Advanced from an account.
%%
%% Shield Advanced requires a 1-year subscription commitment. You cannot
%% delete a subscription prior to the completion of that commitment.
delete_subscription(Client, Input)
when is_map(Client), is_map(Input) ->
delete_subscription(Client, Input, []).
delete_subscription(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DeleteSubscription">>, Input, Options).
%% @doc Describes the details of a DDoS attack.
describe_attack(Client, Input)
when is_map(Client), is_map(Input) ->
describe_attack(Client, Input, []).
describe_attack(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DescribeAttack">>, Input, Options).
%% @doc Provides information about the number and type of attacks Shield has
%% detected in the last year for all resources that belong to your account,
%% regardless of whether you've defined Shield protections for them.
%%
%% This operation is available to Shield customers as well as to Shield
%% Advanced customers.
%%
%% The operation returns data for the time range of midnight UTC, one year
%% ago, to midnight UTC, today. For example, if the current time is
%% `2020-10-26 15:39:32 PDT', equal to `2020-10-26 22:39:32 UTC', then the
%% time range for the attack data returned is from `2019-10-26 00:00:00 UTC'
%% to `2020-10-26 00:00:00 UTC'.
%%
%% The time range indicates the period covered by the attack statistics data
%% items.
describe_attack_statistics(Client, Input)
when is_map(Client), is_map(Input) ->
describe_attack_statistics(Client, Input, []).
describe_attack_statistics(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DescribeAttackStatistics">>, Input, Options).
%% @doc Returns the current role and list of Amazon S3 log buckets used by
%% the Shield Response Team (SRT) to access your Amazon Web Services account
%% while assisting with attack mitigation.
describe_drt_access(Client, Input)
when is_map(Client), is_map(Input) ->
describe_drt_access(Client, Input, []).
describe_drt_access(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DescribeDRTAccess">>, Input, Options).
%% @doc A list of email addresses and phone numbers that the Shield Response
%% Team (SRT) can use to contact you if you have proactive engagement
%% enabled, for escalations to the SRT and to initiate proactive customer
%% support.
describe_emergency_contact_settings(Client, Input)
when is_map(Client), is_map(Input) ->
describe_emergency_contact_settings(Client, Input, []).
describe_emergency_contact_settings(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DescribeEmergencyContactSettings">>, Input, Options).
%% @doc Lists the details of a `Protection' object.
describe_protection(Client, Input)
when is_map(Client), is_map(Input) ->
describe_protection(Client, Input, []).
describe_protection(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DescribeProtection">>, Input, Options).
%% @doc Returns the specification for the specified protection group.
describe_protection_group(Client, Input)
when is_map(Client), is_map(Input) ->
describe_protection_group(Client, Input, []).
describe_protection_group(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DescribeProtectionGroup">>, Input, Options).
%% @doc Provides details about the Shield Advanced subscription for an
%% account.
describe_subscription(Client, Input)
when is_map(Client), is_map(Input) ->
describe_subscription(Client, Input, []).
describe_subscription(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DescribeSubscription">>, Input, Options).
%% @doc Removes authorization from the Shield Response Team (SRT) to notify
%% contacts about escalations to the SRT and to initiate proactive customer
%% support.
disable_proactive_engagement(Client, Input)
when is_map(Client), is_map(Input) ->
disable_proactive_engagement(Client, Input, []).
disable_proactive_engagement(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DisableProactiveEngagement">>, Input, Options).
%% @doc Removes the Shield Response Team's (SRT) access to the specified
%% Amazon S3 bucket containing the logs that you shared previously.
%%
%% To make a `DisassociateDRTLogBucket' request, you must be subscribed to
%% the Business Support plan or the Enterprise Support plan. However, if you
%% are not subscribed to one of these support plans, but had been previously
%% and had granted the SRT access to your account, you can submit a
%% `DisassociateDRTLogBucket' request to remove this access.
disassociate_drt_log_bucket(Client, Input)
when is_map(Client), is_map(Input) ->
disassociate_drt_log_bucket(Client, Input, []).
disassociate_drt_log_bucket(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DisassociateDRTLogBucket">>, Input, Options).
%% @doc Removes the Shield Response Team's (SRT) access to your Amazon Web
%% Services account.
%%
%% To make a `DisassociateDRTRole' request, you must be subscribed to the
%% Business Support plan or the Enterprise Support plan. However, if you are
%% not subscribed to one of these support plans, but had been previously and
%% had granted the SRT access to your account, you can submit a
%% `DisassociateDRTRole' request to remove this access.
disassociate_drt_role(Client, Input)
when is_map(Client), is_map(Input) ->
disassociate_drt_role(Client, Input, []).
disassociate_drt_role(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DisassociateDRTRole">>, Input, Options).
%% @doc Removes health-based detection from the Shield Advanced protection
%% for a resource.
%%
%% Shield Advanced health-based detection uses the health of your Amazon Web
%% Services resource to improve responsiveness and accuracy in attack
%% detection and mitigation.
%%
%% You define the health check in Route 53 and then associate or disassociate
%% it with your Shield Advanced protection. For more information, see Shield
%% Advanced Health-Based Detection in the WAF Developer Guide.
disassociate_health_check(Client, Input)
when is_map(Client), is_map(Input) ->
disassociate_health_check(Client, Input, []).
disassociate_health_check(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"DisassociateHealthCheck">>, Input, Options).
%% @doc Authorizes the Shield Response Team (SRT) to use email and phone to
%% notify contacts about escalations to the SRT and to initiate proactive
%% customer support.
enable_proactive_engagement(Client, Input)
when is_map(Client), is_map(Input) ->
enable_proactive_engagement(Client, Input, []).
enable_proactive_engagement(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"EnableProactiveEngagement">>, Input, Options).
%% @doc Returns the `SubscriptionState', either `Active' or `Inactive'.
get_subscription_state(Client, Input)
when is_map(Client), is_map(Input) ->
get_subscription_state(Client, Input, []).
get_subscription_state(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"GetSubscriptionState">>, Input, Options).
%% @doc Returns all ongoing DDoS attacks or all DDoS attacks during a
%% specified time period.
list_attacks(Client, Input)
when is_map(Client), is_map(Input) ->
list_attacks(Client, Input, []).
list_attacks(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"ListAttacks">>, Input, Options).
%% @doc Retrieves the `ProtectionGroup' objects for the account.
list_protection_groups(Client, Input)
when is_map(Client), is_map(Input) ->
list_protection_groups(Client, Input, []).
list_protection_groups(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"ListProtectionGroups">>, Input, Options).
%% @doc Lists all `Protection' objects for the account.
list_protections(Client, Input)
when is_map(Client), is_map(Input) ->
list_protections(Client, Input, []).
list_protections(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"ListProtections">>, Input, Options).
%% @doc Retrieves the resources that are included in the protection group.
list_resources_in_protection_group(Client, Input)
when is_map(Client), is_map(Input) ->
list_resources_in_protection_group(Client, Input, []).
list_resources_in_protection_group(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"ListResourcesInProtectionGroup">>, Input, Options).
%% @doc Gets information about Amazon Web Services tags for a specified
%% Amazon Resource Name (ARN) in Shield.
list_tags_for_resource(Client, Input)
when is_map(Client), is_map(Input) ->
list_tags_for_resource(Client, Input, []).
list_tags_for_resource(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"ListTagsForResource">>, Input, Options).
%% @doc Adds or updates tags for a resource in Shield.
tag_resource(Client, Input)
when is_map(Client), is_map(Input) ->
tag_resource(Client, Input, []).
tag_resource(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"TagResource">>, Input, Options).
%% @doc Removes tags from a resource in Shield.
untag_resource(Client, Input)
when is_map(Client), is_map(Input) ->
untag_resource(Client, Input, []).
untag_resource(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"UntagResource">>, Input, Options).
%% @doc Updates the details of the list of email addresses and phone numbers
%% that the Shield Response Team (SRT) can use to contact you if you have
%% proactive engagement enabled, for escalations to the SRT and to initiate
%% proactive customer support.
update_emergency_contact_settings(Client, Input)
when is_map(Client), is_map(Input) ->
update_emergency_contact_settings(Client, Input, []).
update_emergency_contact_settings(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"UpdateEmergencyContactSettings">>, Input, Options).
%% @doc Updates an existing protection group.
%%
%% A protection group is a grouping of protected resources so they can be
%% handled as a collective. This resource grouping improves the accuracy of
%% detection and reduces false positives.
update_protection_group(Client, Input)
when is_map(Client), is_map(Input) ->
update_protection_group(Client, Input, []).
update_protection_group(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"UpdateProtectionGroup">>, Input, Options).
%% @doc Updates the details of an existing subscription.
%%
%% Only enter values for parameters you want to change. Empty parameters are
%% not updated.
update_subscription(Client, Input)
when is_map(Client), is_map(Input) ->
update_subscription(Client, Input, []).
update_subscription(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"UpdateSubscription">>, 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 => <<"shield">>,
region => <<"us-east-1">>},
Host = build_host(<<"shield">>, Client1),
URL = build_url(Host, Client1),
Headers = [
{<<"Host">>, Host},
{<<"Content-Type">>, <<"application/x-amz-json-1.1">>},
{<<"X-Amz-Target">>, <<"AWSShield_20160616.", 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, #{endpoint := Endpoint}) ->
aws_util:binary_join([EndpointPrefix, Endpoint], <<".">>).
build_url(Host, Client) ->
Proto = maps:get(proto, Client),
Port = maps:get(port, Client),
aws_util:binary_join([Proto, <<"://">>, Host, <<":">>, Port, <<"/">>], <<"">>).