쿠키 기본 설정 선택

당사는 사이트와 서비스를 제공하는 데 필요한 필수 쿠키 및 유사한 도구를 사용합니다. 고객이 사이트를 어떻게 사용하는지 파악하고 개선할 수 있도록 성능 쿠키를 사용해 익명의 통계를 수집합니다. 필수 쿠키는 비활성화할 수 없지만 '사용자 지정' 또는 ‘거부’를 클릭하여 성능 쿠키를 거부할 수 있습니다.

사용자가 동의하는 경우 AWS와 승인된 제3자도 쿠키를 사용하여 유용한 사이트 기능을 제공하고, 사용자의 기본 설정을 기억하고, 관련 광고를 비롯한 관련 콘텐츠를 표시합니다. 필수가 아닌 모든 쿠키를 수락하거나 거부하려면 ‘수락’ 또는 ‘거부’를 클릭하세요. 더 자세한 내용을 선택하려면 ‘사용자 정의’를 클릭하세요.

자격 증명 공급자와 함께 Amazon Verified Permissions 사용

포커스 모드
자격 증명 공급자와 함께 Amazon Verified Permissions 사용 - Amazon Verified Permissions

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

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

자격 증명 소스는 Amazon Verified Permissions에서 외부 자격 증명 공급자(IdP)를 나타냅니다. 자격 증명 소스는 정책 스토어와 신뢰 관계가 있는 IdP로 인증된 사용자의 정보를 제공합니다. 애플리케이션이 자격 증명 소스의 토큰으로 권한 부여를 요청할 때 정책 스토어는 사용자 속성 및 액세스 권한에서 권한 부여를 결정할 수 있습니다. Amazon Cognito 사용자 풀 또는 사용자 지정 OpenID Connect(OIDC) IdP를 자격 증명 소스로 추가할 수 있습니다.

Verified Permissions와 함께 OpenID Connect(OIDC) 자격 증명 공급자(IdPs)를 사용할 수 있습니다. 애플리케이션은 OIDC 준수 자격 증명 공급자가 생성한 JSON 웹 토큰(JWTs)을 사용하여 권한 부여 요청을 생성할 수 있습니다. 토큰의 사용자 자격 증명은 보안 주체 ID에 매핑됩니다. ID 토큰을 사용하면 Verified Permissions는 속성 클레임을 보안 주체 속성에 매핑합니다. 액세스 토큰을 사용하면 이러한 클레임이 컨텍스트에 매핑됩니다. 두 토큰 유형을 모두 사용하면와 같은 클레임을 groups 보안 주체 그룹에 매핑하고 역할 기반 액세스 제어(RBAC)를 평가하는 정책을 구축할 수 있습니다.

참고

Verified Permissions는 IdP 토큰의 정보를 기반으로 권한 부여 결정을 내리지만 어떤 방식으로도 IdP와 직접 상호 작용하지 않습니다.

Amazon Cognito 사용자 풀 또는 OIDC 자격 증명 공급자를 사용하여 Amazon API Gateway REST APIs에 대한 권한 부여 로직을 빌드하는 step-by-step 연습은 Amazon Amazon Cognito에서 Amazon Verified Permissions를 사용하여 API Gateway APIs 권한 부여를 참조하거나 보안 블로그에서 자체 자격 증명 공급자를 가져옵니다. AWS

Amazon Cognito 자격 증명 소스 작업

Verified Permissions는 Amazon Cognito 사용자 풀과 밀접하게 작동합니다. Amazon Cognito JWTs 예측 가능한 구조를 갖습니다. Verified Permissions는이 구조를 인식하고 포함된 정보를 최대한 활용합니다. 예를 들어 ID 토큰 또는 액세스 토큰을 사용하여 역할 기반 액세스 제어(RBAC) 권한 부여 모델을 구현할 수 있습니다.

새 Amazon Cognito 사용자 풀 자격 증명 소스에는 다음 정보가 필요합니다.

  • AWS 리전.

  • 사용자 풀 ID입니다.

  • 자격 증명 소스와 연결할 보안 주체 엔터티 유형입니다. 예: MyCorp::User.

  • 자격 증명 소스와 연결할 보안 주체 그룹 개체 유형입니다. 예: MyCorp::UserGroup.

  • 가 정책 스토어에 요청할 수 있도록 승인하려는 사용자 풀의 클라이언트 IDs입니다.

