AWS Tools for PowerShell를 사용하여 연동 자격 증명 구성 - AWS Tools for PowerShell

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

AWS Tools for PowerShell를 사용하여 연동 자격 증명 구성

조직의 사용자가 AWS 리소스에 액세스하도록 하려면 보안, 감사, 규정 준수, 그리고 역할 및 계정 분리 지원을 위해 반복 가능한 표준 인증 방법을 구성해야 합니다. 사용자에게 AWS API에 액세스하는 기능을 제공하는 것이 일반적이지만, 연동 API 액세스 권한이 없는 경우 AWS Identity and Access Management(IAM) 사용자를 생성해야 하는데, 이로 인해 연동 사용의 목적이 무효화됩니다. 이 주제에서는 연동된 액세스 솔루션을 용이하게 하는 AWS Tools for PowerShell의 SAML(Security Assertion Markup Language) 지원에 대해 설명합니다.

AWS Tools for PowerShell의 SAML 지원 덕분에 사용자에게 AWS 서비스에 대한 연동 액세스를 제공할 수 있습니다. SAML은 서비스 간에, 특히 자격 증명 공급자(Active Directory Federation Services 등)와 서비스 공급자(AWS) 간에, 사용자 인증 및 권한 부여 데이터를 전송하기 위한 XML 기반의 개방형 표준 형식입니다. SAML과 그 작동 방식에 대한 자세한 내용은 Wikipedia의 SAML 또는 Organization for the Advancement of Structured Information Standards(OASIS) 웹 사이트의 SAML Technical Specifications를 참조하십시오. AWS Tools for PowerShell의 SAML 지원은 SAML 2.0과 호환됩니다.

필수 조건

처음으로 SAML 지원을 사용하려면 먼저 다음 요소가 제 위치에 준비되어 있어야 합니다.

  • 조직 자격 증명만 사용하여 콘솔 액세스를 위해 AWS 계정과 올바르게 통합된 연동 자격 증명 솔루션입니다. Active Directory Federation Services에 대해 특별히 이 작업을 수행하는 방법에 대한 자세한 내용은 IAM 사용 설명서SAML 2.0 연동 정보 및 블로그 게시물인 Windows Active Directory, AD FS 및 SAML 2.0을 사용해 AWS에 대한 연동 활성화를 참조하세요. 블로그 게시물에서는 AD FS 2.0을 설명하지만, AD FS 3.0을 실행 중인 경우라도 단계는 비슷합니다.

  • 버전 3.1.31.0 이상의 AWS Tools for PowerShell가 로컬 워크스테이션에 설치되어 있어야 합니다.

자격 증명 연동 사용자가 AWS 서비스 API에 대한 연동된 액세스 권한을 얻는 방법

다음 프로세스에서는 Active Directory(AD) 사용자가 AD FS에 의해 연동되어 AWS 리소스에 대한 액세스 권한을 얻는 방법을 개략적으로 설명합니다.

  1. 연동 사용자 컴퓨터의 클라이언트는 AD FS에 대해 인증합니다.

  2. 인증에 성공하면 AD FS는 사용자에게 SAML 어설션을 보냅니다.

  3. 사용자의 클라이언트는 SAML 연동 요청의 일환으로 AWS Security Token Service(STS)에 SAML 어설션을 보냅니다.

  4. STS는 사용자가 수임할 수 있는 역할에 대한 AWS 임시 자격 증명이 포함된 SAML 응답을 반환합니다.

  5. 사용자는 AWS Tools for PowerShell에서 이루어진 요청에 이러한 임시 자격 증명을 포함시켜 AWS 서비스 API에 액세스합니다.

AWS Tools for PowerShell에서 SAML 지원이 작동하는 방식

