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

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

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

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

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

注記

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

前提条件

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

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

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

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

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

セットアップ AWS

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

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

Amazon S3

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

AWS IAM

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

AWS Organizations

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

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

IAM Identity Center

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

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

  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.SSO および AWSSDK.SSOOIDCに加えて、Include NuGet パッケージAWSSDK.S3AWSSDK.SecurityToken

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.SSO および AWSSDK.SSOOIDCに加えて、Include NuGet パッケージAWSSDK.IdentityManagementAWSSDK.SecurityToken

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 ユーザーのリストを表示するだけでなく、これらのアプリケーションには、このチュートリアルmy-sso-profileにある ARN 対応プロファイルのユーザー ID SSO が表示されます。

SSO ユーザーを指示する

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

前に作成したアプリケーションを SSO ユーザーに渡します。

次に、SSO ユーザーに以下を実行してもらいます。

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

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

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

    [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 リソースまたはリソースである可能性があります。