Verified Permissions는 동일한의 Amazon Cognito 사용자 풀에서만 작동하므로 다른 계정에서 자격 증명 소스를 지정할 AWS 계정수 없습니다. Verified Permissions는 사용자 풀 보안 주체를 대상으로 하는 정책에서 참조해야 하는 자격 증명 소스 식별자인 엔터티 접두사를와 같은 사용자 풀의 ID로 설정합니다us-west-2_EXAMPLE. 이 경우 ID가 인 해당 사용자 풀의 사용자를 참조a1b2c3d4-5678-90ab-cdef-EXAMPLE22222합니다. us-west-2_EXAMPLE|a1b2c3d4-5678-90ab-cdef-EXAMPLE22222

사용자 풀 토큰 클레임에는 속성, 범위, 그룹, 클라이언트 IDs 및 사용자 지정 데이터가 포함될 수 있습니다. Amazon Cognito JWTs Verified Permissions에서 권한 부여 결정에 기여할 수 있는 다양한 정보를 포함할 수 있습니다. 다음이 포함됩니다.

  1. cognito: 접두사가 있는 사용자 이름 및 그룹 클레임

  2. 를 사용한 사용자 지정 사용자 속성 custom: prefix

  3. 런타임에 추가된 사용자 지정 클레임

  4. sub 및와 같은 OIDC 표준 클레임 email

이러한 클레임과의 Verified Permissions 정책에서 클레임을 관리하는 방법을 자세히 다룹니다스키마에 자격 증명 공급자 토큰 매핑.

중요

만료되기 전에 Amazon Cognito 토큰을 취소할 수 있지만, JWT는 서명과 유효성을 갖춘 독립형 상태 비저장 리소스로 간주됩니다. JSON 웹 토큰 RFC 7519를 준수하는 서비스는 원격으로 토큰을 검증할 것으로 예상되며 발행자를 통해 토큰을 검증할 필요는 없습니다. 즉, Verified Permissions는 나중에 삭제된 사용자에 대해 취소되거나 발급된 토큰을 기반으로 액세스 권한을 부여할 수 있습니다. 이러한 위험을 줄이려면 유효 기간이 가장 짧은 토큰을 생성하고 사용자 세션을 계속할 수 있는 권한을 제거하려는 경우 새로 고침 토큰을 취소하는 것이 좋습니다. 자세한 내용은 토큰 해지를 사용하여 사용자 세션 종료를 참조하세요.

다음 예제에서는 보안 주체와 연결된 Amazon Cognito 사용자 풀 클레임 중 일부를 참조하는 정책을 생성하는 방법을 보여줍니다.

permit( principal, action, resource == ExampleCo::Photo::"VacationPhoto94.jpg" ) when { principal["cognito:username"]) == "alice" && principal["custom:department"]) == "Finance" };

다음 예제에서는 Cognito 사용자 풀의 사용자인 보안 주체를 참조하는 정책을 생성하는 방법을 보여줍니다. 보안 주체 ID는의 형식을 취합니다"<userpool-id>|<sub>".

permit( principal == ExampleCo::User::"us-east-1_example|a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", action, resource == ExampleCo::Photo::"VacationPhoto94.jpg" );

Verified Permissions의 사용자 풀 자격 증명 소스에 대한 시더 정책은 영숫자 및 밑줄() 이외의 문자가 포함된 클레임 이름에 특수 구문을 사용합니다_. 여기에는 cognito:username 및와 같은 : 문자가 포함된 사용자 풀 접두사 클레임이 포함됩니다custom:department. cognito:username 또는 custom:department 클레임을 참조하는 정책 조건을 작성하려면 principal["custom:department"]각각 principal["cognito:username"] 및 로 작성합니다.

참고

토큰에 custom: 접두사가 cognito: 또는 이고 클레임 이름이 리터럴 값 cognito 또는 인 클레임이 포함된 경우 IsAuthorizedWithToken을 사용한 custom권한 부여 요청은에서 실패합니다ValidationException.

클레임 매핑에 대한 자세한 내용은 섹션을 참조하세요스키마에 ID 토큰 매핑. Amazon Cognito 사용자의 권한 부여에 대한 자세한 내용은 Amazon Amazon Cognito 개발자 안내서의 Amazon Verified Permissions 권한 부여를 참조하세요.

OIDC 자격 증명 소스 작업

규정 준수 OpenID Connect(OIDC) IdP를 정책 스토어의 자격 증명 소스로 구성할 수도 있습니다. OIDC 공급자는 Amazon Cognito 사용자 풀과 유사하며 인증의 결과로 JWTs를 생성합니다. OIDC 공급자를 추가하려면 발급자 URL을 제공해야 합니다.