이 단원에서는 AWS Tools for PowerShell cmdlet에서 사용자에 대한 SAML 기반 자격 증명 연동의 구성을 활성화하는 방법을 설명합니다.

  1. AWS Tools for PowerShell은 Windows 사용자의 현재 자격 증명을 사용하여, 또는 (사용자가 AWS로의 호출을 위해 자격 증명을 필요로 하는 cmdlet을 실행할 때는) 대화식으로 AD FS에 대해 인증합니다.

  2. AD FS에서 사용자를 인증합니다.

  3. AD FS는 어설션을 포함하는 SAML 2.0 인증 응답을 생성합니다. 어설션의 목적은 사용자에 대한 정보를 식별하고 제공하는 것입니다. AWS Tools for PowerShell는 SAML 어설션으로부터 사용자의 인증된 역할 목록을 추출합니다.

  4. AWS Tools for PowerShell은 AssumeRoleWithSAMLRequest API 호출을 통해 요청된 역할의 Amazon 리소스 이름(ARN)을 포함하여 SAML 요청을 STS로 전달합니다.

  5. SAML 요청이 유효하면 STS는 AWS, AccessKeyId, SecretAccessKeySessionToken을 포함하는 응답을 반환합니다. 이러한 자격 증명은 3,600초(1시간) 동안 유효합니다.

  6. 이제 사용자는 사용자의 역할에 액세스 권한이 부여된 모든 AWS 서비스 API에서 사용할 수 있는 유효한 자격 증명을 가집니다. AWS Tools for PowerShell은 모든 후속 AWS API 호출에 대해 이러한 자격 증명을 자동으로 적용하고, 자격 증명이 만료되면 자동으로 갱신합니다.

    참고

    자격 증명이 만료되어 새 자격 증명이 필요하면 AWS Tools for PowerShell은 AD FS에서 자동으로 재인증을 수행하여 이후 1시간 동안 유효한 새 자격 증명을 획득합니다. 도메인에 조인된 계정의 사용자의 경우, 이 프로세스가 자동으로 수행됩니다. 도메인에 조인되지 않은 계정의 경우, AWS Tools for PowerShell에서는 재인증 전에 자격 증명을 입력하라는 메시지가 사용자에게 표시됩니다.

PowerShell SAML 구성 Cmdlet 사용 방법

AWS Tools for PowerShell에는 SAML 지원을 제공하는 새로운 cmdlet 두 개가 포함되어 있습니다.

  • Set-AWSSamlEndpoint는 AD FS 엔드포인트를 구성하고 표시 이름을 엔드포인트에 할당하며 원할 경우 엔드포인트의 인증 유형을 설명합니다.

  • Set-AWSSamlRoleProfileSet-AWSSamlEndpoint cmdlet에 제공했던 표시 이름을 지정하여 AD FS 엔드포인트와 연결할 사용자 계정 프로파일을 만들거나 편집합니다. 각 역할 프로파일은 사용자에게 수행할 수 있는 권한이 부여된 단일 역할로 매핑됩니다.

    AWS 자격 증명 프로파일과 마찬가지로, 표시 이름을 역할 프로파일에 할당할 수 있습니다. 동일한 표시 이름을 Set-AWSCredential cmdlet과 함께 사용하거나, AWS 서비스 API를 호출하는 cmdlet에 대해 -ProfileName 파라미터의 값으로 사용할 수 있습니다.

