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

최종 업데이트 날짜: 2022년 12월 7일

페더레인션을 통해 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에 액세스할 수 있도록 임시 보안 인증을 받습니다.

페더레이션 사용자에게 액세스를 제공하려면 먼저 다음을 수행해야 합니다.

참고: 디렉터리 사용자에 대해 다중 인증(MFA)을 켜지 않은 경우에는 이 솔루션이 호환되지 않습니다.

해결 방법

ID 제공업체(IdP)가 통합 Windows 인증(IWA), NTLM 또는 Kerberos(AD FS 2.0의 기본값)를 사용하여 작동하도록 구성되어 있는 경우 솔루션 1을 참조하세요. IdP가 양식 기반 인증(AD FS 3.0 및 4.0의 기본값)을 사용하여 작동하도록 구성되어 있는 경우 솔루션 2를 참조하세요.

참고: 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: 양식 기반 인증을 사용하는 Python for AD FS(AD FS 3.0 및 4.0의 기본값)

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

pip install --upgrade boto beautifulsoup4 requests

2.    SAML 2.0을 사용하여 연동된 API/CLI 액세스를 위한 일반적인 솔루션을 구현한 다음 이 링크된 블로그 게시물의 4단계에 나와 있는 스크립트를 다운로드합니다.

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

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

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

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"
    }
  ]
}

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


결제 또는 기술 지원이 필요하세요?