IAM 자습서: AWS CloudFormation 템플릿을 사용하여 SAML ID 제공업체(idP) 및 SAML 페더레이션 IAM 역할 생성
SAML 페더레이션 및 해당 기능에 익숙해질 수 있도록 AWS CloudFormation 템플릿을 사용하여 SAML ID 제공업체(idP) 및 관련 페더레이션 IAM 역할을 설정합니다. 이 자습서에서는 단일 스택에서 2가지 리소스를 모두 생성하는 방법을 보여줍니다.
템플릿은 SAML 제공업체를 신뢰하는 IAM 역할과 함께, AWS 리소스에 대한 페더레이션 액세스에 사용할 수 있는 SAML IdP를 생성합니다. 외부 IdP에서 인증된 사용자는 이 역할을 수임하여 AWS 리소스에 액세스할 수 있습니다.
배포된 리소스는 다음 항목으로 이루어져 있습니다.
-
SAML IdP - IdP의 메타데이터 문서로 구성됩니다.
-
페더레이션 IAM 역할 - SAML IdP를 신뢰하며, 인증된 사용자가 수임할 수 있습니다.
-
구성 가능한 관리형 정책 - 역할에 연결하여 특정 권한을 부여할 수 있습니다.
사전 조건
이 자습서에서는 다음을 이미 완료했다고 가정합니다.
-
이 자습서에서 IdP의 SAML 메타데이터 XML 파일의 형식을 지정하는 데 사용되는 Python 명령을 실행할 수 있도록 로컬 시스템에 설치된 Python 3.6 이상 버전.
-
XML 파일로 저장된 외부 IdP의 SAML 메타데이터 문서.
AWS CloudFormation을 사용하여 SAML IdP 및 역할 생성
SAML IdP 및 페더레이션 역할을 생성하려면 CloudFormation 템플릿을 생성하고 이를 사용하여 2가지 리소스가 모두 포함된 스택을 생성합니다.
템플릿 생성
우선 CloudFormation 템플릿을 만듭니다.
-
템플릿 섹션에서 JSON 또는 YAML 탭의 복사 아이콘을 클릭하여 템플릿 콘텐츠를 복사합니다.
-
템플릿 콘텐츠를 새 파일에 붙여 넣습니다.
-
파일을 로컬에 저장합니다.
스택 생성
다음으로, 저장한 템플릿을 사용하여 CloudFormation 스택을 프로비저닝합니다.
-
AWS CloudFormation 콘솔(https://console.aws.amazon.com/cloudformation
)을 엽니다. -
스택 페이지의 스택 생성에서 새 리소스 사용(표준)을 선택합니다.
-
템플릿을 지정합니다.
-
사전 조건에서 기존 템플릿 선택을 선택합니다.
-
템플릿 지정에서 템플릿 파일 업로드를 선택합니다.
-
파일 선택을 선택하고 템플릿 파일로 이동한 후 해당 파일을 선택합니다.
-
다음을 선택합니다.
-
-
다음과 같은 스택 세부 정보를 지정합니다.
-
스택 이름을 입력합니다.
-
IdentityProviderName의 경우 이 값을 비워 두어 스택 이름을 기반으로 이름을 자동 생성하거나, SAML IdP의 사용자 지정 이름을 입력할 수 있습니다.
예:
CompanyIdP
또는EnterpriseSSO
-
IdentityProviderSAMLMetadataDocument의 경우 이 필드에 붙여 넣기 전에 SAML 메타데이터 XML 파일의 형식을 한 줄로 지정해야 합니다. 이렇게 해야 하는 이유는 CloudFormation 콘솔에서 콘솔 파라미터를 전달할 때 XML 콘텐츠의 형식을 한 줄로 지정해야 하기 때문입니다.
아래의 Python 명령을 사용하여 XML 파일의 형식을 다시 지정합니다.
python3 -c "import sys, re; content=open(sys.argv[1]).read(); print(re.sub(r'>\s+<', '><', content.replace('\n', '').replace('\r', '').strip()))"
saml-metadata.xml
참고
IdP의 SAML 메타데이터 문서는 콘솔 파라미터 입력을 위해 한 줄로 형식을 지정해야 합니다. Python 명령은 줄 바꿈과 추가 공백을 제거하여 모든 원본 콘텐츠와 구조를 그대로 유지하면서 필요한 형식을 생성합니다.
Python 명령에서 출력을 복사한 후 이를 IdentityProviderSAMLMetadataDocument 필드에 붙여 넣습니다.
형식이 지정된 SAML 메타데이터 문서의 예시(간략화함):
<?xml version="1.0" encoding="UTF-8"?><md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" entityID="https://portal.sso.example.com/saml/assertion/CompanyIdP"><md:IDPSSODescriptor WantAuthnRequestsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"><md:KeyDescriptor use="signing"><ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:X509Data><ds:X509Certificate>MIIDXTCCAkWgAwIBAgIJAJC1HiIAZAiIMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV...</ds:X509Certificate></ds:X509Data></ds:KeyInfo></md:KeyDescriptor><md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://portal.sso.example.com/saml/logout/CompanyIdP"/><md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</md:NameIDFormat><md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://portal.sso.example.com/saml/assertion/CompanyIdP"/></md:IDPSSODescriptor></md:EntityDescriptor>
-
RoleName의 경우 이 값을 비워 두어 스택 이름을 기반으로 이름을 자동 생성하거나, 페더레이션 IAM 역할의 사용자 지정 이름을 입력할 수 있습니다.
예:
SAML-Developer-Access
또는SAML-ReadOnly-Role
-
다른 파라미터의 경우 기본값을 적용하거나, 요구 사항에 따라 직접 입력합니다.
-
IdentityProviderAddPrivateKey - SAML 어설션의 암호 해독을 위한 선택적 프라이빗 키
-
IdentityProviderAssertionEncryptionMode - SAML 어설션의 암호화 모드
예시 값:
Allowed
,Required
, 또는 암호화가 없는 경우 비워 둠 -
RoleSessionDuration - 최대 세션 지속 시간(초)(3,600~43,200, 기본값 7,200)
예:
14400
(4시간) -
RolePermissionsBoundary - 권한 경계 정책의 선택적 ARN
예시:
arn:aws:iam::123456789012:policy/DeveloperBoundary
-
RolePath - IAM 역할의 경로(기본값은 /)
예시:
/saml-roles/
-
RoleManagedPolicy1-5 - 연결할 최대 5개의 관리형 정책의 선택적 ARN
RoleManagedPolicy1의 예:
arn:aws:iam::aws:policy/ReadOnlyAccess
RoleManagedPolicy2의 예:
arn:aws:iam::123456789012:policy/CustomPolicy
-
-
다음을 선택합니다.
-
-
스택 옵션을 구성합니다.
-
스택 실패 옵션에서 새로 생성된 모든 리소스 삭제를 선택합니다.
참고
이 옵션을 선택하면 스택 생성에 실패하더라도 삭제 정책에서 보존하도록 지정하는 리소스에 대해서는 요금이 청구되지 않습니다.
-
모든 기타 기본값을 적용합니다.
-
기능에서 CloudFormation이 계정에 IAM 리소스를 생성할 수 있음을 승인하는 확인란을 선택합니다.
-
다음을 선택합니다.
-
-
스택 세부 정보를 검토하고 제출을 선택합니다.
AWS CloudFormation이 스택을 생성합니다. 스택 생성이 완료되면 스택 리소스를 사용할 준비가 된 것입니다. 스택 세부 정보 페이지의 리소스 탭을 사용하여 계정에 프로비저닝된 리소스를 볼 수 있습니다.
스택은 출력 탭에서 볼 수 있는 다음과 같은 값을 출력합니다.
-
RoleARN: 생성된 IAM 역할의 ARN(예:
arn:aws:iam::123456789012:role/SAML-Developer-Access
또는 자동 생성된 이름을 사용하는 경우arn:aws:iam::123456789012:role/stack-name-a1b2c3d4
). -
IdentityProviderARN: 생성된 SAML IdP의 ARN(예:
arn:aws:iam::123456789012:saml-provider/CompanyIdP
).
역할 수임을 위해 적절한 SAML 속성을 전송할 수 있도록 IdP를 구성할 경우 이러한 2가지 ARN이 모두 필요합니다.
SAML 페더레이션 테스트
SAML IdP 및 페더레이션 역할이 생성되면 페더레이션 설정을 테스트할 수 있습니다.
-
https://console.aws.amazon.com/iam/
에서 IAM 콘솔을 엽니다. -
탐색 창에서 [자격 증명 공급자(Identity providers)]를 선택합니다.
새로 생성된 SAML IdP가 목록에 표시됩니다.
-
세부 정보를 보려면 IdP 이름을 선택합니다.
IdP 세부 정보 페이지에서 SAML 메타데이터 문서 및 기타 구성 세부 정보를 볼 수 있습니다.
-
탐색 창에서 Roles를 선택합니다.
-
새로 생성된 페더레이션 역할을 찾아 선택합니다.
역할 세부 정보 페이지에서 SAML IdP가 이 역할을 수임하도록 허용하는 신뢰 정책을 볼 수 있습니다.
-
신뢰 관계 탭을 선택하여 신뢰 정책을 검토할 수 있습니다.
신뢰 정책에는 SAML IdP를 신뢰하여 이 역할을 수임할 수 있도록 하며, SAML 대상(
SAML:aud
)이https://signin.aws.amazon.com/saml
과 일치해야 한다는 조건이 포함된다는 내용이 표시되어야 합니다.
정리: 리소스 삭제
마지막 단계로, 스택을 삭제하고 해당 스택에 포함된 리소스를 삭제합니다.
-
AWS CloudFormation 콘솔을 엽니다.
-
스택 페이지에서 템플릿을 통해 생성한 스택을 선택하고 삭제를 선택한 다음, 삭제를 확인합니다.
CloudFormation은 스택 및 해당 스택에 포함된 모든 리소스의 삭제를 시작합니다.
CloudFormation 템플릿 세부 정보
리소스
이 자습서에서 AWS CloudFormation 템플릿은 계정에 다음과 같은 리소스를 생성합니다.
-
AWS::IAM::SAMLProvider
: AWS와 외부 IdP 간에 신뢰를 설정하는 SAML IdP입니다. -
AWS::IAM::Role
: SAML IdP를 통해 인증된 사용자가 수임할 수 있는 페더레이션 IAM 역할입니다.
구성
템플릿에는 다음과 같은 구성 가능한 파라미터가 포함되어 있습니다.
-
IdentityProviderName - SAML IdP의 이름(자동 생성된 이름의 경우 비워둠)
-
IdentityProviderSAMLMetadataDocument - IdP의 SAML 메타데이터 문서(필수)
-
IdentityProviderAddPrivateKey - SAML 어설션의 암호 해독을 위한 선택적 프라이빗 키
-
IdentityProviderAssertionEncryptionMode - SAML 어설션의 암호화 모드
-
RoleName - IAM 역할의 이름(자동 생성된 이름의 경우 비워둠)
-
RolePath - IAM 역할의 경로(기본값은 /)
-
RolePermissionsBoundary - 권한 경계 정책의 선택적 ARN
-
RoleSessionDuration - 최대 세션 지속 시간(초)(3,600~43,200, 기본값 7,200)
-
RoleManagedPolicy1-5 - 연결할 최대 5개의 관리형 정책의 선택적 ARN
CloudFormation 템플릿
아래의 JSON 또는 YAML 코드를 별도의 파일로 저장하여 이 자습서의 CloudFormation 템플릿으로 사용하세요.