AWS SDK for .NETでのシングルサインオン (SSO) - AWS SDK for .NET

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

AWS SDK for .NETでのシングルサインオン (SSO)

AWS IAM Identity Center は、AWS アカウント とクラウドアプリケーションへの SSO アクセスの一元管理を容易にするクラウドベースのシングルサインオン (SSO) サービスです。詳細については、IAM Identity Center ユーザーガイドを参照してください。

SDK が IAM Identity Centerとどのように相互作用するのかがよくわからない場合は、以下の情報を参照してください。

高レベルでは、SDK は次のパターンと同様の方法で IAM Identity Centerと相互作用します。

  1. IAM Identity Centerは通常 IAM Identity Centerコンソールを使用して設定され、SSO ユーザーは参加するよう招待されます。

  2. AWSconfigユーザーのコンピュータ上の共有ファイルが SSO 情報で更新されます。

  3. ユーザーは IAM Identity Center からサインインすると、設定されている AWS Identity and Access Management (IAM) 権限の短期認証情報が与えられます。このサインインは、AWS CLIのような非 SDK ツールを使って開始することも、.NET アプリケーションを通じてプログラム的に開始することもできます。

  4. ユーザーは作業を続行します。SSO を使用している他のアプリケーションを実行する場合、アプリケーションを開くために再度サインインする必要はありません。

このトピックの残りの部分では、設定とAWS IAM Identity Centerの使用に関する参考情報を提供します。SDK 認証の設定での基本的な SSO 設定よりも補足的な情報やより高度な情報を提供します。AWSでSSO を初めて使用する場合は、まずそのトピックで基本的な情報を確認し、次に次のチュートリアルで SSO の動作を確認するとよいでしょう。

このトピックには、次のセクションが含まれています。

前提条件

IAM Identity Center を使用する前に、ID ソースの選択や関連するAWS アカウントやアプリケーションの設定など、特定のタスクを実行する必要があります。詳細については、以下を参照してください。

  • IAM Identity Center の設定の詳細については、「IAM Identigy Center ユーザーガイド」の「Getting Started」(使用開始) を参照してください。

  • 具体的なタスクの例については、このトピックの最後にあるチュートリアルのリストを参照してください。ただし、チュートリアルを試す前に、このトピックの情報を必ず確認してください。

SSO プロファイルのセットアップ

関連するAWS アカウントで、IAM Identity Center を設定したら、SSO 用の名前付きプロファイルをユーザーの共有AWSconfigファイルに追加する必要があります。このプロファイルは、AWS アクセス ポータルに接続するために使用され、ユーザーに対して構成された IAM 権限の短期認証情報を返します。

共有 config ファイルの名前は通常、Windows では %USERPROFILE%\.aws\config、Linux および macOS では ~/.aws/config です。任意のテキストエディタを使用して SSO 用の新しいプロファイルを追加できます。または、 aws configure sso コマンドを使用できます。このコマンドの詳細については、「AWS Command Line Interfaceユーザーガイド」の「IAM Identity Center を使用するための AWS CLI の設定」を参照してください。

新しいプロファイルは、次のようになります。

[profile my-sso-profile] sso_start_url = https://my-sso-portal.awsapps.com/start sso_region = us-west-2 sso_account_id = 123456789012 sso_role_name = SSOReadOnlyRole

新しいプロファイルの設定は以下で定義されています。最初の 2つの設定はAWSアクセスポータルを定義します。他の 2 つの設定はペアになっており、これらを組み合わせてユーザーに設定された権限を定義します。4つの設定すべてが必須です。

sso_start_url

組織のAWSアクセスポータルを指す URL この値を確認するには、IAM Identity Center コンソールを開いて、[設定 ]を選択し、[ポータル URL] を探します。

sso_region

アクセスポータルホストが含まれる AWS リージョン。これは IAM Identity Centerを有効にしたときに選択されたリージョンです。他のタスクに使用するリージョンとは異なる場合があります。

AWS リージョン の完全なリストとそれらのコードについては、Amazon Web Services 全般のリファレンス の 「リージョナルエンドポイント」を参照してください。

sso_account_id

AWS Organizations サービスを通じて追加された AWS アカウントの ID。使用可能なアカウントのリストを確認するには、IAM Identity Center コンソールに移動してAWS アカウントページを開きます。この設定で選択するアカウント ID は、次に示すsso_role_name設定に指定する予定の値に対応します。

sso_role_name

IAM Identity Centerの権限セットの名前。この権限セットは、IAM Identity Center を通じてユーザーに付与される権限を定義します。

以下の手順は、この設定の値を確認する方法の 1 つです。

  1. IAM Identity Centerコンソールに移動し、AWS アカウントページを開きます。

  2. 詳細を表示するアカウントを選択します。選択するアカウントは、SSO 権限を付与したい SSO ユーザーまたはグループを含むアカウントになります。

  3. アカウントに割り当てられているユーザーとグループのリストを見て、対象のユーザーまたはグループを探します。sso_role_name設定で指定する権限セットは、このユーザーまたはグループに関連付けられている権限セットの 1 つです。

この設定の値を指定するときは、Amazon リソースネーム (ARN) ではなく、権限セットの名前を使用してください。

権限セットには IAM ポリシーとカスタムアクセス権限ポリシーがアタッチされています。詳細については、「 IAM Identity Center ユーザーガイド」の「権限セット」を参照してください。

SSO トークンの生成と使用

