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

최종 업데이트 날짜: 2021년 1월 5일

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

간략한 설명

SAML 2.0 연합된 사용자의 AWS Management Console 액세스를 활성화할 때 프로그래밍 방식으로 액세스해야 하는 사용자에게는 여전히 액세스 키와 보안 키가 필요합니다. AWS Identity and Access Management(IAM) 사용자의 액세스 키 ID와 보안 액세스 키를 얻으려면 AWS CLI를 구성하거나 AWS CLI에 액세스할 연동 사용자의 임시 자격 증명을 가져올 수 있습니다.

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

참고: 디렉터리 사용자에 대해 Multi-Factor Authentication(MFA)을 사용하도록 설정한 경우에는 이 솔루션이 호환되지 않습니다.

솔루션

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

참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우, 최신 버전의 AWS CLI를 사용하고 있는지 확인하십시오.

솔루션 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용 Python(AD FS 2.0의 기본값)

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

pip install --upgrade boto beautifulsoup4 requests

2.    블로그 게시물 How to implement federated API and CLI access using SAML 2.0 and AD FS의 스크립트를 복사합니다.

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단계를 수행합니다.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요합니까?