AWS Tools for PowerShell を使用したフェデレーティッド ID の設定 - AWS Tools for PowerShell (バージョン 4)

のバージョン 5 (V5) AWS Tools for PowerShell がリリースされました。

新しいバージョンのツールの使用を開始するには、「AWS Tools for PowerShell ユーザーガイド (V5)」、特に V5 への移行に関するトピックを参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS Tools for PowerShell を使用したフェデレーティッド ID の設定

組織のユーザーが AWS リソースにアクセスできるようにするには、セキュリティ、監査性、コンプライアンス、ロールとアカウントの分離のサポートという目的で、標準の繰り返し可能な認証方法を設定する必要があります。ユーザーに AWS API へのアクセス機能を提供するのが一般的ですが、フェデレーティッド API アクセスがない場合、AWS Identity and Access Management (IAM) ユーザーも作成する必要があり、フェデレーションを使用する意味がなくなります。このトピックでは、AWS Tools for PowerShell での SAML (Security Assertion Markup Language) のサポートについて説明します。このサポートにより、フェデレーティッドアクセスソリューションが簡単になります。

AWS Tools for PowerShell の SAML サポートを使用すると、ユーザーに AWS サービスへのフェデレーティッドアクセスを提供できます。SAML は、サービス間 (特に Active Directory フェデレーションサービスなどの ID プロバイダーと AWS などのサービスプロバイダーの間) でユーザーの認証および認可データを転送するための、XML ベースのオープンスタンダードフォーマットです。SAML とそのしくみの詳細については、Wikipedia の SAML、または Organization for the Advancement of Structured Information Standards (OASIS) ウェブサイトの SAML 技術仕様を参照してください。AWS Tools for PowerShell での SAML サポートは SAML 2.0 と互換性があります。

前提条件

初めて SAML サポートを使用する前に、次の項目を用意しておく必要があります。

  • 組織の認証情報のみを使用して、コンソールにアクセスするために AWS アカウントと正常に統合されたフェデレーティッド ID ソリューション。Active Directory フェデレーションサービスに対してこれを行う方法については、IAM ユーザーガイドの「SAML 2.0 フェデレーションについて」、およびブログの投稿「Enabling Federation to AWS Using Windows Active Directory, AD FS, and SAML 2.0」を参照してください。このブログの投稿では AD FS 2.0 について説明していますが、AD FS 3.0 を実行している場合でも手順は似ています。

  • ローカルワークステーションにインストールされた AWS Tools for PowerShell のバージョン 3.1.31.0 以降。

ID フェデレーティッドユーザーが AWS のサービス API にフェデレーティッドアクセスするしくみ

次のプロセスは、AWS リソースにアクセスするために Active Directory (AD) ユーザーが AD FS によってフェデレーションされるプロセスの概要を示しています。

Diagram showing federated user access flow to AWS resources via AD FS and Security Token Service.
  1. フェデレーティッドユーザーのコンピュータ上のクライアントは、AD FS に対して認証されます。

  2. 認証が成功すると、AD FS はユーザーに SAML アサーションを送信します。

  3. ユーザーのクライアントは、SAML フェデレーション要求の一部として SAML アサーションを AWS Security Token Service (STS) に送信します。

  4. STS は、ユーザーが継承できるロールの一時的な AWS 認証情報を含む SAML レスポンスを返します。

  5. ユーザーは、AWS Tools for PowerShell によるリクエストに一時的な認証情報を含めることによって、AWS サービス API にアクセスします。

AWS Tools for PowerShell での SAML サポートのしくみ

このセクションでは、AWS Tools for PowerShell コマンドレットを使用してユーザーの SAML ベースの ID フェデレーションの設定を有効にする方法を説明します。