SSO を使用するには、ユーザーはまず一時トークンを生成し、次にそのトークンを使用して適切なAWSアプリケーションやリソースにアクセスする必要があります。.NET アプリケーションでは、次の方法を使用してこれらの一時トークンを生成して使用できます。

  • 必要に応じて最初にトークンを生成し、そのトークンを使用する.NET アプリケーションを作成します。

  • AWS CLIを使用してトークンを生成し、そのトークンを.NET アプリケーションで使用します。

これらの方法については、以下のセクションで説明し、チュートリアルで実演しています。

重要

SSO 解決が機能するには、アプリケーションが次の NuGet パッケージを参照する必要があります。

  • AWSSDK.SSO

  • AWSSDK.SSOOIDC

これらのパッケージを参照しないと、ランタイム例外が発生します。

このセクションでは、必要に応じて一時的な SSO トークンを生成し、そのトークンを使用する .NET アプリケーションを作成する方法を説明します。このプロセスの詳細なチュートリアルについては、.NET アプリケーションのみを使用する SSO のチュートリアルを参照してください。

SSO トークンをプログラムで生成して使用する。

AWS CLIを使用するほかに、SSO トークンをプログラムでも生成できます。

そのために、アプリケーションは SSO プロファイル用のAWSCredentialsオブジェクトを作成します。このオブジェクトは、一時的な認証情報があればそれをロードします。次に、アプリケーションはそのAWSCredentialsオブジェクトをSSOAWSCredentialsオブジェクトにキャストし、必要に応じてユーザーにサインイン情報の入力を求めるコールバックメソッドなど、いくつかの Options プロパティを設定する必要があります。

次のコードスニペットは、このメソッドを示しています。

重要

SSO 解決が機能するには、アプリケーションが次の NuGet パッケージを参照する必要があります。

  • AWSSDK.SSO

  • AWSSDK.SSOOIDC

これらのパッケージを参照しないと、ランタイム例外が発生します。

static AWSCredentials LoadSsoCredentials() { var chain = new CredentialProfileStoreChain(); if (!chain.TryGetAWSCredentials("my-sso-profile", out var credentials)) throw new Exception("Failed to find the my-sso-profile profile"); var ssoCredentials = credentials as SSOAWSCredentials; ssoCredentials.Options.ClientName = "Example-SSO-App"; ssoCredentials.Options.SsoVerificationCallback = args => { // Launch a browser window that prompts the SSO user to complete an SSO sign-in. // This method is only invoked if the session doesn't already have a valid SSO token. // NOTE: Process.Start might not support launching a browser on macOS or Linux. If not, // use an appropriate mechanism on those systems instead. Process.Start(new ProcessStartInfo { FileName = args.VerificationUriComplete, UseShellExecute = true }); }; return ssoCredentials; }

適切な SSO トークンがない場合は、既定のブラウザーウィンドウが起動し、適切なサインインページが開きます。たとえば、IAM Identity Center を ID ソースとして使用している場合、ユーザーには次のようなサインインページが表示されます。

AWS IAM Identity Center サインインページ
注記

SSOAWSCredentials.Options.ClientNameに入力するテキスト文字列には、スペースを含めることはできません。文字列にスペースが含まれていると、ランタイム例外が発生します。

.NET アプリケーションのみを使用する SSO のチュートリアル

このセクションでは、AWS CLIを使用して一時的な SSO トークンを生成する方法と、そのトークンをアプリケーションで使用する方法について説明します。このプロセスの詳細なチュートリアルについては、AWS CLIおよび.NET アプリケーションを使用する SSO のチュートリアルを参照してください。

AWS CLIを使用して SSO トークンを生成します。

一時的な SSO トークンをプログラムで生成するだけでなく、AWS CLIを使用してトークンを生成します。次の情報は、その方法を示しています。

前のセクションで説明したように、ユーザは SSO 対応プロファイルを作成したら、AWS CLIからaws sso loginコマンドを実行します。SSO 対応プロファイルの名前には必ず--profileパラメータを含める必要があります。これを次の例で示します:

aws sso login --profile my-sso-profile

現在のトークンの有効期限が切れた後に新しい一時トークンを生成したい場合は、同じコマンドをもう一度実行できます。

生成された SSO トークンを.NET アプリケーションで使用します。

次の情報は、すでに生成されている一時トークンの使用方法を示しています。

重要

SSO 解決が機能するには、アプリケーションが次の NuGet パッケージを参照する必要があります。

  • AWSSDK.SSO

  • AWSSDK.SSOOIDC

これらのパッケージを参照しないと、ランタイム例外が発生します。

アプリケーションが SSO プロファイル用のAWSCredentialsオブジェクトを作成し、AWS CLIによって以前に生成された一時的な認証情報が読み込まれます。これはアプリケーションでの認証情報とプロファイルへのアクセスに示した方法と似ており、形式は次のとおりです。

static AWSCredentials LoadSsoCredentials() { var chain = new CredentialProfileStoreChain(); if (!chain.TryGetAWSCredentials("my-sso-profile", out var credentials)) throw new Exception("Failed to find the my-sso-profile profile"); return credentials; }

その後、AWSCredentialsオブジェクトはサービスクライアントのコンストラクターに渡されます。例:

var S3Client_SSO = new AmazonS3Client(LoadSsoCredentials());
注記

アプリケーションが SSO 用の[default]プロファイルを使用するように構築されている場合は、AWSCredentialsを使用して一時的な認証情報を読み込む必要はありません。その場合、アプリケーションは、「var client = new AmazonS3Client();」と同様に、パラメーターなしでAWSサービスクライアントを作成できます。

AWS CLIおよび.NET アプリケーションを使用する SSO のチュートリアル

追加リソース

その他のヘルプについては、以下の資料を参照してください。