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

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

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

このチュートリアルでは、基本的な .NET アプリケーションとテスト SSO ユーザーに対して SSO を有効にする方法を示します。プログラム的に生成するのでなく、AWS CLIを使用して一時的な SSO トークンを生成します。

このチュートリアルでは、AWS SDK for .NETの SSO 機能の一部を紹介します。IAM Identity Center をAWS SDK for .NETと併用する方法の詳細については、背景情報を含むトピックを参照してください。そのトピックでは、特にAWS CLIおよび.NET アプリケーションというサブセクションにあるこのシナリオの大まかな説明を参照してください。

注記

このチュートリアルのいくつかのステップは、AWS OrganizationsやIAM Identity Center などのサービスの設定に役立ちます。これらの設定をすでに実行している場合、またはコードのみに関心がある場合は、サンプルコードのセクションまでスキップできます。

前提条件

  • まだの場合は、開発環境を設定します。これについては、ツールチェーンのインストールと設定開始方法などのセクションで説明しています。

  • SSO のテストに使用できる少なくとも 1 つのAWS アカウントを指定または作成してください。このチュートリアルでは、これをテストAWS アカウント、または単にテストアカウントと呼びます。

  • SSO をテストしてくれる SSO ユーザーを指定してください。これは SSO と、作成した基本的なアプリケーションを使用するユーザーです。このチュートリアルでは、あなた (開発者) でも他のユーザーでもかまいません。また、SSO ユーザーが開発環境外のコンピューターで作業するような設定もお勧めします。ただし、これは必須ではありません。

  • SSO ユーザーのコンピューターには、開発環境の設定に使用したものと互換性のある.NET フレームワークがインストールされている必要があります。

  • SSO ユーザーのコンピューターに、AWS CLIバージョン 2 がインストールされていることを確認してください。これは、コマンドプロントまたはターミナルでaws --versionを実行して確認できます。

AWS をセットアップする

このセクションでは、このチュートリアルでさまざまなAWSサービスを設定する方法を説明します。

この設定を行うには、まず管理者としてテストAWS アカウントにサインインします。次に、以下の操作を実行します。

Amazon S3

Amazon S3 コンソールに移動し、無害なバケットをいくつか追加します。このチュートリアルの後半では、SSO ユーザーがこれらのバケットのリストを取得します。

AWS IAM

IAM コンソールに移動し、IAM ユーザーを数人追加します。IAM ユーザーにアクセス権限を付与する場合は、その権限をいくつかの無害な読み取り専用権限に制限してください。このチュートリアルの後半では、SSO ユーザーがこれらの IAM ユーザーのリストを取得します。

AWS Organizations

AWS Organizationsコンソールに移動し、Organizations を有効にします。詳細については、「AWS Organizations ユーザーガイド」で「組織を作成する」を参照してください。

このアクションにより、テストAWS アカウントが管理アカウントとして組織に追加されます。テストアカウントが他にもある場合は、そのアカウントを組織に招待できますが、このチュートリアルでは必須ではありません。

IAM アイデンティティセンター

IAM ID センターコンソールに移動して SSO を有効にします。必要に応じて E メール認証を行います。詳細については、「IAM アイデンティティーセンター ユーザーガイド」の「IAM アイデンティティーセンターを有効化する」を参照してください。

