フェデレーションを使用して Active Directory のユーザーに AWS マネジメントコンソールへのアクセスを設定しました。Active Directory フェデレーションサービス (AD FS) を使用してユーザーに AWS コマンドラインインターフェース (AWS CLI) への同様のアクセスを付与する方法を教えてください。
簡単な説明
SAML 2.0 フェデレーションユーザーに AWS マネジメントコンソールへのアクセスを許可する場合でも、プログラムによるアクセスが必要なユーザーにはアクセスキーとシークレットキーが必要です。
AWS ID およびアクセス管理 (IAM) ユーザーのアクセスキー ID とシークレットアクセスキーを取得するには、次の方法があります。
AWS CLI を設定します。
フェデレーションユーザーが AWS CLI にアクセスするための一時的な認証情報を取得します。
フェデレーションユーザーにアクセス権を付与するには、以下を実行する必要があります。
注: ディレクトリユーザーに対して多要素認証 (MFA) が有効になっている場合、このソリューションは互換性がありません。
解決方法
ID プロバイダー (IdP) が AD FS 2.0 にデフォルトで設定されている統合 Windows 認証 (IWA)、NTLM、または Kerberos に対応できるよう設定されている場合、解決方法 1 を参照してください。IdP がフォームベース認証 (AD FS 3.0 および 4.0 のデフォルト) で機能するように設定されている場合は、解決方法 2 を参照してください。
注: 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: フォームベースの認証を使用し 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. スクリプトを開き、ご希望の地域と出力形式を設定します。adfs.example.com をユーザーの URL と置き換え、AD FS サーバーの完全修飾ドメイン名 (FQDN) を入力します。
region = 'eu-west-1'
outputformat = 'json'
awsconfigfile = '/.aws/credentials'
idpentryurl = 'https://adfs.example.com/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices'
注: AWS 認証情報ファイルの別のファイルパスがある場合は、ファイルパスを指定します。
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"
}
]
}
関連情報
AWS Tools for PowerShell を使用したフェデレーティッド ID の設定
シングルサインオン