AD FS를 사용하여 Active Directory 사용자에게 API 또는 AWS CLI에 대한 액세스 권한을 부여하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 5월 14일

연동을 통해 Active Directory 사용자의 AWS Management Console에 대한 액세스를 구성했습니다. Active Directory Federation Services(AD FS)를 사용하여 사용자에게 AWS CLI(명령줄 인터페이스)에 대한 동일한 액세스를 제공하려면 어떻게 해야 합니까?  

간략한 설명

SAML 2.0 연동 사용자가 AWS Management Console에 액세스할 수 있도록 한 경우, 프로그래밍 방식으로 액세스해야 하는 사용자에게는 액세스 키와 보안 키가 필요합니다. AWS Identity and Access Management(IAM) 사용자의 액세스 키 ID와 보안 액세스 키를 얻기 위해 AWS CLI를 구성하거나 AWS CLI에 액세스할 연동 사용자의 임시 자격 증명을 가져올 수 있습니다.

연동 사용자에게 액세스를 제공하려면 먼저 다음을 수행해야 합니다.

​해결 방법

IdP(자격 증명 공급자)가 IWA(통합 Windows 인증), NTLM 또는 Kerberos(AD FS 2.0의 기본값임)와 함께 사용하도록 구성된 경우 솔루션 1 또는 솔루션 2를 참조하십시오. IdP가 양식 기반 인증(AD FS 3.0 및 4.0의 기본값임)과 함께 사용하도록 구성된 경우 솔루션 3을 참조하십시오.

솔루션 1: IWA를 사용하는 AD FS용 PowerShell(PowerShell 2.0)

1.    다음 명령을 실행하여 Windows PowerShell 모듈을 가져옵니다.  

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

2.    다음과 유사한 명령을 실행하여 AD FS 엔드포인트에 대한 변수를 설정합니다.

> $Endpoint = 'https://adfs.example.com/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices'

참고: 여기에는 AD FS 로그인 페이지의 전체 URL과 AWS의 로그인 URN(Uniform Resource Name)이 포함됩니다.

3.    다음과 유사한 명령을 실행하여 SAML 엔드포인트를 설정합니다.  

> $EndpointName = Set-AWSSamlEndpoint -Endpoint "$Endpoint" -StoreAs 'ADFS-Login' -AuthenticationType NTLM

참고: 기본적으로 AD FS 2.0 AuthenticationType은 NTLM으로 설정됩니다. 위 AWS Tools Cmdlet에서 AuthenticationType에 대한 값을 지정하지 않으면 AWS Tools는 기본적으로 Kerberos를 사용합니다.

4.    저장된 엔드포인트 설정을 사용하여 AD FS IdP의 인증을 받은 후 다음 방법 중 하나를 사용하여 사용자가 위임할 수 있는 역할의 목록을 가져옵니다.

현재 워크스테이션에 로그인한 사용자의 자격 증명을 사용합니다.

> Set-AWSSamlRoleProfile -StoreAs 'SAMLUser' -EndpointName $EndpointName

또는

Active Directory 사용자의 자격 증명을 지정합니다.

> $Credential = Get-Credential -Message "Enter the domain credentials for the endpoint"
> Set-AWSSamlRoleProfile -EndpointName $EndpointName -NetworkCredential $credential -StoreAs 'SAMLUser'

5.    여러 역할을 사용할 수 있는 경우 위임하려는 역할을 선택하려는 메시지가 표시됩니다. 다음과 유사하게 터미널 세션에 영문자를 입력합니다.  

SAMLUser[A] A - 123456789012:role/ADFS-DevAdmin [B] B - 123456789012:role/ADFS-DevReadOnly [?] Help (default is "A"): A

6.    다음과 유사한 명령을 실행하여 연동된 자격 증명 및 지정된 프로파일을 통해 사용자가 AWS CLI에 액세스할 수 있는지 확인합니다.  

Get-IAMSAMLProviderList -ProfileName SAMLUser

솔루션 2: IWA를 사용하는 AD FS 2.0용 Python(AD FS 2.0의 기본값)

1.    Python에 다음 모듈을 설치합니다.  

pip install --upgrade boto beautifulsoup4 requests

2.    블로그 게시물, SAML 2.0 및 AD FS를 사용하여 연동 API 및 CLI 액세스를 구현하는 방법의 스크립트를 복사합니다.

3.    스크립트를 열고, 원하는 리전과 출력 형식을 설정하고, adfs.example.com을 사용자 URL로 대체한 후 AD FS 서버의 FQDN(정규화된 도메인 이름)을 입력합니다.

참고: AWS 자격 증명 파일에 대한 대체 파일 경로가 있는 경우 파일 경로를 지정합니다.  

region = 'eu-west-1'
    outputformat = 'json'
    awsconfigfile = '/.aws/credentials'
    idpentryurl = 'https://adfs.example.com/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices'

4.    변경 내용을 저장하고, 파일을 실행한 후 다음 필드가 나타나면 필드를 채웁니다.  

bob@Ubuntu64:~$ ./working_samlapi.py
   Username: bob@example.com
   Password: ***********

   Please choose the role you would like to assume:
   [ 0 ]:  arn:aws:iam::123456789012:role/ADFS-DevAdmin
   [ 1 ]:  arn:aws:iam::123456789012:role/ADFS-DevReadOnly

   Selection:  0

   ----------------------------------------------------------------
   Your new access key pair has been stored in the AWS configuration file /home/ec2-user/.aws/credentials under the saml profile.
   Note that it will expire at 2018-03-14T14:57:45Z.
   After this time, you may safely rerun this script to refresh your access key pair.
   To use this credential, call the AWS CLI with the --profile option (e.g. aws --profile saml ec2 describe-instances).
   ----------------------------------------------------------------

5.    성공적으로 연동된 후 명령에서 --profile 파라미터를 사용하여 새로 구성된 SAML 프로파일을 통해 명령을 실행합니다.  

 bob@Ubuntu64:~$ aws iam list-saml-providers --profile saml
   {
       "SAMLProviderList": [
           {
               "CreateDate": "2018-03-14T13:28:24Z",
               "ValidUntil": "2118-03-14T13:28:23Z",
               "Arn": "arn:aws:iam::123456789012:saml-provider/adfs"
           }
      ]
   }

솔루션 3: 양식 기반 인증을 사용하는 AD FS용 Python(AD FS 3.0 및 4.0의 기본값)

1.    Python에 다음 모듈을 설치합니다.  

pip install --upgrade boto beautifulsoup4 requests

2.    SAML 2.0을 사용하여 연동 API/CLI 액세스를 위한 일반 솔루션을 구현한 후 블로그 게시물의 4단계에서 스크립트를 다운로드합니다.

3.    솔루션 2: IWA를 사용하는 AD FS 2.0용 Python(AD FS 2.0의 기본값)의 3 ~ 5단계를 수행합니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?