새 OIDC 자격 증명 소스에는 다음 정보가 필요합니다.

  • 발급자 URL입니다. Verified Permissions는이 URL에서 .well-known/openid-configuration 엔드포인트를 검색할 수 있어야 합니다.

  • 와일드카드가 포함되지 않은 CNAME 레코드입니다. 예를 들어는에 매핑할 a.example.com 수 없습니다*.example.net. 반대로는에 매핑할 *.example.com 수 없습니다a.example.net.

  • 권한 부여 요청에 사용할 토큰 유형입니다. 이 경우 자격 증명 토큰을 선택합니다.

  • 와 같이 자격 증명 소스와 연결할 사용자 엔터티 유형입니다MyCorp::User.

  • 와 같이 자격 증명 소스와 연결할 그룹 개체 유형입니다MyCorp::UserGroup.

  • ID 토큰 예제 또는 ID 토큰의 클레임 정의.

  • 사용자 및 그룹 개체 IDs. CLI 및 API에서이 접두사를 선택할 수 있습니다. API Gateway 설정 및 자격 증명 공급자 또는 안내 설정 옵션으로 생성한 정책 스토어에서 Verified Permissions는 발급자 이름에서를 뺀 접두사를 할당합니다. 예를 들면 https://입니다MyCorp::User::"auth.example.com|a1b2c3d4-5678-90ab-cdef-EXAMPLE11111".

API 작업을 사용하여 OIDC 소스의 요청을 승인하는 방법에 대한 자세한 내용은 섹션을 참조하세요권한 부여에 사용 가능한 API 작업.

다음 예제는 회계 부서의 직원에 대한 연말 보고서에 대한 액세스를 허용하고 기밀 분류를 보유하며 위성 사무실에 있지 않은 정책을 생성하는 방법을 보여줍니다. Verified Permissions는 보안 주체의 ID 토큰에 있는 클레임에서 이러한 속성을 파생합니다.

보안 주체의 그룹을 참조할 때 정책을 올바르게 평가하려면 in 연산자를 사용해야 합니다.

permit( principal in MyCorp::UserGroup::"MyOIDCProvider|Accounting", action, resource in MyCorp::Folder::"YearEnd2024" ) when { principal.jobClassification == "Confidential" && !(principal.location like "SatelliteOffice*") };

클라이언트 및 대상 검증

정책 스토어에 자격 증명 소스를 추가하면 Verified Permissions에는 ID 및 액세스 토큰이 의도한 대로 사용되고 있는지 확인하는 구성 옵션이 있습니다. 이 검증은 IsAuthorizedWithTokenBatchIsAuthorizedWithToken API 요청 처리에서 수행됩니다. 동작은 ID와 액세스 토큰 간에, 그리고 Amazon Cognito와 OIDC 자격 증명 소스 간에 다릅니다. Amazon Cognito 사용자 풀 공급자를 사용하면 Verified Permissions가 ID와 액세스 토큰 모두에서 클라이언트 ID를 검증할 수 있습니다. OIDC 공급자를 통해 Verified Permissions는 ID 토큰의 클라이언트 ID와 액세스 토큰의 대상을 검증할 수 있습니다.

클라이언트 ID는 애플리케이션이 사용하는 자격 증명 공급자 인스턴스와 연결된 식별자입니다. 예: 1example23456789. 대상은와 같은 액세스 토큰의 의도한 신뢰 당사자 또는 대상과 연결된 URL 경로입니다https://mytoken.example.com. 액세스 토큰을 사용할 때 aud 클레임은 항상 대상과 연결됩니다.

Verified Permissions는 다음과 같이 자격 증명 소스 대상 및 클라이언트 검증을 수행합니다.

Amazon Cognito

Amazon Cognito ID 토큰에는 앱 클라이언트 ID가 포함된 aud 클레임이 있습니다. 액세스 토큰에는 앱 클라이언트 ID도 포함된 client_id 클레임이 있습니다.

자격 증명 소스에 클라이언트 애플리케이션 검증 값을 하나 이상 입력하면 Verified Permissions는이 앱 클라이언트 IDs 목록을 ID 토큰 aud 클레임 또는 액세스 토큰 client_id 클레임과 비교합니다. Verified Permissions는 Amazon Cognito 자격 증명 소스에 대한 신뢰 당사자 대상 URL을 검증하지 않습니다.

OIDC

