

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

# Amazon Verified Permissions에서 권한 부여 구현
<a name="authorization"></a>

정책 스토어, 정책, 템플릿, 스키마 및 권한 부여 모델을 빌드한 후에는 Amazon Verified Permissions를 사용하여 요청 권한 부여를 시작할 준비가 된 것입니다. Verified Permissions 권한 부여를 구현하려면의 권한 부여 정책 구성을 애플리케이션의 통합 AWS 과 결합해야 합니다. Verified Permissions를 애플리케이션과 통합하려면 AWS SDK를 추가하고 Verified Permissions API를 호출하고 정책 스토어에 대한 권한 부여 결정을 생성하는 메서드를 구현합니다.

Verified Permissions를 사용한 권한 부여는 애플리케이션의 *UX 권한* 및 *API 권한*에 유용합니다.

**UX 권한**  
애플리케이션 UX에 대한 사용자 액세스를 제어합니다. 사용자가 액세스해야 하는 정확한 양식, 버튼, 그래픽 및 기타 리소스만 볼 수 있도록 허용할 수 있습니다. 예를 들어 사용자가 로그인할 때 계정에 "자금 이체" 버튼이 표시되는지 확인할 수 있습니다. 사용자가 수행할 수 있는 작업을 제어할 수도 있습니다. 예를 들어 동일한 뱅킹 앱에서 사용자가 트랜잭션 범주를 변경할 수 있는지 여부를 확인할 수 있습니다.

**API 권한**  
데이터에 대한 사용자 액세스를 제어합니다. 애플리케이션은 종종 분산 시스템의 일부이며 외부 APIs에서 정보를 가져옵니다. Verified Permissions가 "자금 이체" 버튼 표시를 허용한 뱅킹 앱의 예제에서는 사용자가 이체를 시작할 때 보다 복잡한 권한 부여 결정을 내려야 합니다. Verified Permissions는 적격 이전 대상인 대상 계정을 나열하는 API 요청을 승인한 다음 이전을 다른 계정으로 푸시하는 요청을 승인할 수 있습니다.