새 AWS Tools for PowerShell 세션을 엽니다. PowerShell 3.0 이상을 실행 중인 경우, cmdlet 중 하나를 실행할 때 AWS Tools for PowerShell 모듈을 자동으로 가져옵니다. PowerShell 2.0을 실행하는 경우 다음 예제와 같이 ```Import-Module`` cmdlet을 실행하여 모듈을 수동으로 가져와야 합니다.

PS > Import-Module "C:\Program Files (x86)\AWS Tools\PowerShell\AWSPowerShell\AWSPowerShell.psd1"

Set-AWSSamlEndpointSet-AWSSamlRoleProfile cmdlet을 실행하는 방법

  1. 먼저 AD FS 시스템에 대한 엔드포인트 설정을 구성합니다. 가장 간단한 방법은 이 단계처럼 변수에 엔드포인트를 저장하는 것입니다. 계정 ID 및 AD FS 호스트 이름 자리 표시자를 자신의 고유 계정 ID와 AD FS 호스트 이름으로 대체해야 합니다. Endpoint 파라미터에 AD FS 호스트 이름을 지정합니다.

    PS > $endpoint = "https://adfs.example.com/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices"
  2. 엔드포인트 설정을 만들려면 Set-AWSSamlEndpoint cmdlet을 실행하여 AuthenticationType 파라미터에 대해 올바른 값을 지정합니다. 유효한 값으로는 Basic, Digest, Kerberos, NegotiateNTLM이 있습니다. 이 파라미터를 지정하지 않는 경우 기본값은 Kerberos입니다.

    PS > $epName = Set-AWSSamlEndpoint -Endpoint $endpoint -StoreAs ADFS-Demo -AuthenticationType NTLM

    이 cmdlet은 -StoreAs 파라미터를 사용하여 지정한 표시 이름을 반환하므로 다음 줄에서 Set-AWSSamlRoleProfile을 실행할 때 이 이름을 사용할 수 있습니다.

  3. 이제 Set-AWSSamlRoleProfile cmdlet을 실행하여 AD FS 자격 증명 공급자를 대상으로 인증을 수행하고 사용자에게 수행할 수 있는 권한이 부여된 역할 세트(SAML 어설션에서)를 가져올 수 있습니다.

    Set-AWSSamlRoleProfile cmdlet은 반환되는 역할 세트를 사용하여 사용자에게 지정된 프로파일과 연결할 역할을 선택하라는 메시지를 표시하거나, 파라미터에 제공된 역할 데이터가 존재하는지 확인합니다(없는 경우 사용자에게 선택하라는 메시지가 표시됨). 사용자에게 한 역할에만 권한이 부여된 경우 cmdlet은 사용자에게 메시지를 표시하지 않고 해당 역할을 프로파일과 자동으로 연결합니다. 도메인에 조인된 사용을 위해 프로파일을 설정할 때는 자격 증명을 제공할 필요가 없습니다.

    PS > Set-AWSSamlRoleProfile -StoreAs SAMLDemoProfile -EndpointName $epName

    또는 도메인에 조인되지 않은 계정의 경우, 다음 행과 같이, Active Directory 자격 증명을 제공하고 나서 사용자에게 액세스 권한이 부여된 AWS 역할을 선택할 수 있습니다. 이는 조직 내에서 역할을 구분하기 위해 여러 Active Directory 사용자 계정이 있는 경우(예를 들면 관리 기능)에 유용합니다.

    PS > $credential = Get-Credential -Message "Enter the domain credentials for the endpoint" PS > Set-AWSSamlRoleProfile -EndpointName $epName -NetworkCredential $credential -StoreAs SAMLDemoProfile
  4. 어느 경우든, Set-AWSSamlRoleProfile cmdlet은 프로파일에 저장되어야 할 역할을 선택하라는 메시지를 표시합니다. 다음 예에서는 ADFS-DevADFS-Production이라는 두 가지 사용 가능한 역할을 보여 줍니다. IAM 역할은 AD FS 관리자에 의해 AD 로그인 자격 증명과 연결됩니다.

    Select Role Select the role to be assumed when this profile is active [1] 1 - ADFS-Dev [2] 2 - ADFS-Production [?] Help (default is "1"):

    또는 RoleARN, PrincipalARNNetworkCredential 파라미터(선택 사항)를 입력하여 프롬프트 메시지 없이 역할을 지정할 수 있습니다. 지정된 역할이 인증 시 반환된 어설션에 나열되어 있지 않으면 사용자에게 사용 가능한 역할 중에서 선택하라는 메시지가 표시됩니다.

    PS > $params = @{ "NetworkCredential"=$credential, "PrincipalARN"="{arn:aws:iam::012345678912:saml-provider/ADFS}", "RoleARN"="{arn:aws:iam::012345678912:role/ADFS-Dev}" } PS > $epName | Set-AWSSamlRoleProfile @params -StoreAs SAMLDemoProfile1 -Verbose
  5. 다음 코드에서처럼 StoreAllRoles 파라미터를 추가하여 단일 명령을 통해 모든 역할에 대한 프로파일을 만들 수 있습니다. 역할 이름이 프로파일 이름으로 사용됩니다.

    PS > Set-AWSSamlRoleProfile -EndpointName $epName -StoreAllRoles ADFS-Dev ADFS-Production

역할 프로파일을 사용하여 AWS 자격 증명이 필요한 cmdlet을 실행하는 방법

AWS 자격 증명이 필요한 cmdlet을 실행하기 위해 AWS 공유 자격 증명 파일에 정의된 역할 프로파일을 사용할 수 있습니다. 역할 프로파일의 이름을 Set-AWSCredential에 입력하여(또는 AWS Tools for PowerShell에 ProfileName 파라미터 값 형태로 입력하여) 프로파일에 설명된 역할에 대해 임시 AWS 자격 증명을 자동으로 가져옵니다.

한 번에 역할 프로파일 하나만 사용할 수 있지만 셸 세션 내에서 프로파일 간에 전환할 수 있습니다. Set-AWSCredential cmdlet은 인증하지 않고 실행 시 자체적으로 자격 증명을 가져옵니다. 이 cmdlet은 사용자가 지정된 역할 프로파일을 사용하고자 한다고 기록합니다. AWS 자격 증명이 필요한 cmdlet을 실행할 때까지는 인증이나 자격 증명 요청이 발생하지 않습니다.

이제 SAMLDemoProfile 프로파일을 통해 획득한 임시 AWS 자격 증명을 사용하여 AWS 서비스 API에서 작업을 수행할 수 있습니다. 다음 단원에서는 역할 프로파일 사용법 예를 보여 줍니다.

예제 1: Set-AWSCredential을 사용하여 기본 역할 지정

이 예제는 Set-AWSCredential을 사용하여 AWS Tools for PowerShell 세션의 기본 역할을 설정합니다. 그러고 나면 자격 증명이 필요하고 지정된 역할에 의해 권한이 부여된 cmdlet을 실행할 수 있습니다. 이 예제는 미국 서부(오레곤) 리전에서 Set-AWSCredential cmdlet을 사용하여 지정한 프로파일과 연결되어 있는 모든 Amazon Elastic Compute Cloud 인스턴스를 나열합니다.

PS > Set-AWSCredential -ProfileName SAMLDemoProfile PS > Get-EC2Instance -Region us-west-2 | Format-Table -Property Instances,GroupNames Instances GroupNames --------- ---------- {TestInstance1} {default} {TestInstance2} {} {TestInstance3} {launch-wizard-6} {TestInstance4} {default} {TestInstance5} {} {TestInstance6} {AWS-OpsWorks-Default-Server}

예제 2: PowerShell 세션 중 역할 프로파일 변경

이 예제는 SAMLDemoProfile 프로파일과 연결된 역할의 AWS 계정에서 사용 가능한 모든 Amazon S3 버킷을 나열합니다. 이 예제는 AWS Tools for PowerShell 세션 초기에 다른 프로파일을 사용했을 수도 있지만 이를 지원하는 cmdlet을 사용하여 -ProfileName 파라미터에 다른 값을 지정함으로써 프로파일을 변경할 수 있다는 것을 보여줍니다. 이 작업은 PowerShell 명령줄을 통해 Amazon S3을 관리하는 관리자에게 일반적인 작업입니다.

PS > Get-S3Bucket -ProfileName SAMLDemoProfile CreationDate BucketName ------------ ---------- 7/25/2013 3:16:56 AM mybucket1 4/15/2015 12:46:50 AM mybucket2 4/15/2015 6:15:53 AM mybucket3 1/12/2015 11:20:16 PM mybucket4

Get-S3Bucket cmdlet은 Set-AWSSamlRoleProfile cmdlet을 실행하여 생성된 프로파일의 이름을 지정합니다. 이 명령은 (예를 들면 Set-AWSCredential cmdlet을 실행하여) 세션의 조기에 역할 프로파일을 설정했으며 Get-S3Bucket cmdlet에 대해 다른 역할 프로파일을 사용하려는 경우에 유용할 수 있습니다. 프로파일 관리자는 임시 자격 증명을 Get-S3Bucket cmdlet에 사용할 수 있도록 설정합니다.

자격 증명은 1시간(STS에서 적용되는 제한)이 경과된 후 만료되지만, AWS Tools for PowerShell는 도구가 현재 자격 증명이 만료되었음을 감지할 때 새 SAML 어설션을 요청하여 자격 증명을 자동으로 새로 고칩니다.

도메인에 조인된 사용자의 경우, 인증 시 현재 사용자의 Windows 자격 증명이 사용되므로 이 프로세스가 중단 없이 발생합니다. 도메인에 조인되지 않은 사용자 계정의 경우, AWS Tools for PowerShell에서 사용자 암호를 요청하는 PowerShell 자격 증명 프롬프트가 표시됩니다. 사용자는 사용자를 재인증하고 새 어설션을 가져오는 데 사용되는 자격 증명을 제공합니다.

예제 3: 리전의 인스턴스 가져오기

다음 예제는 ADFS-Production 프로파일에서 사용된 계정과 연결된 아시아 태평양(시드니) 리전의 모든 Amazon EC2 인스턴스를 나열합니다. 이 명령은 리전의 모든 Amazon EC2 인스턴스를 반환하는 유용한 명령입니다.

PS > (Get-Ec2Instance -ProfileName ADFS-Production -Region ap-southeast-2).Instances | Select InstanceType, @{Name="Servername";Expression={$_.tags | where key -eq "Name" | Select Value -Expand Value}} InstanceType Servername ------------ ---------- t2.small DC2 t1.micro NAT1 t1.micro RDGW1 t1.micro RDGW2 t1.micro NAT2 t2.small DC1 t2.micro BUILD

추가 읽기 자료

연동 API 액세스를 구현하는 방법에 대한 일반적인 정보는 How to Implement a General Solution for Federated API/CLI Access Using SAML 2.0을 참조하십시오.

질문이나 의견이 있는 경우에는 PowerShell 스크립팅 또는 .NET 개발을 위한 AWS 개발자 포럼을 참조하세요.