액세스 제어에 속성 사용 - Amazon Cognito

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

액세스 제어에 속성 사용

액세스 제어의 속성은 속성 기반 액세스 제어()의 Amazon Cognito 자격 증명 풀 구현입니다ABAC. IAM 정책을 사용하여 사용자 속성에 따라 Amazon Cognito 자격 증명 풀을 AWS 통해 리소스에 대한 액세스를 제어할 수 있습니다. 이러한 속성은 소셜 및 기업 자격 증명 공급자에서 가져올 수 있습니다. 공급자의 액세스 및 ID 토큰 또는 SAML어설션 내의 속성을 IAM 권한 정책에서 참조할 수 있는 태그에 매핑할 수 있습니다.

Amazon Cognito 자격 증명 풀에서 기본 매핑을 선택하거나 사용자 지정 매핑을 생성할 수 있습니다. 기본 매핑을 사용하면 고정된 사용자 속성 집합을 기반으로 IAM 정책을 작성할 수 있습니다. 사용자 지정 매핑을 사용하면 IAM 권한 정책에서 참조되는 사용자 지정 사용자 속성 세트를 선택할 수 있습니다. Amazon Cognito 콘솔의 속성 이름은 IAM 권한 정책에 참조된 태그인 보안 주체 의 태그 키에 매핑됩니다.

예를 들어 무료 멤버십과 유료 멤버십이 있는 미디어 스트리밍 서비스를 보유하고 있다고 가정해 보겠습니다. 미디어 파일을 Amazon S3에 저장하고 무료 또는 프리미엄 태그로 태깅합니다. 액세스 제어를 위한 속성을 사용하여 사용자 프로필의 일부인 사용자 멤버십 수준에 따라 무료 및 유료 콘텐츠에 대한 액세스를 허용할 수 있습니다. 보안 주체가 IAM 권한 정책에 전달할 태그 키에 멤버십 속성을 매핑할 수 있습니다. 이렇게 하면 단일 권한 정책을 생성하고 콘텐츠 파일의 멤버십 수준 및 태그 값에 따라 프리미엄 콘텐츠에 대한 액세스를 조건부로 허용할 수 있습니다.

속성을 사용하여 액세스를 제어하면 여러 가지 장점이 있습니다.

  • 액세스 제어를 위한 속성을 사용하면 더 효율적으로 권한을 관리할 수 있습니다. 직무별로 여러 개의 정책을 만드는 대신 사용자 속성을 사용하는 기본 권한 정책을 만들 수 있습니다.

  • 애플리케이션에 리소스 또는 사용자를 추가하거나 제거할 때마다 정책을 업데이트할 필요가 없습니다. 권한 정책은 일치하는 사용자 속성을 가진 사용자에게만 액세스 권한을 부여합니다. 예를 들어 사용자의 직책에 따라 특정 S3 버킷에 대한 액세스를 제어해야 할 수 있습니다. 이 경우 정의된 작책 내의 사용자만 이러한 파일에 액세스하도록 허용하는 권한 정책을 생성할 수 있습니다. 자세한 내용은 IAM 자습서: 에 SAML 세션 태그 사용을 참조하세요ABAC.

  • 해당 속성의 값에 따라 권한을 허용하거나 거부하는 정책에 속성을 보안 주체 태그로 전달할 수 있습니다.

Amazon Cognito 자격 증명 풀에서 액세스 제어에 속성 사용

액세스 제어에 속성을 사용하려면 먼저 다음 사전 요구 사항을 충족해야 합니다.

액세스 제어를 위한 속성을 사용하기 위해서는 데이터 세트 소스로 설정한 클레임이 선택한 태그 키의 값을 설정합니다. Amazon Cognito는 태그 키와 값을 사용자 세션에 적용합니다. IAM 정책은 ${aws:PrincipalTag/tagkey} 조건에서 사용자의 액세스를 평가할 수 있습니다. IAM 는 정책을 기준으로 사용자 태그의 값을 평가합니다.

사용자에게 전달하려는 자격 증명의 IAM 역할을 준비해야 합니다. 이러한 역할의 신뢰 정책에서 Amazon Cognito가 사용자에 대한 역할을 맡을 수 있도록 허용해야 합니다. 액세스 제어 속성의 경우 Amazon Cognito가 사용자 임시 세션에 보안 주체 태그를 적용할 수 있도록 허용해야 합니다. 작업을 통해 역할을 수임할 수 있는 권한을 부여합니다AssumeRoleWithWebIdentity. 권한 전용 작업 sts:TagSession을 사용하여 사용자 세션에 태그를 지정할 수 있는 권한을 부여합니다. 자세한 내용은 AWS Identity and Access Management 사용 설명서AWS Security Token Service에서 세션 태그 전달을 참조하세요. Amazon Cognito 서비스 보안 주체 cognito-identity.amazonaws.com에 sts:AssumeRoleWithWebIdentity 및 sts:TagSession 권한을 부여하는 신뢰 정책의 예는 액세스 제어에 속성 사용 정책 예 섹션을 참조하세요.

콘솔에서 액세스 제어를 위한 속성을 구성하려면
  1. Amazon Cognito 콘솔에 로그인하고 자격 증명 풀을 선택합니다. 자격 증명 풀을 선택합니다.

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

  3. ID 제공업체를 찾습니다. 편집할 ID 제공업체를 선택합니다. 새 IdP를 추가하려면 ID 제공업체 추가를 선택합니다.

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

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

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

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

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

