フェデレーションを使用して Active Directory ユーザーに対し、AWS マネジメントコンソールへのアクセスを設定しました。Active Directory フェデレーションサービス (AD FS) を使用して、AWS コマンドラインインターフェイス (AWS CLI) への同じアクセス許可をユーザーに付与したいと考えています。
簡単な説明
SAML 2.0 フェデレーションユーザーに AWS マネジメントコンソールへのアクセスを許可した場合でも、プログラムによるアクセスを必要とするユーザーにはアクセスキーとシークレットキーが必要です。
AWS Identity and Access Management (IAM) ユーザーのアクセスキー ID とシークレットアクセスキーを取得するには、次のいずれかを実行します。
フェデレーションユーザーにアクセス許可を付与する前に、次のことを行ってください。
注: ディレクトリユーザーに対して多要素認証 (MFA) を有効にしている場合、このソリューションでは互換性がありません。
解決策
ID プロバイダー (IdP) が Integrated Windows Authentication (IWA)、NTLM、または Kerberos (AD FS 2.0 のデフォルト) と連携するように構成されている場合は、解決策 1 を参照してください。IdP がフォームベース認証 (AD FS 3.0 および 4.0 のデフォルト) と連携するように構成されている場合は、解決策 2 を参照してください。
注: AWS CLI コマンドの実行中にエラーが発生した場合は、最新バージョンの AWS CLI を使用していることを確認してください。
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 認証タイプは NTLM に設定されています。上記の AWS Tools コマンドレットの例で 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
フォームベース認証を使用する 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 を設定する
AWS マネージド Microsoft AD でシングルサインオンを有効にする