SAML 공급자를 자격 증명 풀 IdP로 설정 - Amazon Cognito

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

SAML 공급자를 자격 증명 풀 IdP로 설정

Amazon Cognito는 보안 어설션 마크업 언어 2.0 (SAML 2.0IdPs) 을 통해 자격 증명 공급자 () 를 통한 인증을 지원합니다. Amazon Cognito에서 SAML을 지원하는 IdP를 사용하여 사용자를 위한 간단한 온보딩 흐름을 제공할 수 있습니다. SAML을 지원하는 IdP는 사용자가 수임할 수 있는 IAM 역할을 지정합니다. 이렇게 하면 사용자마다 서로 다른 권한 집합을 받을 수 있습니다.

SAML IdP에 맞게 자격 증명 풀 구성

다음 단계에서는 자격 증명 풀에서 SAML 기반 IdP를 사용하도록 구성하는 방법을 설명합니다.

참고

자격 증명 풀에서 SAML 공급자를 지원하도록 구성하기 전에 먼저 IAM 콘솔에서 SAML IdP를 구성합니다. 자세한 내용은 IAM 사용 설명서에서 AWS와 서드 파티 SAML 솔루션 공급자 통합을 참조하세요.

SAML ID 제공업체(idP)를 추가하려면
  1. Amazon Cognito 콘솔에서 자격 증명 풀을 선택합니다. 자격 증명 풀을 선택합니다.

  2. 사용자 액세스 탭을 선택합니다.

  3. ID 제공업체 추가를 선택합니다.

  4. SAML을 선택합니다.

  5. IAM에서 SAML 자격 증명 공급자를 선택하십시오. IdPs AWS 계정 새 SAML 공급자를 추가하려면 새 공급자 생성을 선택하여 IAM 콘솔로 이동합니다.

  6. Amazon Cognito가 이 공급자를 통해 인증된 사용자에게 보안 인증을 발급할 때 요청하는 역할을 설정하려면 역할 설정을 구성하세요.

    1. 인증된 역할을 구성할 때 설정한 기본 역할을 이 IdP의 사용자에게 할당하거나 규칙을 사용하여 역할 선택을 선택할 수 있습니다.

      1. 규칙을 사용하여 역할 선택을 선택한 경우 사용자 인증의 소스 클레임, 클레임 비교 기준으로 사용할 운영자, 이 역할 선택과 일치하도록 하는 , 역할 할당이 일치할 때 할당할 역할을 입력합니다. 다른 조건에 따라 추가 규칙을 생성하려면 다른 항목 추가를 선택합니다.

      2. 역할 해결을 선택합니다. 사용자의 클레임이 규칙과 일치하지 않는 경우 보안 인증을 거부하거나 인증된 역할의 보안 인증을 발급할 수 있습니다.

  7. Amazon Cognito가 이 공급자를 통해 인증한 사용자에게 보안 인증을 발급할 때 할당하는 보안 주체 태그를 변경하려면 액세스 제어를 위한 속성을 구성합니다.

    1. 보안 주체 태그를 적용하지 않으려면 비활성을 선택합니다.

    2. sub 및 aud 클레임 기반 보안 주체 태그를 적용하려면 기본 매핑 사용을 선택합니다.

    3. 보안 주체 태그에 대한 속성의 자체 사용자 지정 스키마를 생성하려면 사용자 지정 매핑 사용을 선택합니다. 그런 다음 태그에 표시하려는 각 클레임에서 소싱하려는 태그 키를 입력합니다.

  8. 변경 사항 저장(Save changes)을 선택합니다.

SAML IdP 구성

SAML 공급자를 생성한 후에 SAML IdP에서 IdP와 AWS 간에 신뢰 당사자 신뢰를 추가하도록 구성합니다. 대부분의 IdPs 경우 IdP가 XML 문서에서 신뢰 당사자 정보와 인증서를 읽는 데 사용할 수 있는 URL을 지정할 수 있습니다. AWS의 경우 https://signin.aws.amazon.com/static/saml-metadata.xml을 사용할 수 있습니다. 다음 단계에서는 IdP의 SAML 어설션 응답이 AWS에 필요한 클레임을 채우도록 구성합니다. 클레임 구성에 대한 자세한 내용은 인증 응답을 위한 SAML 어설션 구성을 참조하세요.

