Amazon Cognito 자격 증명 풀에 대한 보안 모범 사례 - Amazon Cognito

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

Amazon Cognito 자격 증명 풀에 대한 보안 모범 사례

Amazon Cognito 자격 증명 풀은 애플리케이션에 대한 임시 AWS 자격 증명을 제공합니다. AWS 계정 에는 종종 애플리케이션 사용자에게 필요한 리소스와 프라이빗 백엔드 리소스가 모두 포함되어 있습니다. AWS 자격 증명을 구성하는 IAM 역할 및 정책은 이러한 리소스에 대한 액세스 권한을 부여할 수 있습니다.

자격 증명 풀 구성의 주요 모범 사례는 애플리케이션이 과도하거나 의도하지 않은 권한 없이 작업을 완료할 수 있도록 하는 것입니다. 보안 구성 오류를 방지하려면 프로덕션에 릴리스하려는 각 애플리케이션을 시작하기 전에 이러한 권장 사항을 검토하세요.

IAM 구성 모범 사례

게스트 또는 인증된 사용자가 애플리케이션에서 자격 증명 풀 자격 증명이 필요한 세션을 시작하면 애플리케이션이 IAM 역할에 대한 임시 AWS 자격 증명을 검색합니다. 자격 증명은 기본 역할, 자격 증명 풀 구성의 규칙에 의해 선택된 역할 또는 앱에서 선택된 사용자 지정 역할에 대한 것일 수 있습니다. 각 역할에 할당된 권한을 통해 사용자는 리소스에 액세스할 수 있습니다 AWS .

일반적인 IAM 모범 사례에 대한 자세한 내용은 AWS Identity and Access Management 사용 설명서의 IAM 모범 사례를 참조하세요.

IAM 역할에서 신뢰 정책 조건 사용

IAM 에서는 자격 증명 풀의 역할에 하나 이상의 신뢰 정책 조건이 있어야 합니다. 예를 들어 이 조건은 역할의 범위를 인증된 사용자로만 설정할 수 있습니다. AWS STS 또한 교차 계정 기본 인증 요청에는 cognito-identity.amazonaws.com:aud 및 라는 두 가지 특정 조건이 있어야 합니다cognito-identity.amazonaws.com:amr. 가장 좋은 방법은 자격 증명 풀 서비스 보안 주체 를 신뢰하는 모든 IAM 역할에 이러한 두 조건을 모두 적용하는 것입니다cognito-identity.amazonaws.com.

  • cognito-identity.amazonaws.com:aud: 자격 증명 풀 토큰의 aud 클레임은 신뢰할 수 있는 자격 증명 풀 ID와 일치해야 합니다.

  • cognito-identity.amazonaws.com:amr: 자격 증명 풀 토큰의 amr 클레임은 인증되거나 인증되지 않은 이어야 합니다. 이 조건에서는 인증되지 않은 게스트 또는 인증된 사용자에 대해서만 역할에 대한 액세스를 예약할 수 있습니다. 이 조건의 값을 추가로 구체화하여 와 같은 특정 공급자의 사용자로 역할을 제한할 수 있습니다graph.facebook.com.

다음 예제 역할 신뢰 정책은 다음 조건에서 역할에 대한 액세스 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" } } } ] }
자격 증명 풀과 관련된 요소
  • "Federated": "cognito-identity.amazonaws.com": 사용자는 자격 증명 풀에서 와야 합니다.

  • "cognito-identity.amazonaws.com:aud": "us-east-1:a1b2c3d4-5678-90ab-cdef-example11111": 사용자는 특정 자격 증명 풀 에서 와야 합니다us-east-1:a1b2c3d4-5678-90ab-cdef-example11111.

  • "cognito-identity.amazonaws.com:amr": "authenticated": 사용자를 인증해야 합니다. 게스트 사용자는 역할을 수임할 수 없습니다.

최소 권한 적용

인증된 액세스 또는 게스트 액세스에 대한 IAM 정책으로 권한을 설정하는 경우 특정 작업을 수행하는 데 필요한 특정 권한 또는 최소 권한 권한만 부여합니다. 다음 예제 IAM 정책은 역할에 적용될 때 Amazon S3 버킷의 단일 이미지 파일에 대한 읽기 전용 액세스 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket/assets/my_picture.jpg"] } ] }

