翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 コンソール
AWS IAM
IAM コンソール
AWS Organizations
AWS Organizations コンソール
このアクションは、管理アカウントとして AWS アカウント 組織にテストを追加します。テストアカウントが他にもある場合は、そのアカウントを組織に招待できますが、このチュートリアルでは必須ではありません。
IAM Identity Center
IAM Identity Center コンソール
次に、以下の設定を行います。
-
[設定] ページに移動します。「アクセスポータルの URL」を探し、後で使用するために値を
sso_start_url
設定に記録します。 -
のバナーで AWS Management Console、SSO を有効にしたときに AWS リージョン 設定された を探します。これは、 AWS アカウント ID の左側にあるドロップダウンメニューです。後で使用できるようにリージョンコードを
sso_region
設定に記録しておきます。このコードはus-east-1
のようになります。 -
次のように SSO ユーザーを作成します。
-
[ユーザー]ページに移動します。
-
[ユーザーを追加] を選択し、ユーザーの ユーザー名、 メールアドレス、 名、 姓 を入力します。[次へ] を選択します。
-
グループのページで [次へ] を選択し、情報を確認して [ユーザーを追加] を選択します。
-
-
次のようにグループを作成します。
-
[グループ]ページに移動します。
-
[グループを作成] を選択し、グループの [グループ名] と [説明] を入力します。
-
ユーザーをグループに追加セクションで、前に作成したテスト SSO ユーザーを選択します。次に、[Create group] (グループを作成) を選択します。
-
-
次のようにアクセス権限セットを作成します。
-
[権限セット] ページに移動し、[権限セットの作成] を選択します。
-
[権限セットの種類] で [カスタム権限セット] を選択し、[次へ] を選択します。
-
[インラインポリシー] を開き、次のポリシーを入力します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets", "iam:ListUsers" ], "Resource": "*" } ] }
-
このチュートリアルでは、 権限セット名 として
SSOReadOnlyRole
を入力します。必要に応じて説明を追加し、 [次へ] を選択します。 -
情報を確認してから、[Create] (作成) を選択します。
-
後で使用できるように権限セットの名前を
sso_role_name
設定に記録します。
-
-
AWS アカウントページに移動し、以前に組織に追加した AWS アカウントを選択します。
-
そのページの 「概要」セクションで アカウント ID を探し、後で使用できるように
sso_account_id
設定に記録しておきます。 -
[ユーザーとグループ] タブを選択し、[ユーザーまたはグループの割り当て]を選択します。
-
[ユーザーとグループの割り当て]ページで [グループ] タブを選択し、先ほど作成したグループを選択して、[次へ] を選択します。
-
前に作成した権限セットを選択し、[次へ] を選択してから [送信] を選択します。設定には少し時間がかかります。
サンプルアプリケーションを作成する
以下のアプリケーションを作成します。これらは SSO ユーザーのコンピュータで実行されます。
AWSSDK.SSO
および AWSSDK.SSOOIDC
に加えて、Include NuGet パッケージAWSSDK.S3
と AWSSDK.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.IdentityManagement
と AWSSDK.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 ユーザーに以下を実行してもらいます。
-
共有 AWS
config
ファイルを含むフォルダが存在しない場合は、作成します。フォルダーが存在し、.sso
という名前のサブフォルダーがある場合は、そのサブフォルダーを削除します。このフォルダーの場所は通常、Windows では
%USERPROFILE%\.aws
、Linux および macOS では~/.aws
です。 -
必要に応じて、そのフォルダに共有 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 -
Amazon S3 アプリケーションを実行します。ランタイム例外が表示されます。
-
次の AWS CLI コマンドを実行します。
aws sso login --profile
my-sso-profile
-
表示される Web サインインページで、サインインします。招待メッセージに記載されているユーザー名と、メッセージに応じて作成されたパスワードを使用します。
-
Amazon S3 アプリケーションを再実行します。これで、アプリケーションに S3 バケットのリストが表示されます。
-
IAM アプリケーションを実行します。アプリケーションには IAM ユーザーのリストが表示されます。これは、2 回目のサインインが行われなかった場合でも同様です。IAM アプリケーションは、以前に作成された一時トークンを使用します。
クリーンアップ
このチュートリアルで作成したリソースを保持しない場合は、リソースをクリーンアップします。これらは、ファイルやフォルダなどの開発環境の AWS リソースまたはリソースである可能性があります。