이 콘텐츠를 설명하는 예제는 [샘플 정책 스토어](policy-stores-create.md#policy-stores-create.title)에서 가져온 것입니다. 다음을 수행하려면 테스트 환경에 **DigitalPetStore** 샘플 정책 스토어를 생성합니다.

배치 권한 부여를 사용하여 UX 권한을 구현하는 엔드 투 엔드 샘플 애플리케이션은 *AWS 보안 블로그*의 [대규모 세분화된 권한 부여를 위한 Amazon Verified Permissions 사용을](https://aws.amazon.com/blogs/security/use-amazon-verified-permissions-for-fine-grained-authorization-at-scale/) 참조하세요.

**Topics**
+ [권한 부여에 사용 가능한 API 작업](#authorization-operations)
+ [권한 부여 모델 테스트](authorization-testing.md)
+ [권한 부여 모델을 애플리케이션과 통합](authorization-sdk.md)

## 권한 부여에 사용 가능한 API 작업
<a name="authorization-operations"></a>

Verified Permissions API에는 다음과 같은 권한 부여 작업이 있습니다.

**[IsAuthorized](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorized.html)**  
`IsAuthorized` API 작업은 Verified Permissions가 있는 권한 부여 요청의 진입점입니다. 보안 주체, 작업, 리소스, 컨텍스트 및 엔터티 요소를 제출해야 합니다. Verified Permissions는 요청의 엔터티에 적용되는 요청된 정책 스토어의 모든 정책에 대해 요청을 평가합니다.

**[IsAuthorizedWithToken](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorizedWithToken.html)**  
`IsAuthorizedWithToken` 작업은 JSON 웹 토큰(JWTs)의 사용자 데이터에서 권한 부여 요청을 생성합니다. Verified Permissions는 정책 스토어의 자격 증명 소스 Amazon Cognito 와 같은 OIDC 공급자와 직접 작동합니다. Verified Permissions는 사용자의 ID 또는 액세스 토큰의 클레임에서 요청의 보안 주체에 모든 속성을 채웁니다. 자격 증명 소스의 사용자 속성 또는 그룹 멤버십에서 작업 및 리소스를 승인할 수 있습니다.  
`IsAuthorizedWithToken` 요청에 그룹 또는 사용자 보안 주체 유형에 대한 정보를 포함할 수 없습니다. 제공하는 JWT에 모든 보안 주체 데이터를 채워야 합니다.

**[BatchIsAuthorized](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_BatchIsAuthorized.html)**  
`BatchIsAuthorized` 작업은 단일 API 요청에서 단일 보안 주체 또는 리소스에 대한 여러 권한 부여 결정을 처리합니다. 이 작업은 [할당량 사용을](quotas.md#quotas-tps.title) 최소화하고 최대 30개의 복잡한 중첩 작업 각각에 대한 권한 부여 결정을 반환하는 단일 배치 작업으로 요청을 그룹화합니다. 단일 리소스에 대한 배치 권한 부여를 사용하면 사용자가 리소스에 대해 수행할 수 있는 작업을 필터링할 수 있습니다. 단일 보안 주체에 대한 배치 권한 부여를 사용하면 사용자가 조치를 취할 수 있는 리소스를 필터링할 수 있습니다.

**[BatchIsAuthorizedWithToken](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_BatchIsAuthorizedWithToken.html)**  
`BatchIsAuthorizedWithToken` 작업은 하나의 API 요청으로 단일 보안 주체에 대한 여러 권한 부여 결정을 처리합니다. 보안 주체는 정책 스토어 ID 소스에서 ID 또는 액세스 토큰으로 제공됩니다. 이 작업은 할당[량 사용을](quotas.md#quotas-tps.title) 최소화하고 작업 및 리소스에 대한 최대 30개의 요청 각각에 대한 권한 부여 결정을 반환하는 단일 배치 작업으로 요청을 그룹화합니다. 정책에서 사용자 디렉터리의 속성 또는 그룹 멤버십에서 액세스 권한을 부여할 수 있습니다.  
와 마찬가지로 `BatchIsAuthorizedWithToken` 요청에 그룹 또는 사용자 보안 주체 유형에 대한 정보를 포함할 `IsAuthorizedWithToken`수 없습니다. 제공하는 JWT에 모든 보안 주체 데이터를 채워야 합니다.

# 권한 부여 모델 테스트
<a name="authorization-testing"></a>

애플리케이션을 배포할 때 Amazon Verified Permissions 권한 부여 결정의 영향을 이해하려면 [Amazon Verified Permissions 테스트 벤치 사용](test-bench.md) 및 HTTPS REST API 요청을 사용하여 정책을 개발할 때 정책을 평가할 수 있습니다. 테스트 벤치는 정책 스토어의 권한 부여 요청 및 응답을 AWS Management Console 평가하는의 도구입니다.

Verified Permissions REST API는 개념적 이해에서 애플리케이션 설계로 전환함에 따라 개발의 다음 단계입니다. Verified Permissions API는 [IsAuthorized](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorized.html), [IsAuthorizedWithToken](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorizedWithToken.html) 및 [BatchIsAuthorized](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_BatchIsAuthorized.html)를 사용하여 리전 [서비스 엔드포인트](https://docs.aws.amazon.com/general/latest/gr/verifiedpermissions.html)에 대한 [서명된 AWS API 요청으로 권한 부여 요청을](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) 수락합니다. 권한 부여 모델을 테스트하기 위해 API 클라이언트로 요청을 생성하고 정책이 예상대로 권한 부여 결정을 반환하는지 확인할 수 있습니다.

예를 들어 다음 절차를 사용하여 샘플 정책 스토어`IsAuthorized`에서 테스트할 수 있습니다.

------
#### [ Test bench ]

1. Verified Permissions 콘솔에서 [Verified Permissions 콘솔](https://console.aws.amazon.com/verifiedpermissions/)을 엽니다. 샘플 정책 스토어에서 **DigitalPetStore**라는 이름으로 **정책 스토어**를 생성합니다.

1. 새 정책 스토어에서 **테스트 벤치**를 선택합니다.

1. Verified Permissions API 참조의 [IsAuthorized](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorized.html#API_IsAuthorized_Examples)에서 테스트 벤치 요청을 채웁니다. 다음 세부 정보는 **DigitalPetStore** 샘플을 참조하는 **예제 4**의 조건을 복제합니다.

   1. Alice를 보안 주체로 설정합니다. **작업을 수행하는 보안 주체**에서 `DigitalPetStore::User`를 선택하고를 입력합니다`Alice`.

   1. Alice의 역할을 고객으로 설정합니다. **상위 항목 추가를** 선택하고 `DigitalPetStore::Role`를 선택한 다음 고객을 입력합니다.

   1. 리소스를 "1234" 순서로 설정합니다. **보안 주체가 작업하는 리소스에서** `DigitalPetStore::Order`를 선택하고를 입력합니다`1234`.

   1. `DigitalPetStore::Order` 리소스에는 `owner` 속성이 필요합니다. Alice를 주문 소유자로 설정합니다. 선택 `DigitalPetStore::User` 및 입력 `Alice`

   1. Alice가 주문을 보도록 요청했습니다. **보안 주체가 수행하는 작업**에서를 선택합니다`DigitalPetStore::Action::"GetOrder"`.

1. **권한 부여 요청 실행**을 선택합니다. 수정되지 않은 정책 스토어에서이 요청은 `ALLOW` 결정을 내리게 됩니다. 결정을 반환한 **충족 정책을** 기록해 둡니다.

1. 왼쪽 탐색 메뉴에서 **정책**을 선택합니다. **고객 역할 - 주문 받기** 설명과 함께 정적 정책을 검토합니다.

1. 보안 주체가 고객 역할에 있고 리소스의 소유자였기 때문에 Verified Permissions가 요청을 허용했는지 관찰합니다.

------
#### [ REST API ]

1. Verified Permissions 콘솔에서 [Verified Permissions 콘솔](https://console.aws.amazon.com/verifiedpermissions/)을 엽니다. 샘플 정책 스토어에서 **DigitalPetStore**라는 이름으로 **정책 스토어**를 생성합니다.

1. 새 **정책 스토어의 정책 스토어 ID**를 기록해 둡니다.

1. Verified Permissions API 참조의 [IsAuthorized](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorized.html#API_IsAuthorized_Examples)에서 **DigitalPetStore** 샘플을 참조하는 **예제 4**의 요청 본문을 복사합니다.

1. API 클라이언트를 열고 정책 스토어의 리전 서비스 엔드포인트에 대한 요청을 생성합니다. [예제](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorized.html#API_IsAuthorized_Examples)와 같이 헤더를 채웁니다.

1. 샘플 요청 본문에 붙여넣고의 값을 앞서 기록한 정책 스토어 ID`policyStoreId`로 변경합니다.

1. 요청을 제출하고 결과를 검토합니다. 기본 **DigitalPetStore** 정책 스토어에서이 요청은 `ALLOW` 결정을 반환합니다.

------

테스트 환경에서 정책, 스키마 및 요청을 변경하여 결과를 변경하고 더 복잡한 결정을 내릴 수 있습니다.

1. Verified Permissions에서 결정을 변경하는 방식으로 요청을 변경합니다. 예를 들어 Alice의 역할을 로 변경하거나 순서 1234의 `owner` 속성을 로 `Employee` 변경합니다`Bob`.

1. 권한 부여 결정에 영향을 미치는 방식으로 정책을 변경합니다. 예를 들어 **고객 역할 - 주문 가져오기**라는 설명으로 정책을 수정하여가의 소유자`User`여야 하는 조건을 제거하고가 주문을 보`Bob`도록 요청을 `Resource` 수정합니다.

1. 스키마를 변경하여 정책이 더 복잡한 결정을 내릴 수 있도록 합니다. Alice가 새 요구 사항을 충족할 수 있도록 요청 엔터티를 업데이트합니다. 예를 들어가 `ActiveUsers` 또는의 멤버가 되도록 스키마를 편집`User`합니다`InactiveUsers`. 활성 사용자만 자신의 주문을 볼 수 있도록 정책을 업데이트합니다. Alice가 활성 또는 비활성 사용자가 되도록 요청 엔터티를 업데이트합니다.

# 권한 부여 모델을 애플리케이션과 통합
<a name="authorization-sdk"></a>

애플리케이션에서 Amazon Verified Permissions를 구현하려면 앱이 적용할 정책과 스키마를 정의해야 합니다. 권한 부여 모델을 마련하고 테스트한 상태에서 다음 단계는 적용 지점에서 API 요청 생성을 시작하는 것입니다. 이렇게 하려면 사용자 데이터를 수집하여 권한 부여 요청에 채우도록 애플리케이션 로직을 설정해야 합니다.

**앱이 Verified Permissions를 사용하여 요청을 승인하는 방법**

1. 현재 사용자에 대한 정보를 수집합니다. 일반적으로 사용자의 세부 정보는 JWT 또는 웹 세션 쿠키와 같은 인증된 세션의 세부 정보에 제공됩니다. 이 사용자 데이터는 정책 스토어에 연결된 Amazon Cognito [ID 소스](identity-sources.md#identity-sources.title) 또는 다른 [OpenID Connect(OIDC) 공급자](cognito-validation.md#identity-sources-other-idp.title)에서 비롯될 수 있습니다.

1. 사용자가 액세스하려는 리소스에 대한 정보를 수집합니다. 일반적으로 사용자가 앱이 새 자산을 로드해야 하는 항목을 선택하면 애플리케이션에 리소스에 대한 정보가 수신됩니다.

1. 사용자가 수행하려는 작업을 결정합니다.

1. 사용자가 시도한 작업에 대해 보안 주체, 작업, 리소스 및 엔터티를 사용하여 Verified Permissions에 대한 권한 부여 요청을 생성합니다. Verified Permissions는 정책 스토어의 정책을 기준으로 요청을 평가하고 권한 부여 결정을 반환합니다.

1. 애플리케이션은 Verified Permissions의 허용 또는 거부 응답을 읽고 사용자의 요청에 대한 결정을 적용합니다.

Verified Permissions API 작업은 AWS SDKs. 앱에 Verified Permissions를 포함하려면 선택한 언어의 AWS SDK를 앱 패키지에 통합합니다.

자세히 알아보고 AWS SDKs. [Amazon Web Services](https://aws.amazon.com/tools/) 

다음은 AWS SDKs.
+ [AWS SDK for .NET](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/VerifiedPermissions/NVerifiedPermissions.html)
+ [AWS SDK for C\$1\$1](https://sdk.amazonaws.com/cpp/api/LATEST/aws-cpp-sdk-verifiedpermissions/html/class_aws_1_1_verified_permissions_1_1_verified_permissions_client.html)
+ [AWS SDK for Go](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/verifiedpermissions)
+ [AWS SDK for Java](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/verifiedpermissions/package-summary.html)
+ [AWS SDK for JavaScript](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/verifiedpermissions/)
+ [AWS SDK for PHP](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-verifiedpermissions-2021-12-01.html)
+ [AWS SDK for Python (Boto)](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/verifiedpermissions.html)
+ [AWS SDK for Ruby](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/VerifiedPermissions/Client.html)
+ [AWS SDK for Rust](https://docs.rs/aws-sdk-verifiedpermissions/latest/aws_sdk_verifiedpermissions/)

에 대한 다음 AWS SDK for JavaScript 예제는 [Amazon Verified Permissions 및 Amazon Cognito를 사용한 세분화된 권한 부여 간소화](https://aws.amazon.com/blogs/security/simplify-fine-grained-authorization-with-amazon-verified-permissions-and-amazon-cognito/)에서 `IsAuthorized` 비롯됩니다.

```
const authResult = await avp.isAuthorized({
    principal: 'User::"alice"',
    action: 'Action::"view"',
    resource: 'Photo::"VacationPhoto94.jpg"',
    // whenever our policy references attributes of the entity,
    // isAuthorized needs an entity argument that provides    
    // those attributes
    entities: {
       entityList: [
         {
            "identifier": {
                "entityType": "User",
                "entityId": "alice"
            },
            "attributes": {
                "location": {
                    "String": "USA"
                }
            }
         }
       ]
    }
});
```

**더 많은 개발자 리소스**
+ [Amazon Verified Permissions 워크숍](https://catalog.workshops.aws/verified-permissions-in-action)
+ [Amazon Verified Permissions - 리소스](https://aws.amazon.com/verified-permissions/resources/)
+ [Amazon Verified Permissions를 사용하여 ASP.NET Core 앱에 대한 사용자 지정 권한 부여 정책 공급자 구현](https://aws.amazon.com/blogs/dotnet/implement-a-custom-authorization-policy-provider-for-asp-net-core-apps-using-amazon-verified-permissions/)
+ [Amazon Verified Permissions를 사용하여 비즈니스 애플리케이션을 위한 권한 부여 서비스 구축](https://aws.amazon.com/blogs/security/build-an-entitlement-service-for-business-applications-using-amazon-verified-permissions/)
+ [Amazon Verified Permissions 및 Amazon Cognito를 사용하여 세분화된 권한 부여 간소화](https://aws.amazon.com/blogs/security/simplify-fine-grained-authorization-with-amazon-verified-permissions-and-amazon-cognito/)