

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# の FHIR での SMART サポート AWS HealthLake
<a name="reference-smart-on-fhir"></a>

FHIR 対応 HealthLake データストアの代替医療アプリケーションと再利用可能なテクノロジー (SMART) を使用すると、FHIR 準拠アプリケーション上の SMART にアクセスできます。HealthLake データにアクセスするには、サードパーティーの認可サーバーを使用してリクエストを認証および承認します。したがって、 を介してユーザー認証情報を管理する代わりに AWS Identity and Access Management、FHIR 準拠の認可サーバーで SMART を使用して管理します。

**注記**  
HealthLake は、FHIR バージョン 1.0 および 2.0 で SMART をサポートしています。これらのフレームワークの詳細については、*FHIR R4 ドキュメント*の[「SMART App Launch](https://www.hl7.org/fhir/smart-app-launch/)」を参照してください。  
HealthLake データストアは、FHIR リクエストでの SMART の以下の認証および認可フレームワークをサポートしています。  
**OpenID (AuthN)**: 個人またはクライアントアプリケーションを認証するには、誰 (または何) であると主張します。
**OAuth 2.0 (AuthZ)**: 認証されたリクエストが読み書きできる HealthLake データストアの FHIR リソースを承認します。これは、認可サーバーで設定されたスコープによって定義されます。

SMART on FHIR 対応データストアは、 AWS CLI または AWS SDKs を使用して作成できます。詳細については、「[HealthLake データストアの作成](managing-data-stores-create.md)」を参照してください。

**Topics**
+ [FHIR での SMART の開始方法](reference-smart-on-fhir-getting-started.md)
+ [SMART on FHIR の HealthLake 認証要件](reference-smart-on-fhir-authentication.md)
+ [HealthLake でサポートされている FHIR OAuth 2.0 スコープでの SMART](reference-smart-on-fhir-oauth-scopes.md)
+ [を使用したトークンの検証 AWS Lambda](reference-smart-on-fhir-token-validation.md)
+ [SMART on FHIR 対応 HealthLake データストアでのきめ細かな認可の使用](reference-smart-on-fhir-fine-grained-authorization.md)
+ [FHIR 検出ドキュメントの SMART の取得](reference-smart-on-fhir-discovery-document.md)
+ [SMART 対応 HealthLake データストアでの FHIR REST API リクエストの実行](reference-smart-on-fhir-request-example.md)

# FHIR での SMART の開始方法
<a name="reference-smart-on-fhir-getting-started"></a>

以下のトピックでは、 AWS HealthLake の FHIR 認可で SMART の使用を開始する方法について説明します。これには、 AWS アカウントでプロビジョニングする必要があるリソース、FHIR 対応 HealthLake データストアでの SMART の作成、および FHIR クライアントアプリケーションが認可サーバーと HealthLake データストアとやり取りする方法の例が含まれます。

**Topics**
+ [FHIR での SMART のリソースの設定](#smart-on-fhir-resources)
+ [SMART on FHIR のクライアントアプリケーションワークフロー](#smart-on-fhir-client-app-workflow)

## FHIR での SMART のリソースの設定
<a name="smart-on-fhir-resources"></a>

次のステップでは、HealthLake が FHIR リクエストで SMART を処理する方法と、それらを成功させるために必要なリソースを定義します。以下の要素は、ワークフロー内で連携して SMART on FHIR リクエストを行います。
+ **エンドユーザー**: 一般的に、患者または臨床医は、サードパーティーの SMART on FHIR アプリケーションを使用して HealthLake データストアのデータにアクセスします。
+ **SMART on FHIR アプリケーション (クライアントアプリケーションと呼ばれます)**: HealthLake データストアにあるデータにアクセスしたいアプリケーション。
+ **認可サーバー**: ユーザーを認証し、アクセストークンを発行できる OpenID Connect 準拠サーバー。
+ **HealthLake データストア**: Lambda 関数を使用してベアラートークンを提供する FHIR REST リクエストに応答する、SMART on FHIR 対応 HealthLake データストア。

これらの要素を連携させるには、次のリソースを作成する必要があります。

**注記**  
認可サーバーを設定して必要な[スコープ](reference-smart-on-fhir-oauth-scopes.md)を定義し、[トークン](reference-smart-on-fhir-token-validation.md)イントロスペクションを処理する AWS Lambda 関数を作成したら、FHIR 対応 HealthLake データストアで SMART を作成することをお勧めします。

**1. 認可サーバーエンドポイントを設定する**  
SMART on FHIR フレームワークを使用するには、データストアで行われた FHIR REST リクエストを検証できるサードパーティー認可サーバーを設定する必要があります。詳細については、「[SMART on FHIR の HealthLake 認証要件](reference-smart-on-fhir-authentication.md)」を参照してください。

**2. HealthLake データストアのアクセスレベルを制御するための認可サーバーのスコープを定義する**  
SMART on FHIR フレームワークは、OAuth スコープを使用して、認証されたリクエストがアクセスできる FHIR リソースとその範囲を決定します。スコープの定義は、最小特権を設計する方法です。詳細については、「[HealthLake でサポートされている FHIR OAuth 2.0 スコープでの SMART](reference-smart-on-fhir-oauth-scopes.md)」を参照してください。

**3. トークンイントロスペクションを実行できる AWS Lambda 関数を設定する**  
クライアントアプリケーションから SMART on FHIR 対応データストアに送信された FHIR REST リクエストには、JSON ウェブトークン (JWT) が含まれています。詳細については、[「JWT のデコード](reference-smart-on-fhir-token-validation.md)」を参照してください。

**4. FHIR 対応 HealthLake データストアでの SMART の作成**  
FHIR HealthLake データストアで SMART を作成するには、 を指定する必要があります`IdentityProviderConfiguration`。詳細については、「[HealthLake データストアの作成](managing-data-stores-create.md)」を参照してください。

## SMART on FHIR のクライアントアプリケーションワークフロー
<a name="smart-on-fhir-client-app-workflow"></a>

次のセクションでは、クライアントアプリケーションを起動し、SMART on FHIR のコンテキスト内で HealthLake データストアで FHIR REST リクエストを正常に実行する方法について説明します。

**1. クライアントアプリケーションを使用して Well-Known Uniform Resource Identifier に`GET`リクエストを行う**  
SMART 対応クライアントアプリケーションは、HealthLake データストアの承認エンドポイントを検索する`GET`リクエストを行う必要があります。これは、Well-Known Uniform Resource Identifier (URI) リクエストを介して行われます。詳細については、「[FHIR 検出ドキュメントの SMART の取得](reference-smart-on-fhir-discovery-document.md)」を参照してください。

**2. アクセスとスコープのリクエスト**  
クライアントアプリケーションは、ユーザーがログインできるように、認可サーバーの認可エンドポイントを使用します。このプロセスはユーザーを認証します。スコープは、クライアントアプリケーションがアクセスできる HealthLake データストア内の FHIR リソースを定義するために使用されます。詳細については、「[HealthLake でサポートされている FHIR OAuth 2.0 スコープでの SMART](reference-smart-on-fhir-oauth-scopes.md)」を参照してください。

**3. アクセストークン**  
ユーザーが認証されたので、クライアントアプリケーションは認可サーバーから JWT アクセストークンを受け取ります。このトークンは、クライアントアプリケーションが HealthLake に FHIR REST リクエストを送信するときに提供されます。詳細については、「[トークンの検証](reference-smart-on-fhir-token-validation.md)」を参照してください。

**4. SMART on FHIR 対応 HealthLake データストアで FHIR REST API リクエストを行う**  
クライアントアプリケーションは、認可サーバーによって提供されるアクセストークンを使用してHealthLake データストアエンドポイントに FHIR REST API リクエストを送信できるようになりました。詳細については、「[SMART 対応 HealthLake データストアでの FHIR REST API リクエストの実行](reference-smart-on-fhir-request-example.md)」を参照してください。

**5. JWT アクセストークンを検証する**  
FHIR REST リクエストで送信されたアクセストークンを検証するには、Lambda 関数を使用します。詳細については、「[を使用したトークンの検証 AWS Lambda](reference-smart-on-fhir-token-validation.md)」を参照してください。

# SMART on FHIR の HealthLake 認証要件
<a name="reference-smart-on-fhir-authentication"></a>

SMART on FHIR 対応 HealthLake データストアの FHIR リソースにアクセスするには、クライアントアプリケーションが OAuth 2.0 準拠の認可サーバーによって承認され、FHIR REST API リクエストの一部として OAuth ベアラートークンを提示する必要があります。認可サーバーのエンドポイントを検索するには、Uniform Resource Identifier を介して FHIR Discovery Document の HealthLake SMART `Well-Known` を使用します。このプロセスについては、「[FHIR 検出ドキュメントの SMART の取得](reference-smart-on-fhir-discovery-document.md)」を参照してください。

SMART on FHIR HealthLake データストアを作成するときは、`CreateFHIRDatastore`リクエストの `metadata`要素で認可サーバーのエンドポイントとトークンエンドポイントを定義する必要があります。`metadata` 要素の定義の詳細については、「」を参照してください[HealthLake データストアの作成](managing-data-stores-create.md)。

認可サーバーエンドポイントを使用して、クライアントアプリケーションは認可サービスでユーザーを認証します。承認および認証されると、認可サービスによって JSON ウェブトークン (JWT) が生成され、クライアントアプリケーションに渡されます。このトークンには、クライアントアプリケーションが使用できる FHIR リソーススコープが含まれています。これにより、ユーザーがアクセスできるデータが制限されます。オプションで、起動スコープが指定されている場合、レスポンスにはそれらの詳細が含まれます。HealthLake でサポートされている FHIR スコープの SMART の詳細については、「」を参照してください[HealthLake でサポートされている FHIR OAuth 2.0 スコープでの SMART](reference-smart-on-fhir-oauth-scopes.md)。

認可サーバーによって付与された JWT を使用して、クライアントアプリケーションは FHIR が有効な HealthLake データストアで SMART への FHIR REST API 呼び出しを行います。JWT を検証してデコードするには、Lambda 関数を作成する必要があります。HealthLake は、FHIR REST API リクエストを受信すると、ユーザーに代わってこの Lambda 関数を呼び出します。スターター Lambda 関数の例については、「」を参照してください[を使用したトークンの検証 AWS Lambda](reference-smart-on-fhir-token-validation.md)。

## FHIR 対応 HealthLake データストアで SMART を作成するために必要な認可サーバー要素
<a name="datastore-auth-server"></a>

`CreateFHIRDatastore` リクエストでは、 `IdentityProviderConfiguration` オブジェクトの `metadata`要素の一部として認可エンドポイントとトークンエンドポイントを指定する必要があります。認可エンドポイントとトークンエンドポイントの両方が必要です。これを`CreateFHIRDatastore`リクエストで指定する方法の例については、「」を参照してください[HealthLake データストアの作成](managing-data-stores-create.md)。

## SMART on FHIR 対応 HealthLake データストアで FHIR REST API リクエストを完了するために必要なクレーム
<a name="server-response"></a>

 AWS Lambda 関数が SMART on FHIR 対応 HealthLake データストアでの有効な FHIR REST API リクエストであるためには、関数に次のクレームが含まれている必要があります。
+ `nbf`: [(前ではない) クレーム](https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.5) — 「nbf」クレーム (前ではない) は、JWT を処理に受け入れることができない時刻を識別します。「nbf」クレームの処理では、現在の日付/時刻が「nbf」クレームに記載されている以前の日付/時刻以降である必要があります。提供されているサンプル Lambda 関数は、サーバーレスポンス`iat`から に変換します`nbf`。
+ `exp`: [(有効期限) クレーム — ](https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.4)「有効期限」 (有効期限) クレームは、JWT を処理に受け入れてはならない 以降の有効期限を識別します。
+ `isAuthorized`: ブール値を に設定します`True`。認可サーバーでリクエストが承認されたことを示します。
+ `aud`: [(対象者) クレーム](https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.3) — 「aud」 (対象者) クレームは、JWT の対象となる受取人を識別します。これは、FHIR 対応 HealthLake データストアエンドポイントの SMART である必要があります。
+ `scope`: これは少なくとも 1 つの FHIR リソース関連のスコープである必要があります。このスコープは認可サーバーで定義されます。HealthLake で受け入れられる FHIR リソース関連のスコープの詳細については、「」を参照してください[HealthLake の FHIR リソーススコープに関する SMART](reference-smart-on-fhir-oauth-scopes.md#smart-on-fhir-scopes-rest)。

# HealthLake でサポートされている FHIR OAuth 2.0 スコープでの SMART
<a name="reference-smart-on-fhir-oauth-scopes"></a>

HealthLake は認可プロトコルとして OAuth 2.0 を使用します。認可サーバーでこのプロトコルを使用すると、クライアントアプリケーションがアクセスできる FHIR リソースの HealthLake データストアのアクセス許可 (作成、読み取り、更新、削除、検索) を定義できます。

SMART on FHIR フレームワークは、認可サーバーからリクエストできる一連のスコープを定義します。たとえば、患者が検査結果を表示したり、連絡先の詳細を表示したりできるようにのみ設計されたクライアントアプリケーションには、`read`スコープをリクエストする*権限*のみが必要です。

**注記**  
HealthLake は、以下で説明するように、FHIR V1 と V2 の両方で SMART をサポートします。SMART on FHIR [https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html#HealthLake-Type-IdentityProviderConfiguration-AuthorizationStrategy](https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html#HealthLake-Type-IdentityProviderConfiguration-AuthorizationStrategy)は、データストアの作成時に次の 3 つの値のいずれかに設定されます。  
`SMART_ON_FHIR_V1` – (読み取り/検索) および `read` (`write`create/update/delete) アクセス許可を含む FHIR V1 での SMART のみをサポートします。
`SMART_ON_FHIR` – 、、、`create`、および アクセス`search`許可を含む FHIR V1 `delete`および V2 での SMART `read` `update`のサポート。
`AWS_AUTH` – デフォルトの AWS HealthLake 認可戦略。FHIR 上の SMART とは関連していません。

## スタンドアロン起動スコープ
<a name="smart-on-fhir-scopes-launch"></a>

HealthLake は、スタンドアロン起動モードスコープ をサポートしています`launch/patient`。

スタンドアロン起動モードでは、ユーザーと患者がクライアントアプリケーションに知られていないため、クライアントアプリケーションは患者の臨床データへのアクセスをリクエストします。したがって、クライアントアプリケーションの認可リクエストは、患者スコープが返されることを明示的に要求します。認証が成功すると、認可サーバーはリクエストされた起動患者スコープを含むアクセストークンを発行します。必要な患者コンテキストは、認可サーバーのレスポンスでアクセストークンとともに提供されます。


**サポートされている起動モードスコープ**  

| スコープ | 説明 | 
| --- | --- | 
| `launch/patient` | OAuth 2.0 認可リクエストのパラメータ。認可レスポンスで患者データが返されるように要求します。 | 

## HealthLake の FHIR リソーススコープに関する SMART
<a name="smart-on-fhir-scopes-rest"></a>

HealthLake は、FHIR リソーススコープで 3 つのレベルの SMART を定義します。
+ `patient` スコープは、単一の患者に関する特定のデータへのアクセスを許可します。
+ `user` スコープは、ユーザーがアクセスできる特定のデータへのアクセスを許可します。
+ `system` スコープは、HealthLake データストアにあるすべての FHIR リソースへのアクセスを許可します。

以下のセクションでは、SMART on FHIR V1 または SMART on FHIR V2 を使用して FHIR リソーススコープを構築するための構文を一覧表示します。

**注記**  
SMART on FHIR 認可戦略は、データストアの作成時に設定されます。詳細については、*AWS HealthLake API リファレンス*[https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html#HealthLake-Type-IdentityProviderConfiguration-AuthorizationStrategy](https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html#HealthLake-Type-IdentityProviderConfiguration-AuthorizationStrategy)の「」を参照してください。

### HealthLake でサポートされている FHIR V1 スコープの SMART
<a name="reference-smart-on-fhir-v1"></a>

FHIR V1 で SMART を使用する場合、HealthLake の FHIR リソーススコープを構築するための一般的な構文は次のとおりです。次の例の URL パス全体を表示するには、**コピー**ボタンをスクロールします。

```
('patient' | 'user' | 'system') '/' (fhir-resource | '*') '.' ('read' | 'write' | '*')
```


**FHIR v1 でサポートされる認可スコープでの SMART**  

| スコープ構文 | スコープの例 | 結果 | 
| --- | --- | --- | 
| `patient/(fhir-resource \| '*').('read' \| 'write' \| '*')` | patient/AllergyIntolerance.\$1 | 患者クライアントアプリケーションには、記録されたすべてのアレルギーに対するインスタンスレベルの読み取り/書き込みアクセス権があります。 | 
| `user/(fhir-resource \| '*').('read' \| 'write' \| '*')` | user/Observation.read | ユーザークライアントアプリケーションには、記録されたすべての観測値へのインスタンスレベルの読み取り/書き込みアクセス権があります。 | 
| system/('read' \$1 'write' \$1 \$1) | system/\$1.\$1 | システムクライアントアプリケーションには、すべての FHIR リソースデータへの読み取り/書き込みアクセス権があります。 | 

### HealthLake でサポートされている FHIR V2 スコープの SMART
<a name="reference-smart-on-fhir-v2"></a>

FHIR V2 で SMART を使用する場合、HealthLake の FHIR リソーススコープを構築するための一般的な構文は次のとおりです。次の例の URL パス全体を表示するには、**コピー**ボタンをスクロールします。

```
('patient' | 'user' | 'system') '/' (fhir-resource | '*') '.' ('c' | 'r' | 'u' | 'd' | 's')
```

**注記**  
FHIR V2 で SMART を使用するには、 値を[https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html](https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html)データ型のメンバーであるメタデータ`capabilities`文字列[https://hl7.org/fhir/smart-app-launch/STU2/conformance.html#permissions](https://hl7.org/fhir/smart-app-launch/STU2/conformance.html#permissions)に渡す必要があります。  
HealthLake はきめ細かなスコープをサポートしています。詳細については、*「FHIR 米国コア実装ガイド*[」の「サポートされている詳細なスコープ](https://hl7.org/fhir/us/core/scopes.html#the-following-granular-scopes-shall-be-supported)」を参照してください。


**FHIR V2 でサポートされる SMART 認可スコープ**  

| スコープ構文 | V1 スコープの例 | 結果 | 
| --- | --- | --- | 
| `patient/Observation.rs` | user/Observation.read | 現在の患者のObservationリソースを読み取って検索するアクセス許可。 | 
| `system/*.cruds` | system/\$1.\$1 | システムクライアントアプリケーションには、すべての FHIR リソースデータへの完全なcreate/read/update/削除/検索アクセス権があります。 | 

# を使用したトークンの検証 AWS Lambda
<a name="reference-smart-on-fhir-token-validation"></a>

FHIR 対応データストアで HealthLake SMART を作成する場合は、`CreateFHIRDatastore`リクエストで AWS Lambda 関数の ARN を指定する必要があります。Lambda 関数の ARN は、 `IdpLambdaArn`パラメータを使用して `IdentityProviderConfiguration` オブジェクトで指定されます。

SMART on FHIR 対応データストアを作成する前に、Lambda 関数を作成する必要があります。データストアを作成すると、Lambda ARN を変更することはできません。データストアの作成時に指定した Lambda ARN を表示するには、 `DescribeFHIRDatastore` API アクションを使用します。

**FHIR REST リクエストが SMART on FHIR 対応データストアで成功するには、Lambda 関数が以下を実行する必要があります。**
+ HealthLake データストアエンドポイントに 1 秒未満でレスポンスを返します。
+ クライアントアプリケーションによって送信された REST API リクエストの承認ヘッダーで提供されるアクセストークンをデコードします。
+ FHIR REST API リクエストを実行するのに十分なアクセス許可を持つ IAM サービスロールを割り当てます。
+ FHIR REST API リクエストを完了するには、次のクレームが必要です。詳細については[必要なクレーム](reference-smart-on-fhir-authentication.md#server-response)を参照してください。
  + `nbf`
  + `exp`
  + `isAuthorized`
  + `aud`
  + `scope`

Lambda を使用する場合は、Lambda 関数に加えて実行ロールとリソースベースのポリシーを作成する必要があります。Lambda 関数の実行ロールは、実行時に必要な AWS のサービスおよびリソースにアクセスするためのアクセス許可を関数に付与する IAM ロールです。指定するリソースベースのポリシーでは、HealthLake がユーザーに代わって関数を呼び出すことを許可する必要があります。

このトピックのセクションでは、クライアントアプリケーションからのリクエスト例とデコードされたレスポンス、 AWS Lambda 関数の作成に必要なステップ、および HealthLake が引き受けることができるリソースベースのポリシーの作成方法について説明します。
+ [パート 1: Lambda 関数の作成](#smart-on-fhir-lambda-create)
+ [パート 2: AWS Lambda 関数で使用される HealthLake サービスロールの作成](#smart-on-fhir-lambda-service-role)
+ [パート 3: Lambda 関数の実行ロールの更新](#smart-on-fhir-lambda-service-role-execution-role)
+ [パート 4: Lambda 関数へのリソースポリシーの追加](#smart-on-fhir-lambda-invoke-healthlake)
+ [パート 5: Lambda 関数の同時実行のプロビジョニング](#smart-on-fhir-lambda-function-scaling)

## AWS Lambda 関数の作成
<a name="smart-on-fhir-lambda-create"></a>

このトピックで作成された Lambda 関数は、HealthLake が SMART on FHIR 対応データストアへのリクエストを受信するとトリガーされます。クライアントアプリケーションからのリクエストには、REST API コールと、アクセストークンを含む認可ヘッダーが含まれています。

```
GET https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/
Authorization: Bearer i8hweunweunweofiwweoijewiwe
```

このトピックの Lambda 関数の例では AWS Secrets Manager 、 を使用して認可サーバーに関連する認証情報を隠します。Lambda 関数で認可サーバーログインの詳細を直接提供しないことを強くお勧めします。

**Example 認可ベアラートークンを含む FHIR REST リクエストの検証**  
Lambda 関数の例は、SMART on FHIR 対応データストアに送信された FHIR REST リクエストを検証する方法を示しています。この Lambda 関数を実装する手順については、 step-by-steps 「」を参照してください[を使用した Lambda 関数の作成 AWS マネジメントコンソール](#create-lambda-console)。  
FHIR REST API リクエストに有効なデータストアエンドポイント、アクセストークン、REST オペレーションが含まれていない場合、Lambda 関数は失敗します。必要な認可サーバー要素の詳細については、「」を参照してください[必要なクレーム](reference-smart-on-fhir-authentication.md#server-response)。  

```
import base64
import boto3
import logging
import json
import os
from urllib import request, parse

logger = logging.getLogger()
logger.setLevel(logging.INFO)

## Uses Secrets manager to gain access to the access key ID and secret access key for the authorization server
client = boto3.client('secretsmanager', region_name="region-of-datastore")
response = client.get_secret_value(SecretId='name-specified-by-customer-in-secretsmanager')
secret = json.loads(response['SecretString'])
client_id = secret['client_id']
client_secret = secret['client_secret']


unencoded_auth = f'{client_id}:{client_secret}'
headers = {
  'Authorization': f'Basic {base64.b64encode(unencoded_auth.encode()).decode()}',
  'Content-Type': 'application/x-www-form-urlencoded'
}

auth_endpoint = os.environ['auth-server-base-url'] # Base URL of the Authorization server
user_role_arn = os.environ['iam-role-arn'] # The IAM role client application will use to complete the HTTP request on the datastore

def lambda_handler(event, context):
    if 'datastoreEndpoint' not in event or 'operationName' not in event or 'bearerToken' not in event:
    return {}

    datastore_endpoint = event['datastoreEndpoint']
    operation_name = event['operationName']
    bearer_token = event['bearerToken']
    logger.info('Datastore Endpoint [{}], Operation Name: [{}]'.format(datastore_endpoint, operation_name))

    ## To validate the token
    auth_response = auth_with_provider(bearer_token)
    logger.info('Auth response: [{}]'.format(auth_response))
    auth_payload = json.loads(auth_response)
    ## Required parameters needed to be sent to the datastore endpoint for the HTTP request to go through
    auth_payload["isAuthorized"] = bool(auth_payload["active"])
    auth_payload["nbf"] = auth_payload["iat"]
    return {"authPayload": auth_payload, "iamRoleARN": user_role_arn}

## access the server
def auth_with_provider(token):
    data = {'token': token, 'token_type_hint': 'access_token'}
    req = request.Request(url=auth_endpoint + '/v1/introspect', data=parse.urlencode(data).encode(), headers=headers)
    with request.urlopen(req) as resp:
    return resp.read().decode()
```

### を使用した Lambda 関数の作成 AWS マネジメントコンソール
<a name="create-lambda-console"></a>

次の手順では、SMART on FHIR 対応データストアで FHIR REST API リクエストを処理するときに HealthLake が引き受けるサービスロールが既に作成されていることを前提としています。サービスロールを作成していない場合でも、Lambda 関数を作成できます。Lambda 関数が機能する前に、サービスロールの ARN を追加する必要があります。サービスロールの作成と Lambda 関数での指定の詳細については、「」を参照してください。 [JWT のデコードに使用される AWS Lambda 関数で使用する HealthLake サービスロールの作成](#smart-on-fhir-lambda-service-role)

**Lambda 関数を作成するには (AWS マネジメントコンソール)**

1. Lambda コンソールの [[関数]](https://console.aws.amazon.com/lambda/home/functions) ページを開きます。

1. [**関数の作成**] を選択してください。

1. **[一から作成]** を選択します。

1. **基本情報** に**関数名**を入力します。**Runtime** で、Python ベースのランタイムを選択します。

1. **[Execution role]** (実行ロール) で **[Create a new role with basic Lambda permissions]** (基本的な Lambda アクセス権限で新しいロールを作成) を選択します。

   Lambda が、Amazon CloudWatch にログをアップロードする関数許可を付与する[実行ロール](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)を作成します。Lambda 関数は、関数を呼び出すときに実行ロールを引き受け、実行ロールを使用して AWS SDK の認証情報を作成します。

1. Code ****タブを選択し、サンプル Lambda 関数を追加します。

   Lambda 関数が使用するサービスロールをまだ作成していない場合は、サンプルの Lambda 関数が機能する前に作成する必要があります。Lambda 関数のサービスロールの作成の詳細については、「」を参照してください[JWT のデコードに使用される AWS Lambda 関数で使用する HealthLake サービスロールの作成](#smart-on-fhir-lambda-service-role)。

   ```
   import base64
   import boto3
   import logging
   import json
   import os
   from urllib import request, parse
   
   logger = logging.getLogger()
   logger.setLevel(logging.INFO)
   
   ## Uses Secrets manager to gain access to the access key ID and secret access key for the authorization server
   client = boto3.client('secretsmanager', region_name="region-of-datastore")
   response = client.get_secret_value(SecretId='name-specified-by-customer-in-secretsmanager')
   secret = json.loads(response['SecretString'])
   client_id = secret['client_id']
   client_secret = secret['client_secret']
   
   
   unencoded_auth = f'{client_id}:{client_secret}'
   headers = {
     'Authorization': f'Basic {base64.b64encode(unencoded_auth.encode()).decode()}',
     'Content-Type': 'application/x-www-form-urlencoded'
   }
   
   auth_endpoint = os.environ['auth-server-base-url'] # Base URL of the Authorization server
   user_role_arn = os.environ['iam-role-arn'] # The IAM role client application will use to complete the HTTP request on the datastore
   
   def lambda_handler(event, context):
       if 'datastoreEndpoint' not in event or 'operationName' not in event or 'bearerToken' not in event:
       return {}
   
       datastore_endpoint = event['datastoreEndpoint']
       operation_name = event['operationName']
       bearer_token = event['bearerToken']
       logger.info('Datastore Endpoint [{}], Operation Name: [{}]'.format(datastore_endpoint, operation_name))
   
       ## To validate the token
       auth_response = auth_with_provider(bearer_token)
       logger.info('Auth response: [{}]'.format(auth_response))
       auth_payload = json.loads(auth_response)
       ## Required parameters needed to be sent to the datastore endpoint for the HTTP request to go through
       auth_payload["isAuthorized"] = bool(auth_payload["active"])
       auth_payload["nbf"] = auth_payload["iat"]
       return {"authPayload": auth_payload, "iamRoleARN": user_role_arn}
   
   ## Access the server
   def auth_with_provider(token):
       data = {'token': token, 'token_type_hint': 'access_token'}
       req = request.Request(url=auth_endpoint + '/v1/introspect', data=parse.urlencode(data).encode(), headers=headers)
       with request.urlopen(req) as resp:
       return resp.read().decode()
   ```

### Lambda 関数の実行ロールの変更
<a name="modify-lambda-execution-role"></a>

Lambda 関数を作成したら、Secrets Manager を呼び出すために必要なアクセス許可を含めるように実行ロールを更新する必要があります。Secrets Manager では、作成する各シークレットに ARN があります。最小権限を適用するには、実行ロールが Lambda 関数の実行に必要なリソースにのみアクセスできる必要があります。

Lambda 関数の実行ロールを変更するには、IAM コンソールで検索するか、Lambda コンソールで**設定**を選択します。Lambda 関数の実行ロールの管理の詳細については、「」を参照してください[Lambda 実行ロール](#smart-on-fhir-lambda-service-role-execution-role)。

**Example へのアクセスを許可する Lambda 関数実行ロール `GetSecretValue`**  
IAM アクション`GetSecretValue`を実行ロールに追加すると、サンプルの Lambda 関数が機能するために必要なアクセス許可が付与されます。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "secretsmanager:GetSecretValue",
            "Resource": "arn:aws:secretsmanager:us-east-1:123456789012:secret:secret-name-DKodTA"
        }
    ]
}
```

この時点で、FHIR 対応データストアで SMART に送信される FHIR REST リクエストの一部として提供されるアクセストークンを検証するために使用できる Lambda 関数を作成しました。

## JWT のデコードに使用される AWS Lambda 関数で使用する HealthLake サービスロールの作成
<a name="smart-on-fhir-lambda-service-role"></a>

**ペルソナ: IAM 管理者**  
IAM ポリシーを追加または削除し、新しい IAM ID を作成できるユーザー。  

**サービスロール**  
 サービスロールとは、サービスがユーザーに代わってアクションを実行するために引き受ける [IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)です。IAM 管理者は、IAM 内からサービスロールを作成、変更、削除できます。詳細については、IAM ユーザーガイド**の [AWS のサービスに許可を委任するロールを作成する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)を参照してください。

JSON ウェブトークン (JWT) がデコードされると、認可 Lambda は IAM ロール ARN も返す必要があります。このロールには、REST API リクエストを実行するために必要なアクセス許可が必要です。そうしないと、アクセス許可が不十分であるために失敗します。

IAM を使用してカスタムポリシーを設定する場合は、必要な最小限のアクセス許可を付与することをお勧めします。詳細については、*IAM ユーザーガイド*の[「最小特権のアクセス許可を適用する](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)」を参照してください。

認可 Lambda 関数で指定する HealthLake サービスロールを作成するには、2 つのステップが必要です。
+ まず、IAM ポリシーを作成する必要があります。ポリシーは、認可サーバーでスコープを指定した FHIR リソースへのアクセスを指定する必要があります。
+ 次に、サービスロールを作成する必要があります。ロールを作成するときは、信頼関係を指定し、ステップ 1 で作成したポリシーをアタッチします。信頼関係はHealthLake をサービスプリンシパルとして指定します。このステップでは、HealthLake データストア ARN と AWS アカウント ID を指定する必要があります。

### 新しい IAM ポリシーの作成
<a name="lambda-service-role-part-1"></a>

認可サーバーで定義するスコープによって、認証されたユーザーが HealthLake データストアでアクセスできる FHIR リソースが決まります。

作成した IAM ポリシーは、定義したスコープに合わせて調整できます。

IAM ポリシーステートメントの `Action`要素で以下のアクションを定義できます。テーブル`Action`内の ごとに、 を定義できます`Resource types`。HealthLake では、データストアは、IAM アクセス許可ポリシーステートメントの `Resource`要素で定義できるサポートされている唯一のリソースタイプです。

個々の FHIR リソースは、IAM アクセス許可ポリシーの 要素として定義できるリソースではありません。


** HealthLake によって定義されたアクション**  

| アクション | 説明 | アクセスレベル | リソースタイプ (必須) | 
| --- | --- | --- | --- | 
| CreateResource | リソースの作成にアクセス許可を付与します | 書き込み | データストア ARN: arn:aws:healthlake:your-region:111122223333:datastore/fhir/your-datastore-id | 
| DeleteResource | リソースを削除する許可を付与 | 書き込み | データストア ARN: arn:aws:healthlake:your-region:111122223333:datastore/fhir/your-datastore-id | 
| ReadResource | リソースを読み取るアクセス許可を付与します | 読み取り | データストア ARN: arn:aws:healthlake:your-region:111122223333:datastore/fhir/your-datastore-id | 
| SearchWithGet | GET メソッドでリソースを検索する許可を付与 | 読み取り | データストア ARN: arn:aws:healthlake:your-region:111122223333:datastore/fhir/your-datastore-id | 
| SearchWithPost | POST メソッドでリソースを検索する許可を付与 | 読み取り | データストア ARN: arn:aws:healthlake:your-region:111122223333:datastore/fhir/your-datastore-id | 
| StartFHIRExportJobWithPost | GET で FHIR エクスポートジョブを開始する許可を付与 | 書き込み | データストア ARN: arn:aws:healthlake:your-region:111122223333:datastore/fhir/your-datastore-id | 
| UpdateResource | リソースを更新する許可を付与 | 書き込み  | データストア ARN: arn:aws:healthlake:your-region:111122223333:datastore/fhir/your-datastore-id | 

開始するには、 を使用できます`AmazonHealthLakeFullAccess`。このポリシーは、データストアで見つかったすべての FHIR リソースの読み取り、書き込み、検索、エクスポートを許可します。データストアに読み取り専用アクセス許可を付与するには、 を使用します`AmazonHealthLakeReadOnlyAccess`。

、、または IAM SDK を使用したカスタムポリシーの作成の詳細については AWS マネジメントコンソール AWS CLI、IAM *ユーザーガイド*の「IAM ポリシー[の作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)」を参照してください。 SDKs

### HealthLake のサービスロールの作成 (IAM コンソール)
<a name="lambda-service-role-part-2"></a>

この手順を使用して、サービスロールを作成します。サービスを作成するときは、IAM ポリシーも指定する必要があります。

**HealthLake のサービスロールを作成するには (IAM コンソール)**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) で IAM コンソールを開きます。

1. IAM コンソールのナビゲーションペインで **[ロール]** を選択します。

1. 続いて、**[ロールの作成]** を選択します。

1. **信頼エンティティの選択**ページで、**カスタム信頼ポリシー**を選択します。

1. 次に、**カスタム信頼ポリシー**で、次のようにサンプルポリシーを更新します。をアカウント番号**your-account-id**に置き換え、インポートジョブまたはエクスポートジョブで使用するデータストアの ARN を追加します。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "sts:AssumeRole",
               "Principal": {
                   "Service": "healthlake.amazonaws.com"
               },
               "Condition": {
                   "StringEquals": {
                       "aws:SourceAccount": "123456789012"
                   },
                   "ArnEquals": {
                       "aws:SourceArn": "arn:aws:healthlake:us-east-1:123456789012:datastore/fhir/your-datastore-id"
                   }
               }
           }
       ]
   }
   ```

------

1. その後、**[Next]** を選択します。

1. アクセス**許可の追加**ページで、HealthLake サービスが引き受けるポリシーを選択します。ポリシーを検索するには、アクセス**許可ポリシー**で検索します。

1. 次に、**ポリシーのアタッチ**を選択します。

1. 次に**、名前、レビュー、作成**のページで、**ロール名**に名前を入力します。

1. (オプション) **説明** に、ロールの簡単な説明を追加します。

1. 可能な場合は、このロールの目的を識別するのに役立つロール名またはロール名サフィックスを入力します。ロール名は AWS アカウントアカウント内で一意である必要があります。大文字と小文字は区別されません。例えば、**PRODROLE** と **prodrole** というロール名を両方作成することはできません。多くのエンティティによりロールが参照されるため、作成後にロール名を変更することはできません。

1. ロールの詳細を確認し、**ロールの作成**を選択します。

サンプル Lambda 関数でロール ARN を指定する方法については、「」を参照してください[AWS Lambda 関数の作成](#smart-on-fhir-lambda-create)。

## Lambda 実行ロール
<a name="smart-on-fhir-lambda-service-role-execution-role"></a>

Lambda 関数の実行ロールは、 AWS サービスとリソースへのアクセス許可を関数に付与する IAM ロールです。このページでは、Lambda 関数の実行ロールを作成、表示、および管理する方法について説明します。

デフォルトでは、 を使用して新しい Lambda 関数を作成すると、Lambda は最小限のアクセス許可で実行ロールを作成します AWS マネジメントコンソール。実行ロールで付与されたアクセス許可を管理するには、*Lambda デベロッパーガイド*の[「IAM コンソールでの実行ロールの作成](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html#permissions-executionrole-console)」を参照してください。

このトピックで提供されるサンプル Lambda 関数は、Secrets Manager を使用して認可サーバーの認証情報を隠します。

作成した IAM ロールと同様に、最小特権のベストプラクティスに従うことが重要です。開発フレーズ中に、必要以上のアクセス許可を付与することがあります。ベストプラクティスとしては、本番環境に関数を公開する前に、ポリシーを調整して必要なアクセス許可のみを含めるようにします。詳細については、*IAM ユーザーガイド*の[「最小権限の適用](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)」を参照してください。

## HealthLake に Lambda 関数のトリガーを許可する
<a name="smart-on-fhir-lambda-invoke-healthlake"></a>

HealthLake がユーザーに代わって Lambda 関数を呼び出すには、以下を実行する必要があります。
+ HealthLake が`CreateFHIRDatastore`リクエストで呼び出す Lambda 関数の ARN と`IdpLambdaArn`等しく設定する必要があります。
+ HealthLake がユーザーに代わって Lambda 関数を呼び出すことを許可するリソースベースのポリシーが必要です。

HealthLake が SMART on FHIR 対応データストアで FHIR REST API リクエストを受信すると、ユーザーに代わってデータストアの作成時に指定された Lambda 関数を呼び出すアクセス許可が必要です。HealthLake アクセスを許可するには、リソースベースのポリシーを使用します。Lambda 関数のリソースベースのポリシーの作成の詳細については、「 *AWS Lambda デベロッパーガイド*[」の「Lambda 関数を呼び出すことを AWS に許可](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html#permissions-resource-serviceinvoke)する」を参照してください。

## Lambda 関数の同時実行のプロビジョニング
<a name="smart-on-fhir-lambda-function-scaling"></a>

**重要**  
HealthLake では、Lambda 関数の最大実行時間が 1 秒 (1000 ミリ秒) 未満である必要があります。  
Lambda 関数が実行時間の制限を超えると、TimeOut 例外が発生します。

この例外が発生しないように、プロビジョニングされた同時実行を設定することをお勧めします。呼び出しの増加前にプロビジョニングされた同時実行数を割り当てることにより、すべてのリクエストが、短いレイテンシーで、初期化されたインスタンスによって処理されるようにできます。プロビジョニングされた同時実行の設定の詳細については、*Lambda デベロッパーガイド*の[「プロビジョニングされた同時実行の設定](https://docs.aws.amazon.com/ambda/latest/dg/provisioned-concurrency.html)」を参照してください。

現在、Lambda 関数の平均実行時間を確認するには、Lambda コンソールの Lambda 関数**のモニタリング**ページを使用します。デフォルトでは、Lambda コンソールには、関数コードがイベントの処理に費やした平均、最小、最大時間を示す**期間**グラフが表示されます。Lambda 関数のモニタリングの詳細については、[Lambda デベロッパーガイドの「Lambda コンソールでの関数のモニタリング](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions-access-metrics.html#monitoring-console-graph-types)」を参照してください。 **

Lambda 関数の同時実行を既にプロビジョニングしていて、それをモニタリングする場合は、*Lambda デベロッパーガイド*の[「同時実行のモニタリング](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-concurrency.html)」を参照してください。

# SMART on FHIR 対応 HealthLake データストアでのきめ細かな認可の使用
<a name="reference-smart-on-fhir-fine-grained-authorization"></a>

[スコープ](reference-smart-on-fhir-oauth-scopes.md#smart-on-fhir-scopes-rest)だけでは、リクエスタがデータストア内のどのデータにアクセスすることを許可されているかについて必要な具体性は得られません。きめ細かな認可を使用すると、FHIR 対応の HealthLake データストアで SMART へのアクセスを許可するときに、より高いレベルの特異度を実現できます。きめ細かな認可を使用するには、`CreateFHIRDatastore`リクエストの `IdentityProviderConfiguration`パラメータ`True`で を に`FineGrainedAuthorizationEnabled`等しく設定します。

きめ細かな認可を有効にした場合、認可サーバーはアクセストークン`id_token`とともに で`fhirUser`スコープを返します。これにより、クライアントアプリケーションでユーザーに関する情報を取得できます。クライアントアプリケーションは、`fhirUser`クレームを現在のユーザーを表す FHIR リソースの URI として扱う必要があります。これは、`Patient`、`Practitioner`、または `RelatedPerson` です。認可サーバーのレスポンスには、ユーザーがアクセスできるデータを定義する`user/`スコープも含まれています。これは、FHIR リソース固有のスコープに関連するスコープに定義された構文を使用します。

```
user/(fhir-resource | '*').('read' | 'write' | '*')
```

以下は、きめ細かな認可を使用してデータアクセス関連の FHIR リソースタイプをさらに指定する方法の例です。
+ `fhirUser` が の場合`Practitioner`、きめ細かな認可によって、ユーザーがアクセスできる患者のコレクションが決まります。へのアクセス`fhirUser`は、患者が一般臨床医`fhirUser`として を参照している患者に対してのみ許可されます。

  ```
  Patient.generalPractitioner : [{Reference(Practitioner)}]
  ```
+ `fhirUser` が `Patient`または `RelatedPerson`で、リクエストで参照される患者が と異なる場合`fhirUser`、きめ細かな承認により、リクエストされた患者の `fhirUser` へのアクセスが決まります。リクエストされた`Patient`リソースで関係が指定されている場合、アクセスが許可されます。

  ```
  Patient.link.other : {Reference(Patient|RelatedPerson)}
  ```

# FHIR 検出ドキュメントの SMART の取得
<a name="reference-smart-on-fhir-discovery-document"></a>

SMART は、HealthLake データストアがサポートする認可エンドポイント URLsと機能をクライアントが学習できるようにする Discovery Document を定義します。この情報は、クライアントが認可リクエストを適切なエンドポイントに転送し、HealthLake データストアがサポートする認可リクエストを構築するのに役立ちます。

クライアントアプリケーションが HealthLake への FHIR REST リクエストを成功させるには、HealthLake データストアで定義されている認可要件を収集する必要があります。このリクエストを成功させるには、ベアラートークン (認可) *は必要ありません*。

**HealthLake データストアの検出ドキュメントをリクエストするには**  


1. HealthLake `region`と `datastoreId`の値を収集します。詳細については、「[データストアのプロパティの取得](managing-data-stores-describe.md)」を参照してください。

1. HealthLake `region`と の収集された値を使用して、リクエストの URL を作成します`datastoreId`。URL のエンドポイント`/.well-known/smart-configuration`に追加します。次の例の URL パス全体を表示するには、**コピー**ボタンをスクロールします。

   ```
   https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/.well-known/smart-configuration
   ```

1. [AWS 署名バージョン 4 ](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)の署名プロトコル`GET`を使用してリクエストを送信します。例全体を表示するには、**コピー**ボタンをスクロールします。

------
#### [ curl ]

   ```
   curl --request GET \
     'https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/.well-known/smart-configuration \
     --aws-sigv4 'aws:amz:region:healthlake' \
     --user "$AWS_ACCESS_KEY_ID:$AWS_SECRET_ACCESS_KEY" \
     --header "x-amz-security-token:$AWS_SESSION_TOKEN" \
     --header 'Accept: application/json'
   ```

------

   HealthLake データストアの検出ドキュメントは JSON BLOB として を返します。ここでは、 `authorization_endpoint`と `token_endpoint`、およびデータストアの仕様と定義された機能を確認できます。

   ```
   {
       "authorization_endpoint": "https://oidc.example.com/authorize",
       "token_endpoint": "https://oidc.example.com/oauth/token",
       "capabilities": [
           "launch-ehr",
           "client-public"
       ]
   }
   ```

   クライアントアプリケーションを起動するには、 `authorization_endpoint`と の両方`token_endpoint`が必要です。
   + **認可エンドポイント** — クライアントアプリケーションまたはユーザーを認可するために必要な URL。
   + **トークンエンドポイント** — クライアントアプリケーションが通信に使用する認可サーバーのエンドポイント。

# SMART 対応 HealthLake データストアでの FHIR REST API リクエストの実行
<a name="reference-smart-on-fhir-request-example"></a>

SMART on FHIR 対応の HealthLake データストアで FHIR REST API リクエストを行うことができます。次の例は、認可ヘッダーに JWT を含むクライアントアプリケーションからのリクエストと、Lambda がレスポンスをデコードする方法を示しています。クライアントアプリケーションリクエストが承認され、認証されたら、認可サーバーからベアラートークンを受信する必要があります。SMART on FHIR 対応 HealthLake データストアで FHIR REST API リクエストを送信するときは、認可ヘッダーのベアラートークンを使用します。

```
GET https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Patient/[ID]
Authorization: Bearer auth-server-provided-bearer-token
```

ベアラートークンが認可ヘッダーで見つかり、IAM ID AWS が検出されなかったため、HealthLake は SMART on FHIR 対応 HealthLake データストアの作成時に指定された Lambda 関数を呼び出します。トークンが Lambda 関数によって正常にデコードされると、次のレスポンス例が HealthLake に送信されます。

```
{
  "authPayload": {
    "iss": "https://authorization-server-endpoint/oauth2/token", # The issuer identifier of the authorization server
    "aud": "https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/", # Required, data store endpoint
    "iat": 1677115637,  # Identifies the time at which the token was issued
    "nbf": 1677115637,  # Required, the earliest time the JWT would be valid
    "exp": 1997877061,  # Required, the time at which the JWT is no longer valid
    "isAuthorized": "true",  # Required, boolean indicating the request has been authorized
    "uid": "100101",  # Unique identifier returned by the auth server
    "scope": "system/*.*" # Required, the scope of the request
  },
  "iamRoleARN": "iam-role-arn" #Required, IAM role to complete the request
}
```