

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# SMART pada dukungan FHIR untuk AWS HealthLake
<a name="reference-smart-on-fhir"></a>

Aplikasi Medis yang Dapat Diganti dan Teknologi yang Dapat Digunakan Kembali (SMART) pada penyimpanan HealthLake data berkemampuan FHIR memungkinkan akses ke SMART pada aplikasi yang sesuai dengan FHIR. HealthLake Data diakses dengan mengautentikasi dan mengotorisasi permintaan menggunakan server otorisasi pihak ketiga. Jadi, alih-alih mengelola kredensil pengguna melalui AWS Identity and Access Management, Anda melakukannya menggunakan SMART pada server otorisasi yang sesuai dengan FHIR.

**catatan**  
HealthLake mendukung SMART pada FHIR versi 1.0 dan 2.0. Untuk mempelajari lebih lanjut tentang kerangka kerja ini, lihat [Peluncuran Aplikasi SMART](https://www.hl7.org/fhir/smart-app-launch/) di dokumentasi *FHIR R4*.  
HealthLake penyimpanan data mendukung kerangka kerja otentikasi dan otorisasi berikut untuk SMART pada permintaan FHIR:  
**OpenID (AuthN)**: untuk mengautentikasi aplikasi orang atau klien adalah siapa (atau apa) yang mereka klaim. 
**OAuth 2.0 (AuthZ)**: untuk mengotorisasi sumber daya FHIR mana di penyimpanan HealthLake data Anda, permintaan yang diautentikasi dapat dibaca atau ditulis. Ini ditentukan oleh cakupan yang diatur di server otorisasi Anda.

Anda dapat membuat SMART di penyimpanan data berkemampuan FHIR menggunakan AWS CLI atau AWS SDKs. Lihat informasi yang lebih lengkap di [Membuat penyimpanan HealthLake data](managing-data-stores-create.md).

**Topics**
+ [Memulai SMART di FHIR](reference-smart-on-fhir-getting-started.md)
+ [HealthLake persyaratan otentikasi untuk SMART di FHIR](reference-smart-on-fhir-authentication.md)
+ [SMART pada cakupan FHIR OAuth 2.0 didukung oleh HealthLake](reference-smart-on-fhir-oauth-scopes.md)
+ [Validasi Token menggunakan AWS Lambda](reference-smart-on-fhir-token-validation.md)
+ [Menggunakan otorisasi berbutir halus dengan SMART pada penyimpanan data yang diaktifkan FHIR HealthLake](reference-smart-on-fhir-fine-grained-authorization.md)
+ [Mengambil SMART pada Dokumen Penemuan FHIR](reference-smart-on-fhir-discovery-document.md)
+ [Membuat permintaan FHIR REST API pada penyimpanan data berkemampuan SMART HealthLake](reference-smart-on-fhir-request-example.md)

# Memulai SMART di FHIR
<a name="reference-smart-on-fhir-getting-started"></a>

Topik berikut menjelaskan cara memulai dengan SMART pada otorisasi FHIR untuk. AWS HealthLake Mereka termasuk sumber daya yang harus Anda sediakan di AWS akun Anda, pembuatan SMART di penyimpanan HealthLake data yang diaktifkan FHIR, dan contoh bagaimana SMART pada aplikasi klien FHIR berinteraksi dengan server otorisasi dan penyimpanan data. HealthLake 

**Topics**
+ [Menyiapkan sumber daya untuk SMART di FHIR](#smart-on-fhir-resources)
+ [Alur kerja aplikasi klien untuk SMART di FHIR](#smart-on-fhir-client-app-workflow)

## Menyiapkan sumber daya untuk SMART di FHIR
<a name="smart-on-fhir-resources"></a>

Langkah-langkah berikut menentukan bagaimana SMART pada permintaan FHIR ditangani oleh HealthLake dan sumber daya yang dibutuhkan agar mereka berhasil. Elemen-elemen berikut bekerja sama dalam alur kerja untuk membuat SMART pada permintaan FHIR:
+ **Pengguna akhir**: Umumnya, pasien atau dokter menggunakan SMART pihak ketiga pada aplikasi FHIR untuk mengakses data di penyimpanan data. HealthLake 
+ **SMART pada aplikasi FHIR (disebut sebagai aplikasi klien)**: Aplikasi yang ingin mengakses data yang ditemukan di penyimpanan HealthLake data.
+ Server **otorisasi: Server** yang sesuai dengan OpenID Connect yang dapat mengautentikasi pengguna dan mengeluarkan token akses.
+ **Penyimpanan HealthLake data: SMART pada penyimpanan** HealthLake data berkemampuan FHIR yang menggunakan fungsi Lambda untuk menanggapi permintaan FHIR REST yang menyediakan token pembawa.

Agar elemen-elemen ini bekerja sama, Anda harus membuat sumber daya berikut.

**catatan**  
[Sebaiknya buat SMART Anda di penyimpanan HealthLake data berkemampuan FHIR setelah Anda menyiapkan server otorisasi, menentukan [cakupan](reference-smart-on-fhir-oauth-scopes.md) yang diperlukan di dalamnya, dan membuat AWS Lambda fungsi untuk menangani introspeksi token.](reference-smart-on-fhir-token-validation.md)

**1. Siapkan titik akhir server otorisasi**  
Untuk menggunakan kerangka kerja SMART pada FHIR, Anda perlu menyiapkan server otorisasi pihak ketiga yang dapat memvalidasi permintaan FHIR REST yang dibuat di penyimpanan data. Untuk informasi selengkapnya, lihat [HealthLake persyaratan otentikasi untuk SMART di FHIR](reference-smart-on-fhir-authentication.md).

**2. Tentukan cakupan pada server otorisasi Anda untuk mengontrol tingkat akses penyimpanan HealthLake data**  
Kerangka kerja SMART on FHIR menggunakan OAuth cakupan untuk menentukan sumber daya FHIR apa yang dapat diakses oleh permintaan yang diautentikasi dan sejauh mana. Mendefinisikan cakupan adalah cara untuk merancang hak istimewa paling sedikit. Untuk informasi selengkapnya, lihat [SMART pada cakupan FHIR OAuth 2.0 didukung oleh HealthLake](reference-smart-on-fhir-oauth-scopes.md).

**3. Siapkan AWS Lambda fungsi yang mampu melakukan introspeksi token**  
Permintaan FHIR REST yang dikirim oleh aplikasi klien pada SMART pada penyimpanan data berkemampuan FHIR berisi JSON Web Token (JWT). Untuk informasi lebih lanjut, lihat [Menguraikan kode](reference-smart-on-fhir-token-validation.md) JWT.

**4. Buat SMART di penyimpanan HealthLake data berkemampuan FHIR**  
Untuk membuat SMART di penyimpanan HealthLake data FHIR, Anda perlu menyediakan file`IdentityProviderConfiguration`. Untuk informasi selengkapnya, lihat [Membuat penyimpanan HealthLake data](managing-data-stores-create.md).

## Alur kerja aplikasi klien untuk SMART di FHIR
<a name="smart-on-fhir-client-app-workflow"></a>

Bagian berikut menjelaskan cara meluncurkan aplikasi klien dan membuat permintaan FHIR REST yang berhasil pada penyimpanan HealthLake data dalam konteks SMART di FHIR.

**1. Buat `GET` permintaan ke Pengenal Sumber Daya Seragam Terkenal menggunakan aplikasi klien**  
Aplikasi klien berkemampuan SMART harus membuat `GET` permintaan untuk menemukan titik akhir otorisasi penyimpanan HealthLake data Anda. Ini dilakukan melalui permintaan Pengenal Sumber Daya Seragam Terkenal (URI). Untuk informasi selengkapnya, lihat [Mengambil SMART pada Dokumen Penemuan FHIR](reference-smart-on-fhir-discovery-document.md).

**2. Minta akses dan cakupan**  
Aplikasi klien menggunakan titik akhir otorisasi dari server otorisasi, sehingga pengguna dapat login. Proses ini mengotentikasi pengguna. Cakupan digunakan untuk menentukan sumber daya FHIR apa yang ada di penyimpanan HealthLake data Anda yang dapat diakses oleh aplikasi klien. Untuk informasi selengkapnya, lihat [SMART pada cakupan FHIR OAuth 2.0 didukung oleh HealthLake](reference-smart-on-fhir-oauth-scopes.md). 

**3. Token akses**  
Sekarang pengguna telah diautentikasi, aplikasi klien menerima token akses JWT dari server otorisasi. Token ini disediakan ketika aplikasi klien mengirimkan permintaan FHIR REST ke HealthLake. Untuk informasi selengkapnya, lihat [Validasi token](reference-smart-on-fhir-token-validation.md).

**4. Buat permintaan FHIR REST API di SMART di penyimpanan data berkemampuan HealthLake FHIR**  
Aplikasi klien sekarang dapat mengirim permintaan FHIR REST API ke titik akhir penyimpanan HealthLake data menggunakan token akses yang disediakan oleh server otorisasi. Untuk informasi selengkapnya, lihat [Membuat permintaan FHIR REST API pada penyimpanan data berkemampuan SMART HealthLake](reference-smart-on-fhir-request-example.md).

**5. Validasi token akses JWT**  
Untuk memvalidasi token akses yang dikirim dalam permintaan FHIR REST, gunakan fungsi Lambda. Lihat informasi yang lebih lengkap di [Validasi Token menggunakan AWS Lambda](reference-smart-on-fhir-token-validation.md).

# HealthLake persyaratan otentikasi untuk SMART di FHIR
<a name="reference-smart-on-fhir-authentication"></a>

Untuk mengakses sumber daya FHIR di SMART pada penyimpanan HealthLake data berkemampuan FHIR, aplikasi klien harus diotorisasi oleh server otorisasi yang OAuth sesuai dengan 2.0 dan menyajikan token OAuth Pembawa sebagai bagian dari permintaan FHIR REST API. Untuk menemukan titik akhir server otorisasi, gunakan HealthLake SMART pada FHIR Discovery Document melalui `Well-Known` Uniform Resource Identifier. Untuk mempelajari lebih lanjut tentang proses ini, lihat[Mengambil SMART pada Dokumen Penemuan FHIR](reference-smart-on-fhir-discovery-document.md).

Saat Anda membuat SMART di penyimpanan HealthLake data FHIR, Anda harus menentukan titik akhir server otorisasi dan titik akhir token dalam `metadata` elemen permintaan. `CreateFHIRDatastore` Untuk mempelajari lebih lanjut tentang mendefinisikan `metadata` elemen, lihat[Membuat penyimpanan HealthLake data](managing-data-stores-create.md).

Menggunakan titik akhir server otorisasi, aplikasi klien akan mengautentikasi pengguna dengan layanan otorisasi. Setelah diotorisasi dan diautentikasi, JSON Web Token (JWT) dihasilkan oleh layanan otorisasi dan diteruskan ke aplikasi klien. Token ini berisi cakupan sumber daya FHIR yang diizinkan untuk digunakan oleh aplikasi klien, yang pada gilirannya membatasi data apa yang dapat diakses pengguna. Secara opsional, jika ruang lingkup peluncuran disediakan maka respons akan berisi detail tersebut. Untuk mempelajari lebih lanjut tentang SMART pada cakupan FHIR yang didukung oleh HealthLake, lihat. [SMART pada cakupan FHIR OAuth 2.0 didukung oleh HealthLake](reference-smart-on-fhir-oauth-scopes.md)

Menggunakan JWT yang diberikan oleh server otorisasi, aplikasi klien membuat panggilan FHIR REST API ke SMART di penyimpanan data berkemampuan FHIR. HealthLake Untuk memvalidasi dan memecahkan kode JWT, Anda perlu membuat fungsi Lambda. HealthLake memanggil fungsi Lambda ini atas nama Anda saat permintaan FHIR REST API diterima. Untuk melihat contoh fungsi Lambda starter, lihat. [Validasi Token menggunakan AWS Lambda](reference-smart-on-fhir-token-validation.md)

## Elemen server otorisasi diperlukan untuk membuat SMART di penyimpanan data berkemampuan HealthLake FHIR
<a name="datastore-auth-server"></a>

Dalam `CreateFHIRDatastore` permintaan, Anda perlu memberikan titik akhir otorisasi dan titik akhir token sebagai bagian dari `metadata` elemen dalam objek. `IdentityProviderConfiguration` Baik titik akhir otorisasi dan titik akhir token diperlukan. Untuk melihat contoh bagaimana ini ditentukan dalam `CreateFHIRDatastore` permintaan, lihat[Membuat penyimpanan HealthLake data](managing-data-stores-create.md).

## Klaim yang diperlukan untuk menyelesaikan permintaan FHIR REST API pada SMART di penyimpanan data berkemampuan HealthLake FHIR
<a name="server-response"></a>

 AWS Lambda Fungsi Anda harus berisi klaim berikut agar menjadi permintaan FHIR REST API yang valid pada SMART di penyimpanan HealthLake data berkemampuan FHIR.
+ `nbf`: [(Bukan Sebelum) Klaim - Klaim](https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.5) “nbf” (bukan sebelumnya) mengidentifikasi waktu sebelum JWT TIDAK BOLEH diterima untuk diproses. Pemrosesan klaim “nbf” mensyaratkan bahwa arus date/time HARUS setelah atau sama dengan yang tidak date/time tercantum sebelumnya dalam klaim “nbf”. Contoh fungsi Lambda yang kami sediakan mengkonversi `iat` dari respons server menjadi. `nbf` 
+ `exp`: [(Waktu Kedaluwarsa) Klaim - Klaim](https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.4) “exp” (waktu kedaluwarsa) mengidentifikasi waktu kedaluwarsa pada atau setelah itu JWT tidak boleh diterima untuk diproses.
+ `isAuthorized`: Sebuah boolean diatur ke`True`. Menunjukkan bahwa permintaan telah diotorisasi pada server otorisasi.
+ `aud`: [(Audiens) Klaim - Klaim](https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.3) “aud” (audiens) mengidentifikasi penerima yang dimaksudkan untuk JWT. Ini harus menjadi SMART pada titik akhir penyimpanan HealthLake data yang diaktifkan FHIR.
+ `scope`: Ini harus setidaknya satu ruang lingkup terkait sumber daya FHIR. Cakupan ini didefinisikan pada server otorisasi Anda. Untuk mempelajari lebih lanjut tentang cakupan terkait sumber daya FHIR yang diterima oleh HealthLake, lihat. [SMART pada cakupan sumber daya FHIR untuk HealthLake](reference-smart-on-fhir-oauth-scopes.md#smart-on-fhir-scopes-rest)

# SMART pada cakupan FHIR OAuth 2.0 didukung oleh HealthLake
<a name="reference-smart-on-fhir-oauth-scopes"></a>

HealthLake menggunakan OAuth 2.0 sebagai protokol otorisasi. Menggunakan protokol ini di server otorisasi Anda memungkinkan Anda untuk menentukan izin penyimpanan HealthLake data (membuat, membaca, memperbarui, menghapus, dan mencari) untuk sumber daya FHIR yang dapat diakses oleh aplikasi klien.

SMART on FHIR framework mendefinisikan satu set cakupan yang dapat diminta dari server otorisasi. Misalnya, aplikasi klien yang hanya dirancang untuk memungkinkan pasien melihat hasil lab mereka atau melihat detail kontak mereka hanya boleh *diizinkan* untuk meminta `read` cakupan.

**catatan**  
HealthLake menyediakan dukungan untuk SMART pada FHIR V1 dan V2 seperti yang dijelaskan di bawah ini. SMART di 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)diatur ke salah satu dari tiga nilai berikut saat penyimpanan data Anda dibuat:  
`SMART_ON_FHIR_V1`— Dukungan hanya untuk SMART di FHIR V1, yang mencakup izin `read` (baca/cari) dan `write` (). create/update/delete
`SMART_ON_FHIR`— Support untuk SMART pada FHIR V1 dan V2, yang mencakup`create`,,`read`, `update``delete`, dan `search` izin.
`AWS_AUTH`— Strategi AWS HealthLake otorisasi default; tidak berafiliasi dengan SMART di FHIR.

## Lingkup peluncuran mandiri
<a name="smart-on-fhir-scopes-launch"></a>

HealthLake mendukung lingkup `launch/patient` mode peluncuran mandiri.

Dalam mode peluncuran mandiri aplikasi klien meminta akses ke data klinis pasien karena pengguna dan pasien tidak diketahui oleh aplikasi klien. Dengan demikian, permintaan otorisasi aplikasi klien secara eksplisit meminta ruang lingkup pasien dikembalikan. Setelah otentikasi berhasil, server otorisasi mengeluarkan token akses yang berisi lingkup pasien peluncuran yang diminta. Konteks pasien yang diperlukan disediakan bersama token akses dalam respons server otorisasi.


**Cakupan mode peluncuran yang didukung**  

| Lingkup | Deskripsi | 
| --- | --- | 
| `launch/patient` | Parameter dalam permintaan otorisasi OAuth 2.0 yang meminta agar data pasien dikembalikan dalam respons otorisasi. | 

## SMART pada cakupan sumber daya FHIR untuk HealthLake
<a name="smart-on-fhir-scopes-rest"></a>

HealthLake mendefinisikan tiga tingkat SMART pada cakupan sumber daya FHIR.
+ `patient`cakupan memberikan akses ke data spesifik tentang satu Pasien.
+ `user`cakupan memberikan akses ke data tertentu yang dapat diakses pengguna.
+ `system`cakupan memberikan akses ke semua sumber daya FHIR yang ditemukan di penyimpanan HealthLake data.

Bagian berikut mencantumkan sintaks untuk membangun cakupan sumber daya FHIR menggunakan SMART pada FHIR V1 atau SMART di FHIR V2.

**catatan**  
Strategi otorisasi SMART on FHIR diatur saat penyimpanan data Anda dibuat. Untuk informasi selengkapnya, lihat [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) di dalam *Referensi API AWS HealthLake *. 

### SMART pada cakupan FHIR V1 didukung oleh HealthLake
<a name="reference-smart-on-fhir-v1"></a>

Saat menggunakan SMART pada FHIR V1, sintaks umum untuk membangun cakupan sumber daya FHIR untuk berikut. HealthLake Untuk melihat seluruh jalur URL dalam contoh berikut, gulir ke atas tombol **Salin**.

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


**SMART pada cakupan otorisasi yang didukung FHIR v1**  

| Sintaks lingkup | Contoh ruang lingkup | Hasil | 
| --- | --- | --- | 
| `patient/(fhir-resource \| '*').('read' \| 'write' \| '*')` | patient/AllergyIntolerance.\$1 | Aplikasi klien pasien memiliki akses baca/tulis tingkat instance ke semua alergi yang tercatat. | 
| `user/(fhir-resource \| '*').('read' \| 'write' \| '*')` | user/Observation.read | Aplikasi klien pengguna memiliki read/write akses tingkat instance ke semua pengamatan yang direkam.  | 
| system/('read' \$1 'write' \$1 \$1) | system/\$1.\$1 | Aplikasi klien sistem memiliki read/write akses ke semua data sumber daya FHIR. | 

### SMART pada cakupan FHIR V2 didukung oleh HealthLake
<a name="reference-smart-on-fhir-v2"></a>

Saat menggunakan SMART di FHIR V2, sintaks umum untuk membangun cakupan sumber daya FHIR untuk berikut. HealthLake Untuk melihat seluruh jalur URL dalam contoh berikut, gulir ke atas tombol **Salin**.

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

**catatan**  
Untuk menggunakan SMART pada FHIR V2, Anda harus meneruskan nilai [https://hl7.org/fhir/smart-app-launch/STU2/conformance.html#permissions](https://hl7.org/fhir/smart-app-launch/STU2/conformance.html#permissions)ke dalam `capabilities` string metadata, yang merupakan anggota dari tipe data. [https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html](https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html)  
HealthLake mendukung cakupan granular. Untuk informasi lebih lanjut, lihat [cakupan granular yang didukung](https://hl7.org/fhir/us/core/scopes.html#the-following-granular-scopes-shall-be-supported) di Panduan Implementasi *Inti AS FHIR*.


**SMART pada cakupan otorisasi yang didukung FHIR V2**  

| Sintaks lingkup | Contoh lingkup V1 | Hasil | 
| --- | --- | --- | 
| `patient/Observation.rs` | user/Observation.read | Izin untuk membaca dan mencari Observation sumber daya untuk pasien saat ini. | 
| `system/*.cruds` | system/\$1.\$1 | Aplikasi klien sistem memiliki create/read/update/delete/search akses penuh ke semua data sumber daya FHIR.  | 

# Validasi Token menggunakan AWS Lambda
<a name="reference-smart-on-fhir-token-validation"></a>

Saat Anda membuat HealthLake SMART di penyimpanan data berkemampuan FHIR, Anda harus memberikan ARN fungsi AWS Lambda dalam `CreateFHIRDatastore` permintaan. ARN dari fungsi Lambda ditentukan dalam `IdentityProviderConfiguration` objek menggunakan parameter. `IdpLambdaArn`

Anda harus membuat fungsi Lambda sebelum membuat SMART Anda di penyimpanan data berkemampuan FHIR. Setelah Anda membuat penyimpanan data, Lambda ARN tidak dapat diubah. Untuk melihat Lambda ARN yang Anda tentukan saat penyimpanan data dibuat, gunakan tindakan API. `DescribeFHIRDatastore`

**Agar permintaan FHIR REST berhasil di SMART di penyimpanan data berkemampuan FHIR, fungsi Lambda Anda harus melakukan hal berikut:**
+ Kembalikan respons dalam waktu kurang dari 1 detik ke titik akhir penyimpanan HealthLake data.
+ Dekode token akses yang disediakan di header otorisasi permintaan REST API yang dikirim oleh aplikasi klien.
+ Tetapkan peran layanan IAM yang memiliki izin yang cukup untuk melaksanakan permintaan FHIR REST API.
+ Klaim berikut diperlukan untuk menyelesaikan permintaan FHIR REST API. Untuk mempelajari selengkapnya, lihat [Klaim yang diperlukan](reference-smart-on-fhir-authentication.md#server-response).
  + `nbf`
  + `exp`
  + `isAuthorized`
  + `aud`
  + `scope`

Saat bekerja dengan Lambda, Anda perlu membuat peran eksekusi dan kebijakan berbasis sumber daya selain fungsi Lambda Anda. Peran eksekusi fungsi Lambda adalah peran IAM yang memberikan izin fungsi untuk mengakses layanan AWS dan sumber daya yang diperlukan pada waktu berjalan. Kebijakan berbasis sumber daya yang Anda berikan harus memungkinkan HealthLake untuk menjalankan fungsi Anda atas nama Anda.

Bagian dalam topik ini menjelaskan contoh permintaan dari aplikasi klien dan respons yang diterjemahkan, langkah-langkah yang diperlukan untuk membuat fungsi AWS Lambda, dan cara membuat kebijakan berbasis sumber daya yang dapat diasumsikan. HealthLake 
+ [Bagian 1: Membuat fungsi Lambda](#smart-on-fhir-lambda-create)
+ [Bagian 2: Membuat peran HealthLake layanan yang digunakan oleh fungsi AWS Lambda](#smart-on-fhir-lambda-service-role)
+ [Bagian 3: Memperbarui peran eksekusi fungsi Lambda](#smart-on-fhir-lambda-service-role-execution-role)
+ [Bagian 4: Menambahkan kebijakan sumber daya ke fungsi Lambda Anda](#smart-on-fhir-lambda-invoke-healthlake)
+ [Bagian 5: Menyediakan konkurensi untuk fungsi Lambda Anda](#smart-on-fhir-lambda-function-scaling)

## Membuat fungsi AWS Lambda
<a name="smart-on-fhir-lambda-create"></a>

Fungsi Lambda yang dibuat dalam topik ini dipicu saat HealthLake menerima permintaan ke SMART di penyimpanan data berkemampuan FHIR. Permintaan dari aplikasi klien berisi panggilan REST API, dan header otorisasi yang berisi token akses.

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

Contoh fungsi Lambda dalam topik ini digunakan AWS Secrets Manager untuk mengaburkan kredensyal yang terkait dengan server otorisasi. Kami sangat menyarankan untuk tidak memberikan rincian login server otorisasi secara langsung dalam fungsi Lambda.

**Example memvalidasi permintaan FHIR REST yang berisi token pembawa otorisasi**  
Contoh fungsi Lambda menunjukkan kepada Anda cara memvalidasi permintaan FHIR REST yang dikirim ke SMART di penyimpanan data berkemampuan FHIR. Untuk melihat step-by-steps petunjuk tentang cara menerapkan fungsi Lambda ini, lihat. [Membuat fungsi Lambda menggunakan Konsol Manajemen AWS](#create-lambda-console)  
Jika permintaan FHIR REST API tidak berisi titik akhir penyimpanan data yang valid, token akses, dan operasi REST, fungsi Lambda akan gagal. Untuk mempelajari lebih lanjut tentang elemen server otorisasi yang diperlukan, lihat[Klaim yang diperlukan](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()
```

### Membuat fungsi Lambda menggunakan Konsol Manajemen AWS
<a name="create-lambda-console"></a>

Prosedur berikut mengasumsikan Anda telah membuat peran layanan yang HealthLake ingin Anda asumsikan saat menangani permintaan FHIR REST API pada SMART di penyimpanan data berkemampuan FHIR. Jika Anda belum membuat peran layanan, Anda masih dapat membuat fungsi Lambda. Anda harus menambahkan ARN peran layanan sebelum fungsi Lambda berfungsi. Untuk mempelajari selengkapnya tentang membuat peran layanan dan menentukannya dalam fungsi Lambda, lihat [Membuat peran HealthLake layanan untuk digunakan dalam fungsi AWS Lambda yang digunakan untuk memecahkan kode JWT](#smart-on-fhir-lambda-service-role)

**Untuk membuat fungsi Lambda ()Konsol Manajemen AWS**

1. Buka [halaman Fungsi](https://console.aws.amazon.com/lambda/home/functions) di konsol Lambda.

1. Pilih **Buat fungsi**.

1. Pilih **Penulis dari awal**.

1. Di bawah **Informasi dasar** masukkan **nama Fungsi**. Di bawah **Runtime pilih runtime** berbasis python.

1. Untuk **peran Eksekusi**, pilih **Buat peran baru dengan izin Lambda dasar**.

   Lambda membuat [peran eksekusi](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) yang memberikan izin fungsi untuk mengunggah log ke Amazon. CloudWatch Fungsi Lambda mengasumsikan peran eksekusi saat Anda memanggil fungsi, dan menggunakan peran eksekusi untuk membuat kredensional SDK. AWS 

1. Pilih tab **Kode**, dan tambahkan contoh fungsi Lambda.

   Jika Anda belum membuat peran layanan untuk fungsi Lambda untuk digunakan, Anda harus membuatnya sebelum fungsi Lambda sampel berfungsi. Untuk mempelajari selengkapnya tentang membuat peran layanan untuk fungsi Lambda, lihat. [Membuat peran HealthLake layanan untuk digunakan dalam fungsi AWS Lambda yang digunakan untuk memecahkan kode JWT](#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()
   ```

### Memodifikasi peran eksekusi fungsi Lambda
<a name="modify-lambda-execution-role"></a>

Setelah membuat fungsi Lambda, Anda perlu memperbarui peran eksekusi untuk menyertakan izin yang diperlukan untuk memanggil Secrets Manager. Di Secrets Manager, setiap rahasia yang Anda buat memiliki ARN. Untuk menerapkan hak istimewa paling sedikit, peran eksekusi seharusnya hanya memiliki akses ke sumber daya yang diperlukan agar fungsi Lambda dapat dijalankan.

Anda dapat memodifikasi peran eksekusi fungsi Lambda dengan mencarinya di konsol IAM atau dengan memilih **Konfigurasi** di konsol Lambda. Untuk mempelajari selengkapnya tentang mengelola peran eksekusi fungsi Lambda, lihat. [Peran pelaksanaan Lambda](#smart-on-fhir-lambda-service-role-execution-role)

**Example Peran eksekusi fungsi Lambda yang memberikan akses ke `GetSecretValue`**  
Menambahkan tindakan IAM `GetSecretValue` ke peran eksekusi memberikan izin yang diperlukan agar fungsi Lambda sampel berfungsi.    
****  

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

Pada titik ini Anda telah membuat fungsi Lambda yang dapat digunakan untuk memvalidasi token akses yang disediakan sebagai bagian dari permintaan FHIR REST yang dikirim ke SMART Anda di penyimpanan data berkemampuan FHIR.

## Membuat peran HealthLake layanan untuk digunakan dalam fungsi AWS Lambda yang digunakan untuk memecahkan kode JWT
<a name="smart-on-fhir-lambda-service-role"></a>

**Persona: IAM Administrator**  
Pengguna yang dapat menambah atau menghapus kebijakan IAM, dan membuat identitas IAM baru.  

**Peran layanan**  
 Peran layanan adalah [peran IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) yang diambil oleh sebuah layanan untuk melakukan tindakan atas nama Anda. Administrator IAM dapat membuat, mengubah, dan menghapus peran layanan dari dalam IAM. Untuk informasi selengkapnya, lihat [Buat sebuah peran untuk mendelegasikan izin ke Layanan AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html) dalam *Panduan pengguna IAM*. 

Setelah Token Web JSON (JWT) diterjemahkan, otorisasi Lambda juga perlu mengembalikan peran IAM ARN. Peran ini harus memiliki izin yang diperlukan untuk melaksanakan permintaan REST API atau akan gagal karena izin yang tidak mencukupi.

Saat menyiapkan kebijakan khusus menggunakan IAM, yang terbaik adalah memberikan izin minimum yang diperlukan. *Untuk mempelajari selengkapnya, lihat [Menerapkan izin hak istimewa terkecil di Panduan Pengguna](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) IAM.*

Membuat peran HealthLake layanan untuk menunjuk dalam fungsi Lambda otorisasi membutuhkan dua langkah.
+ Pertama, Anda perlu membuat kebijakan IAM. Kebijakan harus menentukan akses ke sumber daya FHIR yang telah Anda berikan cakupan di server otorisasi.
+ Kedua, Anda perlu membuat peran layanan. Saat Anda membuat peran, Anda menetapkan hubungan kepercayaan dan melampirkan kebijakan yang Anda buat di langkah pertama. Hubungan kepercayaan menunjuk HealthLake sebagai kepala layanan. Anda perlu menentukan ARN penyimpanan HealthLake data dan ID AWS akun di langkah ini.

### Membuat kebijakan IAM baru
<a name="lambda-service-role-part-1"></a>

Cakupan yang Anda tentukan di server otorisasi Anda menentukan sumber daya FHIR apa yang dapat diakses oleh pengguna yang diautentikasi di penyimpanan data. HealthLake 

Kebijakan IAM yang Anda buat dapat disesuaikan agar sesuai dengan cakupan yang telah Anda tetapkan.

Tindakan berikut dalam `Action` elemen pernyataan kebijakan IAM dapat didefinisikan. Untuk masing-masing `Action` dalam tabel Anda dapat mendefinisikan a`Resource types`. Dalam penyimpanan data HealthLake adalah satu-satunya jenis sumber daya yang didukung yang dapat didefinisikan dalam `Resource` elemen pernyataan kebijakan izin IAM.

Sumber daya FHIR individu bukanlah sumber daya yang dapat Anda definisikan sebagai elemen dalam kebijakan izin IAM.


**Tindakan didefinisikan oleh HealthLake**  

| Tindakan | Deskripsi | Tingkat akses | Jenis sumber daya (Wajib) | 
| --- | --- | --- | --- | 
| CreateResource | Memberikan izin untuk membuat sumber daya | Tulis | Datastore ARN: arn:aws:healthlake: ::datastore/fhir/ your-region 111122223333 your-datastore-id | 
| DeleteResource | Memberikan izin untuk menghapus sumber daya | Tulis | Datastore ARN: arn:aws:healthlake: ::datastore/fhir/ your-region 111122223333 your-datastore-id | 
| ReadResource | Memberikan izin untuk membaca sumber daya | Baca | Datastore ARN: arn:aws:healthlake: ::datastore/fhir/ your-region 111122223333 your-datastore-id | 
| SearchWithGet | Memberikan izin untuk mencari sumber daya dengan metode GET | Baca | Datastore ARN: arn:aws:healthlake: ::datastore/fhir/ your-region 111122223333 your-datastore-id | 
| SearchWithPost | Memberikan izin untuk mencari sumber daya dengan metode POST | Baca | Datastore ARN: arn:aws:healthlake: ::datastore/fhir/ your-region 111122223333 your-datastore-id | 
| Mulai FHIRExport JobWithPost | Memberikan izin untuk memulai pekerjaan Ekspor FHIR dengan GET | Tulis | Datastore ARN: arn:aws:healthlake: ::datastore/fhir/ your-region 111122223333 your-datastore-id | 
| UpdateResource | Memberikan izin untuk memperbarui sumber daya | Tulis  | Datastore ARN: arn:aws:healthlake: ::datastore/fhir/ your-region 111122223333 your-datastore-id | 

Untuk memulai, Anda dapat menggunakan`AmazonHealthLakeFullAccess`. Kebijakan ini akan memberikan pembacaan, tulis, pencarian, dan ekspor pada semua sumber daya FHIR yang ditemukan di penyimpanan data. Untuk memberikan izin hanya-baca pada penggunaan penyimpanan data. `AmazonHealthLakeReadOnlyAccess`

Untuk mempelajari selengkapnya tentang membuat kebijakan kustom menggunakan Konsol Manajemen AWS, AWS CLI, atau IAM SDKs, lihat [Membuat kebijakan IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) di Panduan Pengguna *IAM*.

### Membuat peran layanan untuk HealthLake (konsol IAM)
<a name="lambda-service-role-part-2"></a>

Gunakan prosedur ini untuk membuat peran layanan. Saat Anda membuat layanan, Anda juga perlu menetapkan kebijakan IAM.

**Untuk membuat peran layanan untuk HealthLake (konsol IAM)**

1. Masuk ke Konsol Manajemen AWS dan buka konsol IAM di [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Di panel navigasi konsol IAM, pilih **Peran**.

1. Kemudian, pilih **Buat peran**.

1. Pada halaman **Pilih entitas kepercayaan**, pilih **Kebijakan kepercayaan khusus**.

1. Selanjutnya, di bawah **Kebijakan kepercayaan khusus**, perbarui kebijakan sampel sebagai berikut. Ganti **your-account-id** dengan nomor akun Anda, dan tambahkan ARN dari penyimpanan data yang ingin Anda gunakan dalam pekerjaan impor atau ekspor Anda.

------
#### [ 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. Lalu, pilih **Selanjutnya**.

1. Pada halaman **Tambah izin**, pilih kebijakan yang ingin diasumsikan oleh HealthLake layanan. Untuk menemukan kebijakan Anda, cari kebijakan tersebut di bawah **Kebijakan Izin**.

1. Kemudian, pilih **Lampirkan kebijakan**.

1. Kemudian pada halaman **Nama, tinjau, dan buat** di bawah **Nama peran** masukkan nama.

1. (Opsional) Kemudian di bawah **Deskripsi**, tambahkan deskripsi singkat untuk peran Anda.

1. Jika memungkinkan, masukkan nama peran atau akhiran nama peran untuk membantu Anda mengidentifikasi tujuan peran ini. Nama peran harus unik dalam diri Anda Akun AWS. Grup tidak dibedakan berdasarkan huruf besar-kecil. Misalnya, Anda tidak dapat membuat peran dengan nama **PRODROLE** dan **prodrole**. Anda tidak dapat mengubah nama peran setelah dibuat karena berbagai entitas mungkin mereferensikan peran tersebut.

1. Tinjau detail peran, lalu pilih **Buat peran**.

Untuk mempelajari cara menentukan peran ARN dalam contoh fungsi Lambda, lihat. [Membuat fungsi AWS Lambda](#smart-on-fhir-lambda-create)

## Peran pelaksanaan Lambda
<a name="smart-on-fhir-lambda-service-role-execution-role"></a>

Peran eksekusi fungsi Lambda adalah peran IAM yang memberikan izin fungsi untuk mengakses AWS layanan dan sumber daya. Halaman ini memberikan informasi tentang cara membuat, melihat, dan mengelola peran eksekusi fungsi Lambda.

Secara default, Lambda membuat peran eksekusi dengan izin minimal saat Anda membuat fungsi Lambda baru menggunakan. Konsol Manajemen AWS Untuk mengelola izin yang diberikan dalam peran eksekusi, lihat [Membuat peran eksekusi di konsol IAM di Panduan Pengembang](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html#permissions-executionrole-console) *Lambda*.

Contoh fungsi Lambda yang disediakan dalam topik ini menggunakan Secrets Manager untuk mengaburkan kredensyal server otorisasi.

Seperti halnya peran IAM yang Anda buat, penting untuk mengikuti praktik terbaik yang paling tidak istimewa. Selama frase pengembangan, terkadang Anda mungkin memberikan izin di luar apa yang diperlukan. Sebelum memublikasikan fungsi Anda di lingkungan produksi, sebagai praktik terbaik, sesuaikan kebijakan agar hanya menyertakan izin yang diperlukan. *Untuk informasi selengkapnya, lihat [Menerapkan hak istimewa terkecil](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) di Panduan Pengguna IAM.*

## Izinkan HealthLake untuk memicu fungsi Lambda Anda
<a name="smart-on-fhir-lambda-invoke-healthlake"></a>

Jadi HealthLake dapat memanggil fungsi Lambda atas nama Anda, Anda harus melakukan berikut: 
+ Anda perlu mengatur `IdpLambdaArn` sama dengan ARN dari fungsi Lambda yang HealthLake ingin Anda panggil dalam permintaan. `CreateFHIRDatastore`
+ Anda memerlukan kebijakan berbasis sumber daya yang memungkinkan untuk HealthLake menjalankan fungsi Lambda atas nama Anda.

Saat HealthLake menerima permintaan FHIR REST API pada SMART di penyimpanan data berkemampuan FHIR, diperlukan izin untuk menjalankan fungsi Lambda yang ditentukan pada pembuatan penyimpanan data atas nama Anda. Untuk memberikan HealthLake akses, Anda akan menggunakan kebijakan berbasis sumber daya. *Untuk mempelajari selengkapnya tentang membuat kebijakan berbasis sumber daya untuk fungsi Lambda, lihat [Mengizinkan layanan AWS memanggil fungsi Lambda di Panduan Pengembang](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html#permissions-resource-serviceinvoke).AWS Lambda *

## Menyediakan konkurensi untuk fungsi Lambda Anda
<a name="smart-on-fhir-lambda-function-scaling"></a>

**penting**  
HealthLake mengharuskan waktu berjalan maksimum untuk fungsi Lambda Anda kurang dari satu detik (1000 milidetik).  
Jika fungsi Lambda Anda melebihi batas waktu berjalan, Anda mendapatkan pengecualian. TimeOut

Untuk menghindari pengecualian ini, kami sarankan untuk mengonfigurasi konkurensi yang disediakan. Dengan mengalokasikan konkurensi yang disediakan sebelum peningkatan pemanggilan, Anda dapat memastikan bahwa semua permintaan dilayani oleh instance yang diinisialisasi dengan latensi rendah. *Untuk mempelajari lebih lanjut tentang mengonfigurasi konkurensi yang disediakan, lihat [Mengonfigurasi konkurensi yang disediakan di Panduan Pengembang Lambda](https://docs.aws.amazon.com/ambda/latest/dg/provisioned-concurrency.html)*

Untuk melihat rata-rata waktu berjalan untuk fungsi Lambda Anda saat ini gunakan halaman **Pemantauan** untuk fungsi Lambda Anda di konsol Lambda. Secara default, konsol Lambda menyediakan grafik **Durasi** yang menunjukkan jumlah waktu rata-rata, minimum, dan maksimum waktu yang dihabiskan kode fungsi untuk memproses suatu peristiwa. *Untuk mempelajari selengkapnya tentang memantau fungsi Lambda, lihat [Memantau fungsi di konsol Lambda di Panduan Pengembang Lambda](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions-access-metrics.html#monitoring-console-graph-types).*

*Jika Anda telah menyediakan konkurensi untuk fungsi Lambda Anda dan ingin memantaunya, lihat Memantau [konkurensi di](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-concurrency.html) Panduan Pengembang Lambda.*

# Menggunakan otorisasi berbutir halus dengan SMART pada penyimpanan data yang diaktifkan FHIR HealthLake
<a name="reference-smart-on-fhir-fine-grained-authorization"></a>

[Cakupan](reference-smart-on-fhir-oauth-scopes.md#smart-on-fhir-scopes-rest) saja tidak memberi Anda kekhususan yang diperlukan tentang data apa yang diizinkan untuk diakses oleh pemohon di penyimpanan data. Menggunakan otorisasi berbutir halus memungkinkan tingkat spesifisitas yang lebih tinggi saat memberikan akses ke SMART di penyimpanan data berkemampuan FHIR. HealthLake Untuk menggunakan otorisasi berbutir halus, tetapkan `FineGrainedAuthorizationEnabled` sama dengan `IdentityProviderConfiguration` parameter `True` permintaan Anda. `CreateFHIRDatastore`

Jika Anda mengaktifkan otorisasi berbutir halus, server otorisasi Anda mengembalikan `fhirUser` cakupan `id_token` bersama dengan token akses. Hal ini memungkinkan informasi tentang Pengguna untuk diambil oleh aplikasi klien. Aplikasi klien harus memperlakukan `fhirUser` klaim sebagai URI dari sumber daya FHIR yang mewakili pengguna saat ini. Ini dapat berupa `Patient`, `Practitioner`, atau `RelatedPerson`. Respons server otorisasi juga mencakup `user/` ruang lingkup yang mendefinisikan data apa yang dapat diakses pengguna. Ini menggunakan sintaks yang ditentukan untuk cakupan yang terkait dengan cakupan spesifik sumber daya FHIR:

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

Berikut ini adalah contoh bagaimana otorisasi halus dapat digunakan untuk lebih menentukan akses data terkait jenis sumber daya FHIR.
+ `fhirUser`Kapan otorisasi `Practitioner` berbutir halus menentukan kumpulan pasien yang dapat diakses pengguna. Akses ke hanya `fhirUser` diperbolehkan untuk pasien di mana Pasien memiliki referensi ke `fhirUser` sebagai Dokter Umum. 

  ```
  Patient.generalPractitioner : [{Reference(Practitioner)}]
  ```
+ `fhirUser`Kapan `Patient` atau `RelatedPerson` dan pasien yang dirujuk dalam permintaan berbeda dari`fhirUser`, otorisasi berbutir halus menentukan akses ke `fhirUser` pasien yang diminta. Akses diizinkan ketika ada hubungan yang ditentukan dalam `Patient` sumber daya yang diminta.

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

# Mengambil SMART pada Dokumen Penemuan FHIR
<a name="reference-smart-on-fhir-discovery-document"></a>

SMART mendefinisikan Dokumen Penemuan yang memungkinkan klien mempelajari titik akhir otorisasi URLs dan fitur yang didukung penyimpanan HealthLake data. Informasi ini membantu klien mengarahkan permintaan otorisasi ke titik akhir yang tepat dan membuat permintaan otorisasi yang didukung penyimpanan data. HealthLake

Agar aplikasi klien dapat membuat permintaan FHIR REST yang berhasil HealthLake, aplikasi tersebut harus mengumpulkan persyaratan otorisasi yang ditentukan oleh penyimpanan HealthLake data. Token pembawa (otorisasi) *tidak* diperlukan agar permintaan ini berhasil.. 

**Untuk meminta Discovery Document untuk penyimpanan HealthLake data**  


1. Kumpulkan HealthLake `region` dan `datastoreId` nilai. Untuk informasi selengkapnya, lihat [Mendapatkan properti penyimpanan data](managing-data-stores-describe.md).

1. Buat URL untuk permintaan menggunakan nilai yang dikumpulkan untuk HealthLake `region` dan`datastoreId`. Tambahkan `/.well-known/smart-configuration` ke titik akhir URL. Untuk melihat seluruh jalur URL dalam contoh berikut, gulir ke atas tombol **Salin**.

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

1. Kirim permintaan menggunakan `GET` protokol penandatanganan [AWS Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html). Untuk melihat seluruh contoh, gulir ke atas tombol **Salin**.

------
#### [ 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'
   ```

------

   Dokumen Discovery untuk penyimpanan HealthLake data kembali sebagai gumpalan JSON, di mana Anda dapat menemukan `authorization_endpoint` dan`token_endpoint`, bersama dengan spesifikasi dan kemampuan yang ditentukan untuk penyimpanan data.

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

   Baik `authorization_endpoint` dan yang `token_endpoint` diperlukan untuk meluncurkan aplikasi klien.
   + **Titik akhir otorisasi** — URL yang diperlukan untuk mengotorisasi aplikasi klien atau pengguna.
   + **Titik akhir Token — Titik** akhir dari server otorisasi yang digunakan aplikasi klien untuk berkomunikasi dengan.

# Membuat permintaan FHIR REST API pada penyimpanan data berkemampuan SMART HealthLake
<a name="reference-smart-on-fhir-request-example"></a>

Anda dapat membuat permintaan FHIR REST API pada SMART di penyimpanan data berkemampuan FHIR HealthLake . Contoh berikut menunjukkan permintaan dari aplikasi klien yang berisi JWT di header otorisasi dan bagaimana Lambda harus memecahkan kode respons. Setelah permintaan aplikasi klien diotorisasi dan diautentikasi, ia harus menerima token pembawa dari server otorisasi. Gunakan token pembawa di header otorisasi saat mengirim permintaan FHIR REST API pada SMART di penyimpanan data berkemampuan HealthLake FHIR.

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

Karena token pembawa ditemukan di header otorisasi dan tidak ada identitas AWS IAM yang terdeteksi HealthLake memanggil fungsi Lambda yang ditentukan saat penyimpanan data yang diaktifkan SMART pada HealthLake FHIR dibuat. Ketika token berhasil diterjemahkan oleh fungsi Lambda Anda, contoh respons berikut dikirim ke. 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
}
```