AWS CLI 및 .NET 애플리케이션을 사용한 SSO용 자습서 - AWS SDK for .NET

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS CLI 및 .NET 애플리케이션을 사용한 SSO용 자습서

이 자습서에서는 기본 .NET 애플리케이션 및 테스트 SSO 사용자에 대해 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 계정 있는 최소 하나를 식별하거나 생성합니다. 이 자습서에서는 이를 테스트 AWS 계정 또는 간단히 테스트 계정이라고 합니다.

  • SSO를 테스트할 수 있는 Word 사용자를 식별합니다. SSO WordSSO와 사용자가 생성하는 기본 애플리케이션을 사용할 사람입니다. 이 자습서에서 그 사람은 사용자(개발자)일 수도 있고 다른 사람일 수도 있습니다. 또한 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를 활성화합니다. 필요한 경우 이메일 확인을 수행합니다. 자세한 내용은 IAM Identity Center 사용 설명서의 Word Identity Center 활성화를 참조하세요. IAM

그런 다음 다음과 같이 구성합니다.

  1. 설정 페이지로 이동합니다. '액세스 포털 URL'를 찾아 나중에 sso_start_url 설정에 사용할 값을 기록합니다.

  2. 의 배너에서 SSO를 활성화할 때 설정된 AWS 리전 를 AWS Management Console찾습니다. AWS 계정 ID 왼쪽의 드롭다운 메뉴입니다. 나중에 사용할 수 있도록 sso_region 설정에 리전 코드를 기록해 둡니다. 이 코드는 us-east-1과 비슷합니다.

  3. 다음과 같이 SSO 사용자를 생성합니다.

    1. 사용자 페이지로 이동합니다.

    2. 사용자 추가를 선택하고 사용자의 사용자 이름, 이메일 주소, 이름, 을 입력합니다. 그리고 다음을 선택합니다.

    3. 그룹 페이지에서 다음을 선택한 다음 정보를 검토하고 사용자 추가를 선택합니다.

  4. 다음과 같이 그룹을 생성합니다.

    1. 그룹 페이지로 이동합니다.

    2. 그룹 생성을 선택하고 그룹의 그룹 이름설명을 입력합니다.

    3. 그룹에 사용자 추가 섹션에서 이전에 생성한 테스트 SSO 사용자를 선택합니다. 그런 다음, 그룹 생성을 선택합니다.

  5. 다음과 같이 권한 세트를 생성합니다.

    1. 권한 세트 페이지로 이동하여 권한 세트 생성을 선택합니다.

    2. 권한 세트 유형에서 사용자 지정 권한 세트를 선택하고 다음을 선택합니다.

    3. 인라인 정책을 열고 다음 정책을 입력합니다.

      { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets", "iam:ListUsers" ], "Resource": "*" } ] }
    4. 이 자습서에서는 권한 세트 이름으로 SSOReadOnlyRole을 입력합니다. 원하는 경우 설명을 추가하고 다음을 선택합니다.

    5. 정보를 검토한 후 생성을 선택합니다.

    6. 나중에 사용할 수 있도록 sso_role_name 설정에 권한 세트의 이름을 기록해 둡니다.

  6. AWS 계정 페이지로 이동하여 이전에 조직에 추가한 AWS 계정을 선택합니다.

  7. 해당 페이지의 개요 섹션에서 계정 ID를 찾아 나중에 sso_account_id 설정에서 사용할 수 있도록 기록해 둡니다.

  8. 사용자 및 그룹 탭을 선택한 다음 사용자 또는 그룹 할당을 선택합니다.

  9. 사용자 및 그룹 할당 페이지에서 그룹 탭을 선택하고 이전에 만든 그룹을 선택한 후 다음을 선택합니다.

  10. 이전에 만든 권한 세트를 선택하고 다음을 선택한 다음 제출을 선택합니다. 구성은 몇 분 정도 걸립니다.

예제 애플리케이션 생성

다음 애플리케이션을 생성합니다. Word SSO 사용자의 컴퓨터에서 실행됩니다.

AWSSDK.S3 및 외에 및와 AWSSDK.SSO AWSSDK.SSOOIDC 함께 NuGet 패키지를 포함합니다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.IdentityManagementAWSSDK.SSO AWSSDK.SSOOIDC 외에 및와 함께 NuGet 패키지를 포함합니다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 지원 프로파일에 대한 사용자 자격 증명 SSO를 표시합니다.

SSO 사용자 지시

SSO 사용자에게 이메일을 확인하고 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. 결과 웹 로그인 페이지에서 로그인합니다. 초대 메시지에 있는 사용자 이름과 메시지에 대한 응답으로 생성된 비밀번호를 사용하세요.

  6. Amazon S3 애플리케이션을 다시 실행합니다. 이제 애플리케이션이 S3 버킷 목록을 표시합니다.

  7. IAM 애플리케이션을 실행합니다. 애플리케이션에 IAM 사용자 목록이 표시됩니다. 두 번째 로그인이 수행되지 않았더라도 마찬가지입니다. IAM 애플리케이션은 이전에 생성된 임시 토큰을 사용합니다.

정리

이 자습서에서 생성한 리소스를 보관하지 않으려면 정리하세요. 이러한 AWS 리소스는 파일 및 폴더와 같은 개발 환경의 리소스일 수 있습니다.