기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS CLI 및 .NET 애플리케이션을 사용하는 SSO 자습서
이 자습서에서는 기본 .NET 애플리케이션 및 테스트 SSO 사용자를 위해 SSO를 활성화하는 방법을 보여줍니다. 프로그래밍 방식으로 생성하는 대신 AWS CLI를 사용하여 임시 SSO 토큰을 생성합니다.
이 자습서에서는 AWS SDK for .NET의 SSO 기능 중 일부를 보여 줍니다. AWS SDK for .NET로 IAM Identity Center를 사용하는 방법에 대한 자세한 내용은 배경 정보가 포함된 주제를 참조하세요. 해당 항목에서는 특히 AWS CLI 및 .NET 애플리케이션이라는 하위 섹션의 이 시나리오에 대한 고급 설명을 참조하세요.
참고
이 자습서의 여러 단계는 AWS Organizations 및 IAM Identity Center와 같은 서비스를 구성하는 데 도움이 됩니다. 이러한 구성을 이미 수행했거나 코드에만 관심이 있다면 예제 코드가 있는 섹션으로 건너뛰어도 됩니다.
필수 조건
-
아직 구성하지 않은 경우 개발 환경을 구성합니다. 이에 대해서는 도구 체인 설치 및 구성 및 시작하기와 같은 섹션에 설명되어 있습니다.
-
SSO 테스트에 사용할 수 있는 최소 하나의 AWS 계정를 식별하거나 생성하십시오. 이 자습서에서는 이를 테스트 AWS 계정 또는 간단히 테스트 계정이라고 합니다.
-
대신 SSO를 테스트할 수 있는 SSO 사용자를 지정하십시오. 이 사람은 사용자가 생성한 기본 애플리케이션과 SSO를 사용할 사람입니다. 이 자습서에서 그 사람은 사용자(개발자)일 수도 있고 다른 사람일 수도 있습니다. 또한 SSO 사용자가 개발 환경에 있지 않은 컴퓨터에서 작업하도록 설정하는 것이 좋습니다. 그러나 이 작업이 꼭 필요한 것은 아닙니다.
-
SSO 사용자 컴퓨터에는 개발 환경을 설정하는 데 사용한 프레임워크와 호환되는 .NET 프레임워크가 설치되어 있어야 합니다.
-
SSO 사용자 컴퓨터에 AWS CLI 버전 2가 설치되어 있는지 확인하십시오. 명령 프롬프트나 터미널에서
aws --version
을 실행하여 확인할 수 있습니다.
AWS 설정
이 섹션에서는 이 자습서용으로 다양한 AWS 서비스를 설정하는 방법을 보여줍니다.
이 설정을 수행하려면 먼저 테스트 AWS 계정에 관리자로 로그인하십시오. 뒤이어 다음과 같이 하세요.
Amazon S3
Amazon S3 콘솔
AWS IAM
IAM 콘솔
AWS Organizations
AWS Organizations 콘솔
이 작업을 수행하면 테스트 AWS 계정가 조직에 관리 계정으로 추가됩니다. 추가 테스트 계정이 있는 경우 해당 계정을 조직에 가입하도록 초대할 수 있지만 이 자습서에서는 그렇게 하지 않아도 됩니다.
IAM Identity Center
IAM ID Center 콘솔
그런 다음 다음과 같이 구성합니다.
-
설정 페이지로 이동합니다. "액세스 포털 URL"을 찾아 나중에 사용할 수 있도록
sso_start_url
설정에 값을 기록해 두세요. -
AWS Management Console의 배너에서 SSO를 활성화했을 때 설정된 AWS 리전을 찾아보세요. AWS 계정 ID 왼쪽에 있는 드롭다운 메뉴입니다. 나중에 사용할 수 있도록
sso_region
설정에 리전 코드를 기록해 둡니다. 이 코드는us-east-1
과 비슷합니다. -
다음과 같이 SSO 사용자를 생성합니다.
-
사용자 페이지로 이동합니다.
-
사용자 추가를 선택하고 사용자의 사용자 이름, 이메일 주소, 이름, 성을 입력합니다. 그리고 다음(Next)을 선택합니다.
-
그룹 페이지에서 다음을 선택한 다음 정보를 검토하고 사용자 추가를 선택합니다.
-
-
다음과 같이 그룹을 생성합니다.
-
그룹 페이지로 이동합니다.
-
그룹 생성을 선택하고 그룹의 그룹 이름과 설명을 입력합니다.
-
그룹에 사용자 추가 섹션에서 이전에 만든 테스트 SSO 사용자를 선택합니다. 그런 다음, 그룹 생성을 선택합니다.
-
-
다음과 같이 권한 세트를 생성합니다.
-
권한 세트 페이지로 이동하여 권한 세트 생성을 선택합니다.
-
권한 세트 유형에서 사용자 지정 권한 세트를 선택하고 다음을 선택합니다.
-
인라인 정책을 열고 다음 정책을 입력합니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets", "iam:ListUsers" ], "Resource": "*" } ] }
-
이 자습서에서는 권한 세트 이름으로
SSOReadOnlyRole
을 입력합니다. 원하는 경우 설명을 추가하고 다음을 선택합니다. -
정보를 검토한 후 생성을 선택합니다.
-
나중에 사용할 수 있도록
sso_role_name
설정에 권한 세트의 이름을 기록해 둡니다.
-
-
AWS 계정 페이지로 이동하여 이전에 조직에 추가한 AWS 계정을 선택합니다.
-
해당 페이지의 개요 섹션에서 계정 ID를 찾아 나중에
sso_account_id
설정에서 사용할 수 있도록 기록해 둡니다. -
사용자 및 그룹 탭을 선택한 다음 사용자 또는 그룹 할당을 선택합니다.
-
사용자 및 그룹 할당 페이지에서 그룹 탭을 선택하고 이전에 만든 그룹을 선택한 후 다음을 선택합니다.
-
이전에 만든 권한 세트를 선택하고 다음을 선택한 다음 제출을 선택합니다. 구성은 몇 분 정도 걸립니다.
예제 애플리케이션 생성
다음 애플리케이션을 생성합니다. SSO 사용자 컴퓨터에서 실행됩니다.
AWSSDK.S3
및 AWSSDK.SecurityToken
외에도 AWSSDK.SSO
및 AWSSDK.SSOOIDC
NuGet 패키지를 포함합니다.
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.IdentityManagement
및 AWSSDK.SecurityToken
외에도 AWSSDK.SSO
및 AWSSDK.SSOOIDC
NuGet 패키지를 포함합니다.
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
인 SSO 지원 프로필에 대한 사용자 자격 증명 ARN도 표시합니다.
SSO 사용자 지시
SSO 사용자에게 이메일을 확인하고 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
-
결과 웹 로그인 페이지에서 로그인합니다. 초대 메시지에 있는 사용자 이름과 메시지에 대한 응답으로 생성된 비밀번호를 사용하세요.
-
Amazon S3 애플리케이션을 다시 실행합니다. 이제 애플리케이션이 S3 버킷 목록을 표시합니다.
-
IAM 애플리케이션을 실행합니다. 애플리케이션에 IAM 사용자 목록이 표시됩니다. 두 번째 로그인이 수행되지 않았더라도 마찬가지입니다. IAM 애플리케이션은 이전에 생성된 임시 토큰을 사용합니다.
정리
이 자습서에서 생성한 리소스를 보관하지 않으려면 정리하세요. 이는 개발 환경에서 파일 및 폴더 같은 AWS 리소스일 수 있습니다.