AD FS を使用して、Active Directory ユーザーに API または AWS CLI へのアクセス権を付与する方法を教えてください。

最終更新日: 2019 年 5 月 14 日

フェデレーションを使用して Active Directory ユーザーのために AWS マネジメントコンソールへのアクセス権を設定しました。Active Directory Federation Services (AD FS) を使用して、AWS コマンドラインインターフェイス (AWS CLI) への同じアクセス権をユーザーに付与する方法を教えてください。  

簡単な説明

SAML 2.0 フェデレーティッドユーザーによる AWS マネジメントコンソールへのアクセスを有効にした場合、プログラムによるアクセスを必要とするユーザーには、引き続きアクセスキーとシークレットキーが必要です。AWS Identity and Access Management (IAM) ユーザーのアクセスキー ID とシークレットアクセスキーを取得するには、AWS CLI を設定するか、フェデレーティッドユーザーが AWS CLI にアクセスするための一時的な認証情報を取得します。

フェデレーティッドユーザーにアクセス権を付与するには、以下を実行する必要があります。

解決方法

お客様の ID プロバイダー (IdP) が統合 Windows 認証 (IWA)、NTLM、または Kerberos (AD FS 2.0 のデフォルト) で動作するように設定されている場合は、解決方法 1 または解決方法 2 を参照してください。IdP がフォームベース認証 (AD FS 3.0 および 4.0 のデフォルト) で機能するように設定されている場合は、解決方法 3 を参照してください。

解決方法 1: IWA を使用した AD FS 用の PowerShell (PowerShell 2.0)

1.    次のコマンドを実行して、Windows PowerShell モジュールをインポートします。  

> Import-Module "C:\Program Files (x86)\AWS Tools\PowerShell\AWSPowerShell\AWSPowerShell.psd1"

2.    以下のようなコマンドを実行して、AD FS エンドポイントに対して変数を設定します。

> $Endpoint = 'https://adfs.example.com/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices'

注意: これには、AD FS ログインページの完全な URL と AWS のログイン uniform resource name (URN) が含まれます。

3.    以下のようなコマンドを実行して、SAML エンドポイントを設定します。  

> $EndpointName = Set-AWSSamlEndpoint -Endpoint "$Endpoint" -StoreAs 'ADFS-Login' -AuthenticationType NTLM

注意: デフォルトでは、AD FS 2.0 AuthenticationType は NTLM に設定されます。上記の AWS Tools Cmdlet で AuthenticationType の値を指定しない場合、AWS Tools はデフォルトで Kerberos を使用します。

4.    保存されているエンドポイント設定を使用して、AD FS IdP で認証し、次のいずれかの方法を使用してユーザーが引き受けることができるロールの一覧を取得します。

現在ワークステーションにログインしているユーザーの認証情報を使用します。

> Set-AWSSamlRoleProfile -StoreAs 'SAMLUser' -EndpointName $EndpointName

または

Active Directory ユーザーの認証情報を指定します。

> $Credential = Get-Credential -Message "Enter the domain credentials for the endpoint"
> Set-AWSSamlRoleProfile -EndpointName $EndpointName -NetworkCredential $credential -StoreAs 'SAMLUser'

5.    複数のロールが使用可能な場合は、引き受けたいロールを選択するようにプロンプトが表示されます。次のように、ターミナルセッションにアルファベットを入力します。  

SAMLUser[A] A - 123456789012:role/ADFS-DevAdmin [B] B - 123456789012:role/ADFS-DevReadOnly [?] Help (default is "A"): A

6.    以下のようなコマンドを実行して、ユーザーがフェデレーション認証情報と指定されたプロファイルを使用して AWS CLI にアクセスできることを確認します。  

Get-IAMSAMLProviderList -ProfileName SAMLUser

解決方法 2: IWA を使用した AD FS 用の Python (AD FS 2.0 のデフォルト)

1.    以下のモジュールを Python にインストールします。  

pip install --upgrade boto beautifulsoup4 requests

2.    ブログ記事 How to Implement Federated API and CLI Access Using SAML 2.0 and AD FS からスクリプトをコピーします。

3.    スクリプトを開き、必要なリージョンおよび出力形式を設定し、adfs.example.com を自分の URL で置き換え、AD FS サーバーの完全修飾ドメイン名 (FQDN) を入力します。

注意: AWS 認証情報ファイルの別のファイルパスがある場合は、ファイルパスを指定します。 

region = 'eu-west-1'
    outputformat = 'json'
    awsconfigfile = '/.aws/credentials'
    idpentryurl = 'https://adfs.example.com/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices'

4.    変更を保存してファイルを実行し、表示されたとおりに次のフィールドに値を入力します。  

bob@Ubuntu64:~$ ./working_samlapi.py
   Username: bob@example.com
   Password: ***********

   Please choose the role you would like to assume:
   [ 0 ]:  arn:aws:iam::123456789012:role/ADFS-DevAdmin
   [ 1 ]:  arn:aws:iam::123456789012:role/ADFS-DevReadOnly

   Selection:  0

   ----------------------------------------------------------------
   Your new access key pair has been stored in the AWS configuration file /home/ec2-user/.aws/credentials under the saml profile.
   Note that it will expire at 2018-03-14T14:57:45Z.
   After this time, you may safely rerun this script to refresh your access key pair.
   To use this credential, call the AWS CLI with the --profile option (e.g. aws --profile saml ec2 describe-instances).
   ----------------------------------------------------------------

5.    統合に成功したら、コマンドの --profile パラメータを使用して、新しく設定した SAML プロファイルでコマンドを実行します。 

 bob@Ubuntu64:~$ aws iam list-saml-providers --profile saml
   {
       "SAMLProviderList": [
           {
               "CreateDate": "2018-03-14T13:28:24Z",
               "ValidUntil": "2118-03-14T13:28:23Z",
               "Arn": "arn:aws:iam::123456789012:saml-provider/adfs"
           }
      ]
   }

解決方法 3: フォームベース認証を使用した AD FS 用のPython (AD FS 3.0 および 4.0 のデフォルト)

1.    以下のモジュールを Python にインストールします。  

pip install --upgrade boto beautifulsoup4 requests

2.    SAML 2.0 を使用してフェデレーテッド API/CLI アクセス用の一般的なソリューションを実装してから、ブログ記事の手順 4 からスクリプトをダウンロードします。

3.    解決方法 2:IWA を使用する AD FS 用のPython (AD FS 2.0 のデフォルト) の手順 3〜5 を実行します。