次に、以下の設定を行います。

  1. [設定] ページに移動します。「アクセスポータル URL」 を探し、その値を後で使用できるようにsso_start_url設定に記録します。

  2. AWS Management Consoleのバナーで、SSO を有効にしたときに設定されたAWS リージョンを探してください。これは AWS アカウントID の左側にあるドロップダウンメニューです。後で使用できるように、sso_region設定にリージョンコードを記録しておきます。このコードは us-east-1 のようになります。

  3. SSO ユーザーを次のように作成します。

    1. ユーザー」ページに移動します。

    2. [ユーザーを追加] を選択し、ユーザーのユーザー名メールアドレスを入力します。次に、[次へ] を選択します。

    3. グループのページで [次へ] を選択し、情報を確認して [ユーザーを追加] を選択します。

  4. 次のようにグループを作成します。

    1. グループ」ページに移動します。

    2. [グループを作成] を選択し、グループのグループ名説明を入力します。

    3. ユーザーをグループに追加」セクションで、先ほど作成したテスト SSO ユーザーを選択します。次に、[Create group] (グループを作成) を選択します。

  5. 次のようにアクセス権限セットを作成します。

    1. [権限セット] ページに移動し、[権限セットの作成] を選択します。

    2. [権限セットタイプ] で [カスタム権限セット] を選択し、[次へ] を選択します。

    3. [インラインポリシー] を開き、次のポリシーを入力します。

      { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets", "iam:ListUsers" ], "Resource": "*" } ] }
    4. このチュートリアルでは、権限セット名としてSSOReadOnlyRoleを入力します。必要に応じて説明を追加し、[次へ] を選択します。

    5. 情報を確認してから、[Create] (作成) を選択します。

    6. 後で使用できるように、sso_role_name設定に権限セットの名前を設定に記録します。

  6. AWSアカウントページに移動し、すでに組織に追加してあるAWSアカウントを選択します。

  7. そのページの「概要」セクションでアカウント ID を探し、後で使用できるようにsso_account_id設定に記録しておきます。

  8. ユーザーとグループ」タブを選択し、「ユーザーまたはグループの割り当て」を選択します。

  9. ユーザーとグループの割り当て」ページで「グループ」タブを選択し、先ほど作成したグループを選択して、「次へ」を選択します。

  10. 前に作成した権限セットを選択し、[次へ] を選択してから [送信] を選択します。設定には少し時間がかかります。

サンプルアプリケーションを作成する

次のアプリケーションを作成します。それらは、SSO ユーザーのコンピューター上で実行されます。

AWSSDK.S3AWSSDK.SecurityTokenに加えて、NuGet パッケージAWSSDK.SSOAWSSDK.SSOOIDCも含めます。

using System; using System.Threading.Tasks; // NuGet packages: AWSSDK.S3, AWSSDK.SecurityToken, AWSSDK.SSO, AWSSDK.SSOOIDC using Amazon.Runtime; using Amazon.Runtime.CredentialManagement; using Amazon.S3; using Amazon.S3.Model; using Amazon.SecurityToken; using Amazon.SecurityToken.Model; namespace SSOExample.S3.CLI_login { class Program { // Requirements: // - An SSO profile in the SSO user's shared config file. // - An active SSO Token. // If an active SSO token isn't available, the SSO user should do the following: // In a terminal, the SSO user must call "aws sso login --profile my-sso-profile". // Class members. private static string profile = "my-sso-profile"; static async Task Main(string[] args) { // Get SSO credentials from the information in the shared config file. var ssoCreds = LoadSsoCredentials(profile); // Display the caller's identity. var ssoProfileClient = new AmazonSecurityTokenServiceClient(ssoCreds); Console.WriteLine($"\nSSO Profile:\n {await ssoProfileClient.GetCallerIdentityArn()}"); // Display a list of the account's S3 buckets. // The S3 client is created using the SSO credentials obtained earlier. var s3Client = new AmazonS3Client(ssoCreds); Console.WriteLine("\nGetting a list of your buckets..."); var listResponse = await s3Client.ListBucketsAsync(); Console.WriteLine($"Number of buckets: {listResponse.Buckets.Count}"); foreach (S3Bucket b in listResponse.Buckets) { Console.WriteLine(b.BucketName); } Console.WriteLine(); } // Method to get SSO credentials from the information in the shared config file. static AWSCredentials LoadSsoCredentials(string profile) { var chain = new CredentialProfileStoreChain(); if (!chain.TryGetAWSCredentials(profile, out var credentials)) throw new Exception($"Failed to find the {profile} profile"); return credentials; } } // Class to read the caller's identity. public static class Extensions { public static async Task<string> GetCallerIdentityArn(this IAmazonSecurityTokenService stsClient) { var response = await stsClient.GetCallerIdentityAsync(new GetCallerIdentityRequest()); return response.Arn; } } }

AWSSDK.IdentityManagementAWSSDK.SecurityTokenに加えて NuGet パッケージAWSSDK.SSOAWSSDK.SSOOIDCも含めます。

using System; using System.Threading.Tasks; // NuGet packages: AWSSDK.IdentityManagement, AWSSDK.SecurityToken, AWSSDK.SSO, AWSSDK.SSOOIDC using Amazon.Runtime; using Amazon.Runtime.CredentialManagement; using Amazon.IdentityManagement; using Amazon.IdentityManagement.Model; using Amazon.SecurityToken; using Amazon.SecurityToken.Model; namespace SSOExample.IAM.CLI_login { class Program { // Requirements: // - An SSO profile in the SSO user's shared config file. // - An active SSO Token. // If an active SSO token isn't available, the SSO user should do the following: // In a terminal, the SSO user must call "aws sso login --profile my-sso-profile". // Class members. private static string profile = "my-sso-profile"; static async Task Main(string[] args) { // Get SSO credentials from the information in the shared config file. var ssoCreds = LoadSsoCredentials(profile); // Display the caller's identity. var ssoProfileClient = new AmazonSecurityTokenServiceClient(ssoCreds); Console.WriteLine($"\nSSO Profile:\n {await ssoProfileClient.GetCallerIdentityArn()}"); // Display a list of the account's IAM users. // The IAM client is created using the SSO credentials obtained earlier. var iamClient = new AmazonIdentityManagementServiceClient(ssoCreds); Console.WriteLine("\nGetting a list of IAM users..."); var listResponse = await iamClient.ListUsersAsync(); Console.WriteLine($"Number of IAM users: {listResponse.Users.Count}"); foreach (User u in listResponse.Users) { Console.WriteLine(u.UserName); } Console.WriteLine(); } // Method to get SSO credentials from the information in the shared config file. static AWSCredentials LoadSsoCredentials(string profile) { var chain = new CredentialProfileStoreChain(); if (!chain.TryGetAWSCredentials(profile, out var credentials)) throw new Exception($"Failed to find the {profile} profile"); return credentials; } } // Class to read the caller's identity. public static class Extensions { public static async Task<string> GetCallerIdentityArn(this IAmazonSecurityTokenService stsClient) { var response = await stsClient.GetCallerIdentityAsync(new GetCallerIdentityRequest()); return response.Arn; } } }

これらのアプリケーションは、Amazon S3 バケットと IAM ユーザーのリストを表示するだけでなく、SSO 対応プロファイル (このチュートリアルでは my-sso-profile) のユーザー ID ARN を表示します。

SSO ユーザーに指示します。

SSO ユーザーに E メールを確認して SSO 招待を受け入れるように依頼します。パスワードの設定を求められます。メッセージが SSO ユーザーの受信トレイに届くまでに数分かかる場合があります。

先ほど作成したアプリケーションを SSO ユーザーに提供します。

次に、SSO ユーザーに次の操作を行わせます。

  1. 共有AWSconfigファイルを含むフォルダーが存在しない場合は、作成してください。フォルダーが存在し、.ssoという名前のサブフォルダーがある場合は、そのサブフォルダーを削除します。

    このフォルダーの場所は通常、Windows では %USERPROFILE%\.aws、Linux および macOS では ~/.aws です。

  2. 必要に応じてそのフォルダーに共有AWSconfigファイルを作成し、次のようにプロファイルを追加します。

    [default] region = <default Region> [profile my-sso-profile] sso_start_url = <user portal URL recorded earlier> sso_region = <Region code recorded earlier> sso_account_id = <account ID recorded earlier> sso_role_name = SSOReadOnlyRole
  3. Amazon S3 アプリケーションを実行します。ランタイム例外が表示されます。

  4. 以下の AWS CLI コマンドを実行します。

    aws sso login --profile my-sso-profile
  5. 表示される Web サインインページで、サインインします。招待メッセージに記載されているユーザー名と、メッセージに応じて作成されたパスワードを使用します。

  6. Amazon S3 アプリケーションを再実行します。これで、アプリケーションに S3 バケットのリストが表示されます。

  7. IAMアプリケーションを実行します。アプリケーションは IAM ユーザーのリストを表示します。これは、2 回目のサインインが行われなかった場合でも同様です。IAM アプリケーションは以前に作成された一時トークンを使用します。

クリーンアップ

このチュートリアルで作成したリソースを保持したくない場合は、リソースをクリーンアップします。これらは、AWS のリソースまたは開発環境内のリソース (ファイルやフォルダなど) である可能性があります。