Diagram showing SAML-based federation flow between organization, AD FS, AWS, and service APIs.
  1. AWS Tools for PowerShell は、Windows ユーザーの現在の認証情報を使用して、または、 に呼び出すために認証情報を必要とするコマンドレットが実行されたときはインタラクティブに、AD FS に対して認証を行います。AWS

  2. AD FS がユーザーを認証します。

  3. AD FS は、アサーションを含む SAML 2.0 認証応答を生成します。アサーションの目的は、ユーザーに関する情報を識別して提供することです。AWS Tools for PowerShell は、SAML アサーションからユーザーの許可されたロールのリストを抽出します。

  4. AWS Tools for PowerShell は、AssumeRoleWithSAMLRequest API コールを行って、リクエストされたロールの Amazon リソースネーム (ARN) などの SAML リクエストを STS に転送します。

  5. SAML リクエストが有効な場合、STS は、AWS AccessKeyIdSecretAccessKeySessionToken を含んだレスポンスを返します。これらの認証情報は 3,600 秒 (1 時間) 有効です。

  6. これにより、ユーザーに、ユーザーのロールでアクセスを許可されている AWS サービス API を操作するための有効な認証情報が付与されます。AWS Tools for PowerShell は、これらの認証情報を後続の AWS API 呼び出しに自動的に適用し、有効期限が切れると自動的に更新します。

    注記

    認証情報の有効期限が切れ、新しい認証情報が必要になると、AWS Tools for PowerShell は自動的に AD FS と再認証を行い、次の 1 時間用の新しい認証情報を取得します。ドメイン結合されたアカウントのユーザーの場合、このプロセスはサイレントに行われます。ドメイン結合されていないアカウントの場合、ユーザーは、再認証のために認証情報を入力するように AWS Tools for PowerShell によって指示されます。

PowerShell SAML 設定コマンドレットを使用する方法

AWS Tools for PowerShell には、SAML サポートを提供する新しい 2 つのコマンドレットが含まれます。

  • Set-AWSSamlEndpoint は、AD FS エンドポイントを設定し、エンドポイントにわかりやすい名前を割り当て、必要に応じて、エンドポイントの認証タイプを説明します。

  • Set-AWSSamlRoleProfile は、AD FS エンドポイントと関連付ける必要があるユーザーアカウントのプロファイルを作成または編集します。このエンドポイントは、Set-AWSSamlEndpoint コマンドレットにわかりやすい名前を指定することで識別されます。各ロールプロファイルは、ユーザーが実行を許可されている 1 つのロールにマップします。

    AWS 認証情報プロファイルと同様、ロールプロファイルにわかりやすい名前を割り当てます。Set-AWSCredential コマンドレットと同じわかりやすい名前を使用するか、AWS のサービス API を呼び出すコマンドレットの -ProfileName パラメータの値として使用できます。

新しい AWS Tools for PowerShell セッションを開きます。PowerShell 3.0 以降を実行している場合、そのコマンドレットのいずれかを実行すると、AWS Tools for PowerShell モジュールが自動的にインポートされます。PowerShell 2.0 を実行している場合は、次の例に示すように、「Import-Module」コマンドレットを実行して、モジュールを手動でインポートする必要があります。

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