SAML IdP가 SAML 메타데이터에 서명 인증서를 두 개 이상 포함하는 경우, 로그인 시 사용자 풀은 SAML 어설션이 SAML 메타데이터에 있는 인증서와 일치할 경우 유효하다고 판단합니다.

SAML로 사용자 역할 사용자 정의

Amazon Cognito Identity와 함께 SAML을 사용하면 최종 사용자에 맞게 역할을 사용자 지정할 수 있습니다. Amazon Cognito는 향상된 흐름을 SAML 기반 IdP를 통해서만 지원합니다. 자격 증명 풀에서 SAML 기반 IdP를 사용할 수 있도록 인증된 역할 또는 인증되지 않은 역할을 지정할 필요는 없습니다. https://aws.amazon.com/SAML/Attributes/Role 클레임 속성은 쉼표로 구분된 하나 이상의 역할 및 공급자 ARN 쌍을 지정합니다. 이는 사용자가 수임할 수 있는 역할입니다. SAML IdP가 IdP에서 얻을 수 있는 사용자 속성 정보를 기반으로 역할 속성을 채우도록 구성할 수 있습니다. SAML 어설션에서 여러 역할을 받으면 getCredentialsForIdentity를 호출하는 동안 선택적 customRoleArn 파라미터를 채웁니다. 역할이 SAML 어설션의 클레임에 있는 역할과 일치하는 경우 사용자가 이 customRoleArn을 수임합니다.

SAML IdP를 사용하여 사용자 인증

SAML 기반 IdP와 페더레이션하려면 사용자가 로그인을 시작하는 URL을 결정합니다. AWS 페더레이션은 IDP 시작 로그인을 사용합니다. AD FS 2.0에서 URL 형식은 https://<fqdn>/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices입니다.

Amazon Cognito에서 SAML IdP에 대한 지원을 추가하려면 먼저 iOS나 Android 애플리케이션에서 SAML 자격 증명 공급자로 사용자를 인증합니다. SAML IdP와 통합하고 인증하는 데 사용하는 코드는 SAML 공급자에 따라 다릅니다. 사용자가 인증된 후에 Amazon Cognito API를 사용하여 Amazon Cognito Identity에 결과 SAML 어설션을 제공할 수 있습니다.

자격 증명 풀 API 요청의Logins 맵에서 SAML 어설션을 반복하거나 재생할 수 없습니다. 재생된 SAML 어설션에는 이전 API 요청의 ID와 중복되는 어설션 ID가 있습니다. Logins맵에서 SAML 어설션을 받아들일 수 있는 API 작업에는 GetId,,, GetCredentialsForIdentityID가 포함됩니다. GetOpenIdTokenGetOpenTokenForDeveloperIdentity 자격 증명 풀 인증 흐름에서 API 요청당 SAML 어설션 ID를 한 번 재생할 수 있습니다. 예를 들어 GetId 요청과 후속 GetCredentialsForIdentity 요청에는 동일한 SAML 어설션을 제공할 수 있지만 두 번째 GetId 요청에서는 제공할 수 없습니다.

Android

Android SDK를 사용하는 경우 다음과 같이 로그인 맵을 SAML 어설션으로 채울 수 있습니다.

Map logins = new HashMap(); logins.put("arn:aws:iam::aws account id:saml-provider/name", "base64 encoded assertion response"); // Now this should be set to CognitoCachingCredentialsProvider object. CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(context, identity pool id, region); credentialsProvider.setLogins(logins); // If SAML assertion contains multiple roles, resolve the role by setting the custom role credentialsProvider.setCustomRoleArn("arn:aws:iam::aws account id:role/customRoleName"); // This should trigger a call to the Amazon Cognito service to get the credentials. credentialsProvider.getCredentials();

iOS

iOS SDK를 사용하는 경우 다음과 같이 AWSIdentityProviderManager에서 SAML 어설션을 제공할 수 있습니다.

- (AWSTask<NSDictionary<NSString*,NSString*> *> *) logins { //this is hardcoded for simplicity, normally you would asynchronously go to your SAML provider //get the assertion and return the logins map using a AWSTaskCompletionSource return [AWSTask taskWithResult:@{@"arn:aws:iam::aws account id:saml-provider/name":@"base64 encoded assertion response"}]; } // If SAML assertion contains multiple roles, resolve the role by setting the custom role. // Implementing this is optional if there is only one role. - (NSString *)customRoleArn { return @"arn:aws:iam::accountId:role/customRoleName"; }