amazonka-iam-1.3.2: gen/Network/AWS/IAM/CreateOpenIdConnectProvider.hs
{-# 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.IAM.CreateOpenIdConnectProvider
-- 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)
--
-- Creates an IAM entity to describe an identity provider (IdP) that
-- supports <http://openid.net/connect/ OpenID Connect (OIDC)>.
--
-- The OIDC provider that you create with this operation can be used as a
-- principal in a role\'s trust policy to establish a trust relationship
-- between AWS and the OIDC provider.
--
-- When you create the IAM OIDC provider, you specify the URL of the OIDC
-- identity provider (IdP) to trust, a list of client IDs (also known as
-- audiences) that identify the application or applications that are
-- allowed to authenticate using the OIDC provider, and a list of
-- thumbprints of the server certificate(s) that the IdP uses. You get all
-- of this information from the OIDC IdP that you want to use for access to
-- AWS.
--
-- Because trust for the OIDC provider is ultimately derived from the IAM
-- provider that this action creates, it is a best practice to limit access
-- to the CreateOpenIDConnectProvider action to highly-privileged users.
--
-- /See:/ <http://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateOpenIdConnectProvider.html AWS API Reference> for CreateOpenIdConnectProvider.
module Network.AWS.IAM.CreateOpenIdConnectProvider
(
-- * Creating a Request
createOpenIdConnectProvider
, CreateOpenIdConnectProvider
-- * Request Lenses
, coicpClientIdList
, coicpURL
, coicpThumbprintList
-- * Destructuring the Response
, createOpenIdConnectProviderResponse
, CreateOpenIdConnectProviderResponse
-- * Response Lenses
, coicprsOpenIdConnectProviderARN
, coicprsResponseStatus
) where
import Network.AWS.IAM.Types
import Network.AWS.IAM.Types.Product
import Network.AWS.Prelude
import Network.AWS.Request
import Network.AWS.Response
-- | /See:/ 'createOpenIdConnectProvider' smart constructor.
data CreateOpenIdConnectProvider = CreateOpenIdConnectProvider'
{ _coicpClientIdList :: !(Maybe [Text])
, _coicpURL :: !Text
, _coicpThumbprintList :: ![Text]
} deriving (Eq,Read,Show,Data,Typeable,Generic)
-- | Creates a value of 'CreateOpenIdConnectProvider' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'coicpClientIdList'
--
-- * 'coicpURL'
--
-- * 'coicpThumbprintList'
createOpenIdConnectProvider
:: Text -- ^ 'coicpURL'
-> CreateOpenIdConnectProvider
createOpenIdConnectProvider pURL_ =
CreateOpenIdConnectProvider'
{ _coicpClientIdList = Nothing
, _coicpURL = pURL_
, _coicpThumbprintList = mempty
}
-- | A list of client IDs (also known as audiences). When a mobile or web app
-- registers with an OpenID Connect provider, they establish a value that
-- identifies the application. (This is the value that\'s sent as the
-- 'client_id' parameter on OAuth requests.)
--
-- You can register multiple client IDs with the same provider. For
-- example, you might have multiple applications that use the same OIDC
-- provider. You cannot register more than 100 client IDs with a single IAM
-- OIDC provider.
--
-- There is no defined format for a client ID. The
-- 'CreateOpenIDConnectProviderRequest' action accepts client IDs up to 255
-- characters long.
coicpClientIdList :: Lens' CreateOpenIdConnectProvider [Text]
coicpClientIdList = lens _coicpClientIdList (\ s a -> s{_coicpClientIdList = a}) . _Default . _Coerce;
-- | The URL of the identity provider. The URL must begin with \"https:\/\/\"
-- and should correspond to the 'iss' claim in the provider\'s OpenID
-- Connect ID tokens. Per the OIDC standard, path components are allowed
-- but query parameters are not. Typically the URL consists of only a host
-- name, like \"https:\/\/server.example.org\" or
-- \"https:\/\/example.com\".
--
-- You cannot register the same provider multiple times in a single AWS
-- account. If you try to submit a URL that has already been used for an
-- OpenID Connect provider in the AWS account, you will get an error.
coicpURL :: Lens' CreateOpenIdConnectProvider Text
coicpURL = lens _coicpURL (\ s a -> s{_coicpURL = a});
-- | A list of server certificate thumbprints for the OpenID Connect (OIDC)
-- identity provider\'s server certificate(s). Typically this list includes
-- only one entry. However, IAM lets you have up to five thumbprints for an
-- OIDC provider. This lets you maintain multiple thumbprints if the
-- identity provider is rotating certificates.
--
-- The server certificate thumbprint is the hex-encoded SHA-1 hash value of
-- the X.509 certificate used by the domain where the OpenID Connect
-- provider makes its keys available. It is always a 40-character string.
--
-- You must provide at least one thumbprint when creating an IAM OIDC
-- provider. For example, if the OIDC provider is 'server.example.com' and
-- the provider stores its keys at
-- \"https:\/\/keys.server.example.com\/openid-connect\", the thumbprint
-- string would be the hex-encoded SHA-1 hash value of the certificate used
-- by https:\/\/keys.server.example.com.
--
-- For more information about obtaining the OIDC provider\'s thumbprint,
-- see
-- <http://docs.aws.amazon.com/IAM/latest/UserGuide/identity-providers-oidc-obtain-thumbprint.html Obtaining the Thumbprint for an OpenID Connect Provider>
-- in the /IAM User Guide/.
coicpThumbprintList :: Lens' CreateOpenIdConnectProvider [Text]
coicpThumbprintList = lens _coicpThumbprintList (\ s a -> s{_coicpThumbprintList = a}) . _Coerce;
instance AWSRequest CreateOpenIdConnectProvider where
type Rs CreateOpenIdConnectProvider =
CreateOpenIdConnectProviderResponse
request = postQuery iAM
response
= receiveXMLWrapper
"CreateOpenIDConnectProviderResult"
(\ s h x ->
CreateOpenIdConnectProviderResponse' <$>
(x .@? "OpenIDConnectProviderArn") <*>
(pure (fromEnum s)))
instance ToHeaders CreateOpenIdConnectProvider where
toHeaders = const mempty
instance ToPath CreateOpenIdConnectProvider where
toPath = const "/"
instance ToQuery CreateOpenIdConnectProvider where
toQuery CreateOpenIdConnectProvider'{..}
= mconcat
["Action" =:
("CreateOpenIDConnectProvider" :: ByteString),
"Version" =: ("2010-05-08" :: ByteString),
"ClientIDList" =:
toQuery
(toQueryList "member" <$> _coicpClientIdList),
"Url" =: _coicpURL,
"ThumbprintList" =:
toQueryList "member" _coicpThumbprintList]
-- | Contains the response to a successful CreateOpenIDConnectProvider
-- request.
--
-- /See:/ 'createOpenIdConnectProviderResponse' smart constructor.
data CreateOpenIdConnectProviderResponse = CreateOpenIdConnectProviderResponse'
{ _coicprsOpenIdConnectProviderARN :: !(Maybe Text)
, _coicprsResponseStatus :: !Int
} deriving (Eq,Read,Show,Data,Typeable,Generic)
-- | Creates a value of 'CreateOpenIdConnectProviderResponse' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'coicprsOpenIdConnectProviderARN'
--
-- * 'coicprsResponseStatus'
createOpenIdConnectProviderResponse
:: Int -- ^ 'coicprsResponseStatus'
-> CreateOpenIdConnectProviderResponse
createOpenIdConnectProviderResponse pResponseStatus_ =
CreateOpenIdConnectProviderResponse'
{ _coicprsOpenIdConnectProviderARN = Nothing
, _coicprsResponseStatus = pResponseStatus_
}
-- | The Amazon Resource Name (ARN) of the IAM OpenID Connect provider that
-- was created. For more information, see OpenIDConnectProviderListEntry.
coicprsOpenIdConnectProviderARN :: Lens' CreateOpenIdConnectProviderResponse (Maybe Text)
coicprsOpenIdConnectProviderARN = lens _coicprsOpenIdConnectProviderARN (\ s a -> s{_coicprsOpenIdConnectProviderARN = a});
-- | The response status code.
coicprsResponseStatus :: Lens' CreateOpenIdConnectProviderResponse Int
coicprsResponseStatus = lens _coicprsResponseStatus (\ s a -> s{_coicprsResponseStatus = a});