Set-AWSSamlEndpointSet-AWSSamlRoleProfile コマンドレットを実行する方法

  1. まず、AD FS システムのエンドポイント設定を行います。最も簡単な方法は、次の手順に示すように、変数にエンドポイントを保存する方法です。必ず、プレースホルダーアカウント ID と AD FS ホスト名を自分のアカウント ID と AD FS ホスト名に置き換えます。Endpoint パラメータに AD FS ホスト名を指定します。

    PS > $endpoint = "https://adfs.example.com/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices"
  2. エンドポイント設定を作成するには、Set-AWSSamlEndpoint パラメータに正しい値を指定して、AuthenticationType コマンドレットを実行します。有効な値には、BasicDigestKerberosNegotiate、および NTLM があります。このパラメータを指定しない場合、デフォルト値は Kerberos になります。

    PS > $epName = Set-AWSSamlEndpoint -Endpoint $endpoint -StoreAs ADFS-Demo -AuthenticationType NTLM

    コマンドレットは、-StoreAs パラメータを使用して割り当てたわかりやすい名前を返すため、次の行で Set-AWSSamlRoleProfile を実行するときにその名前を使用できます。

  3. 次に、Set-AWSSamlRoleProfile コマンドレットを実行して、AD FS ID プロバイダーとの認証を行い、ユーザーに実行が許可されている一連のロールを (SAML アサーションで) 取得します。

    Set-AWSSamlRoleProfile コマンドレットは、返された一連のロールを使用して、指定のプロファイルに関連付けるロールを選択するようにユーザーに指示するか、パラメータに指定されたロールのデータが存在することを確認します (存在しない場合、ユーザーに選択するように指示します)。ユーザーに許可されたロールが 1 つのみの場合、コマンドレットは、ユーザーに指示することなく、ロールをプロファイルに自動的に割り当てます。ドメイン結合用途にプロファイルを設定するために認証情報を提供する必要はありません。

    PS > Set-AWSSamlRoleProfile -StoreAs SAMLDemoProfile -EndpointName $epName

    または、ドメイン結合されていないアカウントの場合、次の行に示すように、Active Directory 認証情報を提供し、ユーザーにアクセス権がある AWS ロールを選択できます。これは、別の Active Directory ユーザーアカウントが存在する場合に、組織内のロールを区別するときに役立ちます (たとえば、管理機能)。

    PS > $credential = Get-Credential -Message "Enter the domain credentials for the endpoint" PS > Set-AWSSamlRoleProfile -EndpointName $epName -NetworkCredential $credential -StoreAs SAMLDemoProfile
  4. どちらの場合も、Set-AWSSamlRoleProfile コマンドレットはプロファイルに保存するロールを選択するように指示します。次の例は、2 つの使用可能なロール ADFS-Dev および ADFS-Production を示しています。IAM ロールは、AD FS 管理者によって AD ログイン認証情報に関連付けられます。

    Select Role Select the role to be assumed when this profile is active [1] 1 - ADFS-Dev [2] 2 - ADFS-Production [?] Help (default is "1"):

    または、RoleARNPrincipalARN、オプションの NetworkCredential パラメータを入力して、プロンプトを表示せずにロールを指定することもできます。指定されたロールが認証によって返されたアサーションにリストされていない場合、ユーザーは使用可能なロールから選択するよう求められます。

    PS > $params = @{ "NetworkCredential"=$credential, "PrincipalARN"="{arn:aws:iam::012345678912:saml-provider/ADFS}", "RoleARN"="{arn:aws:iam::012345678912:role/ADFS-Dev}" } PS > $epName | Set-AWSSamlRoleProfile @params -StoreAs SAMLDemoProfile1 -Verbose
  5. 次のコードに示すように、StoreAllRoles パラメータを追加することで、1 つのコマンドですべてのロールのプロファイルを作成できます。ロール名はプロファイル名として使用されます。

    PS > Set-AWSSamlRoleProfile -EndpointName $epName -StoreAllRoles ADFS-Dev ADFS-Production

ロールプロファイルを使用して、AWS 認証情報を必要とするコマンドレットを実行する方法

AWS 認証情報を必要とするコマンドレットを実行するには、AWS 共有認証情報ファイルで定義されたロールプロファイルを使用できます。ロールプロファイルの名前を Set-AWSCredential に (または、AWS Tools for PowerShell の任意の ProfileName パラメータの値として) 指定して、プロファイルに記述されているロールの一時的な AWS 認証情報を自動的に取得します。

使用するのは一度に 1 つのロールプロファイルですが、シェルセッション内でプロファイルを切り替えることができます。Set-AWSCredential コマンドレットは、単独で実行した場合、認証を行わず、認証情報を取得しません。コマンドレットは、指定したロールプロファイルの使用をユーザーが希望していることを記録します。AWS 認証情報を必要とするコマンドレットを実行するまで、認証または認証情報のリクエストは行われません。

これで、SAMLDemoProfile プロファイルを使用して取得した一時的な AWS 認証情報を使用して、AWS のサービス API を使用できるようになります。次のセクションでは、ロールプロファイルの使用方法の例を示します。

例 1: Set-AWSCredential でデフォルトロールを設定する