OIDC ID 토큰에는와 같은 클라이언트 ID가 포함된 aud 클레임이 있습니다1example23456789. IDs

OIDC 액세스 토큰에는와 같은 토큰의 대상 URL이 포함된 aud 클레임https://myapplication.example.com과와 같은 클라이언트 ID가 포함된 client_id 클레임이 있습니다1example23456789. IDs

정책 저장소를 설정할 때 정책이 토큰의 대상을 검증하는 데 사용하는 대상 검증 값을 하나 이상 입력합니다.

  • ID 토큰 - Verified Permissions는 aud 클레임의 클라이언트 ID 중 하나 이상이 대상 검증 값과 일치하는지 확인하여 클라이언트 IDs를 검증합니다.

  • 액세스 토큰 - Verified Permissions는 aud 클레임의 URL이 대상 검증 값과 일치하는지 확인하여 대상을 검증합니다. aud 클레임이 없는 경우 cid 또는 client_id 클레임을 사용하여 대상을 검증할 수 있습니다. 자격 증명 공급자에게 문의하여 올바른 대상 클레임 및 형식을 확인하세요.

Amazon Cognito ID 토큰에는 앱 클라이언트 ID가 포함된 aud 클레임이 있습니다. 액세스 토큰에는 앱 클라이언트 ID도 포함된 client_id 클레임이 있습니다.

자격 증명 소스에 클라이언트 애플리케이션 검증 값을 하나 이상 입력하면 Verified Permissions는이 앱 클라이언트 IDs 목록을 ID 토큰 aud 클레임 또는 액세스 토큰 client_id 클레임과 비교합니다. Verified Permissions는 Amazon Cognito 자격 증명 소스에 대한 신뢰 당사자 대상 URL을 검증하지 않습니다.

JWTs 대한 클라이언트 측 권한 부여

정책 스토어 자격 증명 소스를 사용하지 않고 애플리케이션에서 JSON 웹 토큰을 처리하고 해당 클레임을 Verified Permissions에 전달할 수 있습니다. JSON 웹 토큰(JWT)에서 개체 속성을 추출하여 Verified Permissions로 구문 분석할 수 있습니다.

이 예제는 JWT를 사용하여 애플리케이션에서 Verified Permissions를 호출하는 방법을 보여줍니다.1

async function authorizeUsingJwtToken(jwtToken) { const payload = await verifier.verify(jwtToken); let principalEntity = { entityType: "PhotoFlash::User", // the application needs to fill in the relevant user type entityId: payload["sub"], // the application need to use the claim that represents the user-id }; let resourceEntity = { entityType: "PhotoFlash::Photo", //the application needs to fill in the relevant resource type entityId: "jane_photo_123.jpg", // the application needs to fill in the relevant resource id }; let action = { actionType: "PhotoFlash::Action", //the application needs to fill in the relevant action id actionId: "GetPhoto", //the application needs to fill in the relevant action type }; let entities = { entityList: [], }; entities.entityList.push(...getUserEntitiesFromToken(payload)); let policyStoreId = "PSEXAMPLEabcdefg111111"; // set your own policy store id const authResult = await client .isAuthorized({ policyStoreId: policyStoreId, principal: principalEntity, resource: resourceEntity, action: action, entities, }) .promise(); return authResult; } function getUserEntitiesFromToken(payload) { let attributes = {}; let claimsNotPassedInEntities = ['aud', 'sub', 'exp', 'jti', 'iss']; Object.entries(payload).forEach(([key, value]) => { if (claimsNotPassedInEntities.includes(key)) { return; } if (Array.isArray(value)) { var attibuteItem = []; value.forEach((item) => { attibuteItem.push({ string: item, }); }); attributes[key] = { set: attibuteItem, }; } else if (typeof value === 'string') { attributes[key] = { string: value, } } else if (typeof value === 'bigint' || typeof value ==='number') { attributes[key] = { long: value, } } else if (typeof value === 'boolean') { attributes[key] = { boolean: value, } } }); let entityItem = { attributes: attributes, identifier: { entityType: "PhotoFlash::User", entityId: payload["sub"], // the application needs to use the claim that represents the user-id } }; return [entityItem]; }

¹ 이 코드 예제는 aws-jwt-verify 라이브러리를 사용하여 OIDC 호환 IdP가 서명한 JWT를 검증합니다.

프라이버시사이트 이용 약관쿠키 기본 설정
© 2025, Amazon Web Services, Inc. 또는 계열사. All rights reserved.