Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Validasi Token menggunakan AWS Lambda
Saat Anda membuat HealthLake SMART di penyimpanan data berkemampuan FHIR, Anda harus memberikan ARN fungsi AWS Lambda dalam permintaan. ARN dari fungsi Lambda ditentukan dalam CreateFHIRDatastoreIdentityProviderConfiguration 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.
-
Mendekode 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.
-
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
Membuat fungsi AWS Lambda
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.
contoh 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 AWS Management 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, lihatKlaim yang diperlukan.
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()
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
Untuk membuat fungsi Lambda ()AWS Management Console
-
Buka halaman Fungsi
di konsol Lambda. -
Pilih Buat fungsi.
-
Pilih Penulis dari awal.
-
Di bawah Informasi dasar masukkan nama Fungsi. Di bawah Runtime pilih runtime berbasis python.
-
Untuk peran Eksekusi, pilih Buat peran baru dengan izin Lambda dasar.
Lambda membuat peran eksekusi yang memberikan izin fungsi untuk mengunggah log ke Amazon. CloudWatch Fungsi Lambda mengasumsikan peran eksekusi saat Anda menjalankan fungsi, dan menggunakan peran eksekusi untuk membuat kredensyal SDK. AWS
-
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 akan 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
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
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 eksekusi Lambda
contoh 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.
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
Persona: IAM Administrator
Pengguna yang dapat menambah atau menghapus kebijakan IAM, dan membuat identitas IAM baru.
- Peran layanan
-
Peran layanan adalah peran IAM 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 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 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
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 aResource 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 | 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 menggunakanAmazonHealthLakeFullAccess. 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 AWS Management Console, AWS CLI, atau IAM SDKs, lihat Membuat kebijakan IAM di Panduan Pengguna IAM.
Membuat peran layanan untuk HealthLake (konsol IAM)
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)
-
Masuk ke AWS Management Console dan buka konsol IAM di https://console.aws.amazon.com/iam/
. -
Di panel navigasi konsol IAM, pilih Peran.
-
Kemudian, pilih Buat peran.
-
Pada halaman Pilih entitas kepercayaan, pilih Kebijakan kepercayaan khusus.
-
Selanjutnya, di bawah Kebijakan kepercayaan khusus, perbarui kebijakan sampel sebagai berikut. Ganti
your-account-iddengan nomor akun Anda, dan tambahkan ARN dari penyimpanan data yang ingin Anda gunakan dalam pekerjaan impor atau ekspor Anda. -
Kemudian, pilih Berikutnya.
-
Pada halaman Tambah izin, pilih kebijakan yang ingin diasumsikan oleh HealthLake layanan. Untuk menemukan kebijakan Anda, cari kebijakan tersebut di bawah Kebijakan Izin.
-
Kemudian, pilih Lampirkan kebijakan.
-
Kemudian pada halaman Nama, tinjau, dan buat di bawah Nama peran masukkan nama.
-
(Opsional) Kemudian di bawah Deskripsi, tambahkan deskripsi singkat untuk peran Anda.
-
Jika memungkinkan, masukkan nama peran atau akhiran nama peran untuk membantu Anda mengidentifikasi tujuan peran ini. Nama peran harus unik di dalam diri Anda Akun AWS. Grup tidak dibedakan berdasarkan huruf besar-kecil. Misalnya, Anda tidak dapat membuat peran dengan nama
PRODROLEdanprodrole. Anda tidak dapat mengubah nama peran setelah dibuat karena berbagai entitas mungkin mereferensikan peran tersebut. -
Tinjau detail peran, lalu pilih Buat peran.
Untuk mempelajari cara menentukan peran ARN dalam contoh fungsi Lambda, lihat. Membuat fungsi AWS Lambda
Peran eksekusi Lambda
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. AWS Management Console Untuk mengelola izin yang diberikan dalam peran eksekusi, lihat Membuat peran eksekusi di konsol IAM di Panduan Pengembang Lambda.
Contoh fungsi Lambda yang disediakan dalam topik ini menggunakan Secrets Manager untuk mengaburkan kredensyal server otorisasi.
Seperti halnya peran IAM apa pun 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 di Panduan Pengguna IAM.
Izinkan HealthLake untuk memicu fungsi Lambda Anda
Jadi HealthLake dapat memanggil fungsi Lambda atas nama Anda, Anda harus melakukan berikut:
-
Anda perlu mengatur
IdpLambdaArnsama 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.AWS Lambda
Menyediakan konkurensi untuk fungsi Lambda Anda
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
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.
Jika Anda telah menyediakan konkurensi untuk fungsi Lambda Anda dan ingin memantaunya, lihat Memantau konkurensi di Panduan Pengembang Lambda.