액세스 제어에 속성 사용 정책 예

회사 법무 부서의 직원이 해당 부서에 속하고 보안 수준으로 분류된 버킷의 모든 파일을 나열해야 하는 시나리오를 생각해 보세요. 이 직원이 자격 증명 공급자로부터 가져온 토큰에 다음 클레임이 포함되어 있다고 가정합니다.

클레임

{ . . "sub" : "57e7b692-4f66-480d-98b8-45a6729b4c88", "department" : "legal", "clearance" : "confidential", . . }

이러한 속성은 태그에 매핑하고 IAM 권한 정책에서 보안 주체 태그로 참조할 수 있습니다. 이제 자격 증명 제공자의 끝에서 사용자 프로파일을 변경하여 액세스를 관리할 수 있습니다. 또는 정책 자체를 변경하지 않고 이름이나 태그를 사용하여 리소스 측에서 속성을 변경할 수 있습니다.

다음 권한 정책은 두 가지 기능을 합니다.

  • 사용자의 부서 이름과 일치하는 접두사로 끝나는 모든 S3 버킷에 대한 목록 액세스를 허용합니다.

  • 파일의 승인 태그가 사용자의 승인 속성과 일치하는 한 이러한 버킷의 파일에 대한 읽기 액세스를 허용합니다.

권한 정책

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:List*", "Resource": "arn:aws:s3:::*-${aws:PrincipalTag/department}" }, { "Effect": "Allow", "Action": "s3:GetObject*", "Resource": "arn:aws:s3:::*-${aws:PrincipalTag/department}/*", "Condition": { "StringEquals": { "s3:ExistingObjectTag/clearance": "${aws:PrincipalTag/clearance}" } } } ] }

신뢰 정책은 이 역할을 수임할 수 있는 사용자를 결정합니다. 신뢰 관계 정책은 sts:AssumeRoleWithWebIdentitysts:TagSession을 사용하여 액세스하도록 허용합니다. 생성한 자격 증명 풀로 정책을 제한하는 조건을 추가하고 인증된 역할에만 정책이 적용되도록 합니다.

신뢰 정책

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": [ "sts:AssumeRoleWithWebIdentity", "sts:TagSession" ], "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "IDENTITY-POOL-ID" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" } } } ] }

액세스 제어를 위한 속성 끄기(콘솔)

액세스 제어를 위한 속성을 비활성화하려면 다음 절차를 따릅니다.

액세스 제어를 위한 속성을 비활성화하려면
  1. Amazon Cognito 콘솔에 로그인하고 자격 증명 풀을 선택합니다. 자격 증명 풀을 선택합니다.

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

  3. ID 제공업체를 찾습니다. 편집할 ID 제공업체를 선택합니다.

  4. 액세스 제어를 위한 속성에서 편집을 선택합니다.

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

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

기본 공급자 매핑

다음 표에는 Amazon Cognito가 지원하는 인증 공급자에 대한 기본 매핑 정보가 나와 있습니다.

공급자 토큰 유형입니다. 보안 주체 태그 값

Amazon Cognito 사용자 풀

ID 토큰

aud(클라이언트 ID) 및 sub(사용자 ID)

"6jk8ltokc7ac9es6jrtg9q572f", "57e7b692-4f66-480d-98b8-45a6729b4c88"

Facebook

액세스 토큰

aud(app_id), sub(user_id)

"492844718097981", "112177216992379"

Google

ID 토큰

aud(클라이언트 ID) 및 sub(사용자 ID)

"620493171733-eebk7c0hcp5lj3e1tlqp1gntt3k0rncv.apps.googleusercontent.com", "109220063452404746097"

SAML

어설션

“http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier" , "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name”

"auth0|5e28d196f8f55a0eaaa95de3", "user123@gmail.com"

Apple

ID 토큰

aud(클라이언트 ID) 및 sub(사용자 ID)

"com.amazonaws.ec2-54-80-172-243.compute-1.client", "001968.a6ca34e9c1e742458a26cf8005854be9.0733"

Amazon

액세스 토큰

aud (Client ID on Amzn Dev Ac), user_id(user ID)

“amzn1.application-oa2-client.9d70d9382d3446108aaee3dd763a0fa6”, “amzn1.accountAGHNIFJQMFSBG3G6XCPVB35ORQAA.”

표준 OIDC 공급자

ID 및 액세스 토큰

aud (as client_id), sub (as user ID)

"620493171733-eebk7c0hcp5lj3e1tlqp1gntt3k0rncv.apps.googleusercontent.com", "109220063452404746097"

Twitter

액세스 토큰

aud (app ID; app Secret), sub (user ID)

“DfwifTtKEX1FiIBRnOTlR0CFK;Xgj5xb8xIrIVCPjXgLIdkW7fXmwcJJrFvnoK9gwZkLexo1y5z1”, “1269003884292222976”

DevAuth

해당 사항 없음

"tag1", "tag2"

참고

[보안 주체의 태그 키(Tag Key for Principal)] 및 [속성 이름(Attribute names)]에 기본 속성 매핑 옵션이 자동으로 채워집니다. 기본 매핑은 변경할 수 없습니다.