자격 증명 풀 구성 모범 사례

자격 증명 풀에는 AWS 자격 증명 생성을 위한 유연한 옵션이 있습니다. 애플리케이션이 가장 안전한 방법으로 작동할 수 있는 경우 설계 단축키를 사용하지 마세요.

게스트 액세스의 영향 이해

인증되지 않은 게스트 액세스를 통해 사용자는 로그인하기 AWS 계정 전에 에서 데이터를 검색할 수 있습니다. 자격 증명 풀 ID를 알고 있는 사람은 누구나 인증되지 않은 자격 증명을 요청할 수 있습니다. 자격 증명 풀 ID는 기밀 정보가 아닙니다. 게스트 액세스를 활성화하면 인증되지 않은 세션에 부여하는 AWS 권한을 모든 사용자가 사용할 수 있습니다.

모범 사례는 게스트 액세스를 비활성화한 상태로 두고 사용자가 인증한 후에만 필요한 리소스를 가져오는 것입니다. 애플리케이션에 로그인하기 전에 리소스에 액세스해야 하는 경우 다음 예방 조치를 취하세요.

  • 인증되지 않은 역할 에 적용되는 자동 제한 사항을 숙지합니다.

  • 애플리케이션의 특정 요구 사항에 맞게 인증되지 않은 IAM 역할의 권한을 모니터링하고 조정합니다.

  • 특정 리소스에 대한 액세스 권한을 부여합니다.

  • 기본 인증되지 않은 IAM 역할의 신뢰 정책을 보호합니다.

  • 인터넷에 있는 모든 사람에게 IAM 역할의 권한을 부여할 것이라고 확신하는 경우에만 게스트 액세스를 활성화합니다.

기본적으로 향상된 인증 사용

기본(클래식) 인증을 통해 Amazon Cognito는 IAM 역할에 대한 선택을 앱에 위임합니다. 반면 향상된 흐름은 자격 증명 풀의 중앙 집중식 로직을 사용하여 IAM 역할을 결정합니다. 또한 IAM 권한에 대한 상한을 설정하는 범위 축소 정책을 통해 인증되지 않은 자격 증명에 대한 추가 보안을 제공합니다. 향상된 흐름은 개발자 노력 수준이 가장 낮은 가장 안전한 선택입니다. 이러한 옵션에 대한 자세한 내용은 자격 증명 풀 인증 흐름 섹션을 참조하세요.

기본 흐름은 자격 증명 API 요청의 역할 선택 및 조립에 들어가는 클라이언트 측 로직을 AWS STS 노출할 수 있습니다. 향상된 흐름은 자격 증명 풀 자동화 뒤에 있는 로직 및 스태프 역할 요청을 모두 숨깁니다.

기본 인증을 구성할 때 IAM 역할과 권한에 IAM 모범 사례를 적용합니다.

개발자 공급자를 안전하게 사용

개발자 인증 자격 증명은 서버 측 애플리케이션을 위한 자격 증명 풀의 기능입니다. 자격 증명 풀이 개발자 인증에 필요한 유일한 인증 증거는 자격 증명 풀 개발자의 AWS 자격 증명입니다. 자격 증명 풀은 이 인증 흐름에 표시되는 개발자-제공자 식별자의 유효성에 대한 제한을 적용하지 않습니다.

개발자 공급자는 다음 조건에서만 구현하는 것이 가장 좋습니다.

  • 개발자 인증 자격 증명 사용에 대한 책임을 생성하려면 개발자 공급자 이름과 식별자를 설계하여 인증 소스를 표시합니다. 예: "Logins" : {"MyCorp provider" : "[provider application ID]"}.

  • 수명이 긴 사용자 보안 인증 정보를 사용하지 마세요. EC2 인스턴스 프로파일Lambda 실행 역할 과 같은 서비스 연결 역할이 있는 자격 증명을 요청하도록 서버 측 클라이언트를 구성합니다.

  • 동일한 자격 증명 풀에서 내부 및 외부 신뢰 소스를 혼합하지 마세요. 개발자 공급자와 Single Sign-On(SSO) 공급자를 별도의 자격 증명 풀에 추가합니다.