この例では、AWS Tools for PowerShell を使用して、Set-AWSCredential セッションのデフォルトロールを設定します。次に、認証情報を必要とするコマンドレットを実行できます。これにより、指定されたロールによって権限が付与されます。この例では、Set-AWSCredential コマンドレットで指定されたプロファイルに関連付けられている米国西部 (オレゴン) リージョンにあるすべての Amazon Elastic Compute Cloud インスタンスを一覧表示します。

PS > Set-AWSCredential -ProfileName SAMLDemoProfile PS > Get-EC2Instance -Region us-west-2 | Format-Table -Property Instances,GroupNames Instances GroupNames --------- ---------- {TestInstance1} {default} {TestInstance2} {} {TestInstance3} {launch-wizard-6} {TestInstance4} {default} {TestInstance5} {} {TestInstance6} {AWS-OpsWorks-Default-Server}

例 2: PowerShell セッション中にロールプロファイルを変更する

この例では、SAMLDemoProfile プロファイルに関連付けられているロールの AWS アカウントにある使用可能なすべての Amazon S3 バケットを一覧表示します。この例では、AWS Tools for PowerShell セッションで別のプロファイルを使用していた場合でも、それをサポートするコマンドレットで -ProfileName パラメータに別の値を指定することで、プロファイルを変更できることを示しています。これは、PowerShell コマンドラインから Amazon S3 を管理している管理者の一般的なタスクです。

PS > Get-S3Bucket -ProfileName SAMLDemoProfile CreationDate BucketName ------------ ---------- 7/25/2013 3:16:56 AM amzn-s3-demo-bucket 4/15/2015 12:46:50 AM amzn-s3-demo-bucket1 4/15/2015 6:15:53 AM amzn-s3-demo-bucket2 1/12/2015 11:20:16 PM amzn-s3-demo-bucket3

Get-S3Bucket コマンドレットでは、Set-AWSSamlRoleProfile コマンドレットを実行して作成されたプロファイルの名前を指定します。このコマンドは、セッションで以前に (たとえば、Set-AWSCredential コマンドレットを実行して) ロールプロファイルを設定し、Get-S3Bucket コマンドレットに別のロールプロファイルを使用する場合に役立ちます。プロファイルマネージャーは、一時的な認証情報を Get-S3Bucket コマンドレットに使用できるようにします。

認証情報は 1 時間で有効期限が切れますが (STS によって実施される制限)、AWS Tools for PowerShell が現在の認証情報の有効期限が切れたことを検出すると、ツールは、新しい SAML アサーションをリクエストすることで、認証情報を自動的に更新します。

ドメイン結合されたユーザーの場合、現在のユーザーの Windows ID が認証時に使用されるため、このプロセスは中断なしで行われます。ドメイン結合されていないユーザーアカウントの場合、AWS Tools for PowerShell は、PowerShell 認証情報のプロンプトを表示して、ユーザーパスワードを要求します。ユーザーは、ユーザーの認証に使用する認証情報を指定し、新しいアサーションを取得します。

例 3: リージョンのインスタンスを取得する

次の例では、ADFS-Production プロファイルで使用されたアカウントに関連付けられているアジアパシフィック (シドニー) リージョンにあるすべての Amazon EC2 インスタンスを一覧表示します。これは、リージョンにあるすべての Amazon EC2 インスタンスを返す便利なコマンドです。

PS > (Get-Ec2Instance -ProfileName ADFS-Production -Region ap-southeast-2).Instances | Select InstanceType, @{Name="Servername";Expression={$_.tags | where key -eq "Name" | Select Value -Expand Value}} InstanceType Servername ------------ ---------- t2.small DC2 t1.micro NAT1 t1.micro RDGW1 t1.micro RDGW2 t1.micro NAT2 t2.small DC1 t2.micro BUILD

その他の参考資料

フェデレーティッド API アクセスの実装方法に関する一般的な情報については、「How to Implement a General Solution for Federated API/CLI Access Using SAML 2.0」を参照してください。

ご質問やご意見がございましたら、PowerShell Scripting または .NET Development の AWS 開発者フォーラムにアクセスしてください。