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

最終更新日: 2021 年 1 月 5 日

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

簡単な説明

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

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

注意: ディレクトリユーザーに対して多要素認証 (MFA) が有効になっている場合、このソリューションは互換性がありません。

解決方法

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

注意: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

解決方法 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 のログイン統一リソース名 (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 を実行します。


この記事は役に立ちましたか?


請求に関するサポートまたは技術的なサポートが必要ですか?