역할 기반 액세스 제어 사용 - Amazon Cognito

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

역할 기반 액세스 제어 사용

Amazon Cognito 자격 증명 풀은 인증된 사용자에게 AWS 리소스에 액세스할 수 있는 임시, 제한 권한 자격 증명 세트를 할당합니다. 각 사용자의 권한은 생성한 IAM 역할을 통해 제어됩니다. 사용자의 ID 토큰에 있는 클레임에 따라 각 사용자의 역할을 선택하는 규칙을 정의할 수 있습니다. 인증된 사용자의 기본 역할을 정의할 수 있습니다. 인증되지 않은 게스트 사용자에 대해 제한된 권한으로 별도의 IAM 역할을 정의할 수도 있습니다.

역할 매핑에 사용할 역할 생성

각 역할에 적합한 신뢰 정책을 추가하여 자격 증명 풀의 인증된 사용자에게만 Amazon Cognito에서 역할을 위임할 수 있게 해야 합니다. 다음은 신뢰 정책의 예제입니다.

{ "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:12345678-corner-cafe-123456790ab" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" } } } ] }

이 정책에 의해 cognito-identity.amazonaws.com의 연동 사용자(OpenID Connect 토큰의 발급자)가 이 역할을 수임할 수 있습니다. 또한 이 정책은 토큰의 aud(이 경우 자격 증명 풀 ID)가 자격 증명 풀과 일치하도록 제한합니다. 마지막으로 정책은 Amazon Cognito GetOpenIdToken API 작업에서 발급한 토큰의 다중 값 amr 클레임의 배열 멤버 중 하나가 값을 갖도록 지정합니다authenticated.

역할 전달 권한 부여

사용자가 자격 증명 풀에 대한 사용자의 기존 권한을 초과하는 권한을 가진 역할을 설정할 수 있도록 하려면 해당 역할을 set-identity-pool-roles 에 전달할 수 있는 iam:PassRole 권한을 부여합니다API. 예를 들어, 사용자가 Amazon S3에 쓸 수 없지만 사용자가 자격 증명 풀에 설정한 IAM 역할이 Amazon S3에 쓰기 권한을 부여하는 경우 사용자는 역할에 대한 iam:PassRole 권한이 부여된 경우에만 이 역할을 설정할 수 있습니다. 다음 예제 정책은 iam:PassRole 권한을 허용하는 방법을 보여줍니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::123456789012:role/myS3WriteAccessRole" ] } ] }

이 정책 예제에서는 iam:PassRole 역할에 대해 myS3WriteAccessRole 권한이 부여됩니다. 역할은 역할의 Amazon 리소스 이름()을 사용하여 지정됩니다ARN. 또한 사용자에게 이 정책을 연결해야 합니다. 자세한 내용은 관리형 정책 작업을 참조하세요.

참고

Lambda 함수는 리소스 기반 정책을 사용합니다. 이때 정책은 Lambda 함수 자체에 직접 연결됩니다. Lambda 함수를 호출하는 규칙을 생성하는 경우 역할은 전달하지 않습니다. 따라서 규칙을 생성하는 사용자에게 iam:PassRole 권한이 필요하지 않습니다. Lambda 함수 권한 부여에 대한 자세한 내용은 권한 관리: Lambda 함수 정책 사용을 참조하세요.

토큰을 사용하여 사용자에게 역할 할당

Amazon Cognito 사용자 풀을 통해 로그인하는 사용자의 경우 사용자 풀에서 할당한 ID 토큰에서 역할을 전달할 수 있습니다. ID 토큰의 다음 클레임에 역할이 표시됩니다.

  • cognito:preferred_role 클레임은 역할 입니다ARN.

  • cognito:roles 클레임은 허용된 역할 세트가 포함된 쉼표로 구분된 문자열입니다ARNs.

클레임은 다음과 같이 설정됩니다.

  • cognito:preferred_role 클레임은 최상위(최저) Precedence 값을 가진 그룹의 역할로 설정됩니다. 허용된 역할이 하나뿐인 경우 cognito:preferred_role이 해당 역할로 설정됩니다. 여러 역할이 있고 우선 순위가 가장 높은 역할 하나가 없는 경우 이 클레임이 설정되지 않습니다.

  • 역할이 하나라도 있는 경우 cognito:roles 클레임이 설정됩니다.

토큰을 사용하여 역할을 할당할 때 사용자에게 할당할 수 있는 역할이 여러 개인 경우 Amazon Cognito 자격 증명 풀(페더레이션 자격 증명)은 다음과 같이 역할을 선택합니다.

  • GetCredentialsForIdentity CustomRoleArn 파라미터가 설정되고 cognito:roles 클레임의 역할과 일치하는 경우 파라미터를 사용합니다. 이 파라미터가 cognito:roles의 역할과 일치하지 않으면 액세스를 거부합니다.

  • cognito:preferred_role 클레임이 설정된 경우 이 클레임을 사용합니다.

  • cognito:preferred_role 클레임이 설정되지 않은 경우 cognito:roles 클레임이 설정CustomRoleArn되고 에 대한 호출에 지정되지 않으면 콘솔 또는 AmbiguousRoleResolution 필드(의 RoleMappings 파라미터SetIdentityPoolRolesAPI)의 GetCredentialsForIdentity 역할 확인 설정이 할당될 역할을 결정하는 데 사용됩니다.

규칙 기반 매핑을 사용하여 사용자에게 역할 할당

규칙을 사용하면 자격 증명 공급자 토큰의 클레임을 IAM 역할에 매핑할 수 있습니다.

각 규칙은 토큰 클레임(예: Amazon Cognito 사용자 풀의 ID 토큰에 있는 사용자 속성), 일치 유형, 값 및 IAM 역할을 지정합니다. 이때 일치 유형은 Equals, NotEqual, StartsWith 또는 Contains가 될 수 있습니다. 사용자가 클레임에 대해 일치하는 값을 가진 경우 자격 증명을 얻으면 해당 역할을 수임할 수 있습니다. 예를 들어 사용자 custom:dept 지정 속성 값이 인 사용자에게 특정 IAM 역할을 할당하는 규칙을 생성할 수 있습니다Sales.

참고

규칙 설정에서 표준 속성을 구별하기 위해 사용자 지정 속성에 custom: 접두사가 필요합니다.

규칙은 순서대로 평가되며 CustomRoleArn가 순서를 재정의하도록 지정하지 않는 한 첫 번째 일치 규칙의 IAM 역할이 사용됩니다. Amazon Cognito 사용자 풀의 사용자 속성에 대한 자세한 내용은 사용자 속성 작업 섹션을 참조하세요.

자격 증명 풀(연동 자격 증명) 콘솔에서 인증 공급자에 대한 여러 규칙을 설정할 수 있습니다. 규칙은 순서대로 적용됩니다. 규칙을 드래그하여 순서를 변경할 수 있습니다. 첫 번째 일치 규칙이 우선합니다. 일치 유형이 NotEqual이고 클레임이 없으면 규칙이 평가되지 않습니다. 일치하는 규칙이 없으면 역할 해결 설정이 기본 인증된 역할 사용 또는 거부에 적용됩니다.

API 및 에서 CLI의 RoleMappings 파라미터에 지정된 RoleMapping 유형의 AmbiguousRoleResolution 필드에 규칙이 일치하지 않을 때 할당할 역할을 지정할 수 있습니다SetIdentityPoolRolesAPI.

Amazon Cognito 콘솔에서 자격 증명 공급자에 규칙 기반 매핑을 추가하려면 IdP를 추가하거나 업데이트하고 역할 선택에서 규칙으로 역할 선택을 선택합니다. 여기에서 공급자 클레임을 IAM 역할에 매핑하는 규칙을 추가할 수 있습니다.

AWS CLI 또는 RoleMapping 유형의 RulesConfiguration 필드를 API 사용하여 자격 증명 공급자에 대한 규칙 기반 매핑을 설정할 수 있습니다. 의 RoleMappings 파라미터에서 이 필드를 지정할 수 있습니다SetIdentityPoolRolesAPI.

예를 들어 다음 AWS CLI 명령은 OIDCIdP 에 의해 인증된 새크라멘토 위치의 arn:aws:iam::123456789012:role/Sacramento_team_S3_admin 사용자에게 역할을 할당하는 규칙을 추가합니다arn:aws:iam::123456789012:oidc-provider/myOIDCIdP.

aws cognito-identity set-identity-pool-roles --region us-east-1 --cli-input-json file://role-mapping.json

role-mapping.json의 콘텐츠:

{ "IdentityPoolId": "us-east-1:12345678-corner-cafe-123456790ab", "Roles": { "authenticated": "arn:aws:iam::123456789012:role/myS3WriteAccessRole", "unauthenticated": "arn:aws:iam::123456789012:role/myS3ReadAccessRole" }, "RoleMappings": { "arn:aws:iam::123456789012:oidc-provider/myOIDCIdP": { "Type": "Rules", "AmbiguousRoleResolution": "AuthenticatedRole", "RulesConfiguration": { "Rules": [ { "Claim": "locale", "MatchType": "Equals", "Value": "Sacramento", "RoleARN": "arn:aws:iam::123456789012:role/Sacramento_team_S3_admin" } ] } } } }

자격 증명 풀에 구성된 각 사용자 풀 또는 기타 인증 공급자에 대해 규칙을 25개까지 생성할 수 있습니다. 이 제한은 조정할 수 없습니다. 자세한 내용은 Amazon Cognito의 할당량을 참조하세요.

규칙 기반 매핑에 사용할 토큰 클레임

Amazon Cognito

Amazon Cognito ID 토큰은 JSON 웹 토큰()으로 표시됩니다JWT. name, family_namephone_number와 같은 인증된 사용자의 자격 증명에 대한 클레임이 이 토큰에 포함됩니다. 표준 클레임에 대한 자세한 내용은 OpenID Connect 사양을 참조하세요. 다음은 표준 클레임 외에 Amazon Cognito와 관련된 추가 클레임입니다.

  • cognito:groups

  • cognito:roles

  • cognito:preferred_role

Amazon

다음 클레임은 클레임의 가능한 값과 함께 Login with Amazon에서 사용할 수 있습니다.

  • iss: www.amazon.com

  • aud: 앱 ID

  • sub: sub Login with Amazon 토큰

Facebook

다음 클레임은 클레임의 가능한 값과 함께 Facebook에서 사용할 수 있습니다.

  • iss: graph.facebook.com

  • aud: 앱 ID

  • sub: sub Facebook 토큰

Google

Google 토큰에는 OpenID Connect 사양의 표준 클레임이 포함됩니다. OpenID 토큰의 모든 클레임은 규칙 기반 매핑에 사용할 수 있습니다. Google 토큰에서 사용할 수 있는 클레임에 대한 자세한 내용은 OpenID Connect를 참조하세요.

Apple

Apple 토큰에는 OpenID Connect 사양의 표준 클레임이 포함됩니다. Apple 토큰에서 사용할 수 있는 클레임에 대한 자세한 내용은 Apple 설명서에서 Sign in with Apple로 사용자 인증을 참조하세요. Apple의 토큰에 항상 email이 포함되어 있지는 않습니다.

OpenID

Open ID 토큰의 모든 클레임은 규칙 기반 매핑에 사용할 수 있습니다. 표준 클레임에 대한 자세한 내용은 OpenID Connect 사양을 참조하세요. 사용 가능한 추가 클레임에 대한 내용은 OpenID 제공업체 설명서를 참조하세요.

SAML

클레임은 수신된 SAML어설션에서 구문 분석됩니다. SAML 어설션에서 사용할 수 있는 모든 클레임은 규칙 기반 매핑에 사용할 수 있습니다.

역할 기반 액세스 제어의 모범 사례

중요

역할에 매핑하는 클레임을 최종 사용자가 수정할 수 있는 경우 최종 사용자가 역할을 맡고 그에 따라 정책을 설정할 수 있습니다. 최종 사용자가 직접 설정할 수 없는 클레임은 승격된 권한을 가진 역할에만 매핑하세요. Amazon Cognito 사용자 풀에서 각 사용자 속성에 대해 앱당 읽기 및 쓰기 권한을 설정할 수 있습니다.

중요

Amazon Cognito 사용자 풀에서 그룹의 역할을 설정하면 이 역할이 사용자의 ID 토큰을 통해 전달됩니다. 이 역할을 사용하려면 자격 증명 풀의 인증된 역할 선택에 대해 토큰으로부터 역할 선택을 설정해야 합니다.

콘솔의 역할 확인 설정과 의 RoleMappings 파라미터를 사용하여 토큰에서 올바른 역할을 확인할 수 없는 경우의 기본 동작을 SetIdentityPoolRoles API 지정할 수 있습니다.