Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Memulai federasi identitas keluar
Panduan ini menunjukkan cara mengaktifkan federasi identitas keluar untuk AWS akun Anda dan mendapatkan JSON Web Token (JWT) pertama Anda (menggunakan API). GetWebIdentityToken Anda akan mengaktifkan fitur, membangun hubungan kepercayaan dengan layanan eksternal, mengkonfigurasi izin IAM, dan meminta token menggunakan AWS CLI atau AWS SDK for Python (Boto3).
Prasyarat
Sebelum Anda mulai, pastikan Anda memiliki:
-
Versi terbaru dari AWS CLI atau Python 3.8 (atau yang lebih baru) dan Boto3 diinstal (untuk contoh SDK) AWS
-
Akun layanan eksternal tempat Anda dapat mengonfigurasi hubungan kepercayaan (seperti penyedia cloud eksternal, penyedia SaaS, atau aplikasi pengujian)
catatan
GetWebIdentityTokenAPI tidak tersedia di titik akhir STS Global.Token Web JSON (JWTs) yang dihasilkan oleh
GetWebIdentityTokenAPI tidak dapat digunakan untuk AWS federasi OpenID Connect (OIDC) ke dalam (AssumeRoleWithWebIdentitymelalui API).
Aktifkan federasi identitas keluar untuk akun Anda
Anda harus mengaktifkan federasi identitas keluar sebelum Anda dapat meminta token. Anda dapat mengaktifkan fitur menggunakan AWS Management Console atau menggunakan API secara terprogram. EnableOutboundWebIdentityFederation
Menggunakan AWS CLI
aws iam enable-outbound-web-identity-federation
Menggunakan AWS SDK untuk Python
import boto3 # Create IAM client iam_client = boto3.client('iam') # Enable outbound identity federation response = iam_client.enable_outbound_web_identity_federation() print(f"Feature enabled. Issuer URL: {response['IssuerUrl']}") print(f"Status: {response['Status']}")
Menggunakan AWS Konsol
Arahkan ke IAM dan pilih Pengaturan Akun di bawah bagian Manajemen Akses pada menu navigasi sebelah kiri
Setelah Anda mengaktifkan fitur ini, catat URL penerbit khusus akun Anda. Anda akan menggunakan URL ini saat mengonfigurasi hubungan kepercayaan di layanan eksternal. Anda juga dapat mengambil URL penerbit ini sesuai kebutuhan menggunakan API. GetOutboundWebIdentityFederationInfo
Membangun hubungan kepercayaan dalam layanan eksternal
Konfigurasikan layanan eksternal untuk mempercayai dan menerima token yang dikeluarkan oleh AWS akun Anda. Langkah-langkah spesifik bervariasi menurut layanan, tetapi umumnya melibatkan:
-
Mendaftarkan URL penerbit AWS akun Anda sebagai penyedia identitas tepercaya
-
Mengkonfigurasi klaim mana yang akan divalidasi (audiens, pola subjek)
-
Token pemetaan mengklaim izin di layanan eksternal
Lihat dokumentasi layanan eksternal untuk instruksi konfigurasi terperinci.
Mengonfigurasi izin IAM
Buat kebijakan IAM yang memberikan izin untuk memanggil GetWebIdentityTokenAPI dan melampirkan kebijakan ke peran IAM yang perlu menghasilkan token.
Kebijakan contoh ini memberikan akses ke pembuatan token dengan batasan tertentu. Ini memungkinkan meminta token hanya untuk "https://api.example.com" sebagai audiens dan memberlakukan masa pakai token maksimum 5 menit (300 detik). Lihat daftar kunci kondisi yang dapat Anda gunakan untuk menerapkan properti token. Kunci konteks IAM dan AWS STS kondisi
Contoh kebijakan IAM
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:GetWebIdentityToken", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "sts:IdentityTokenAudience": "https://api.example.com" }, "NumericLessThanEquals": { "sts:DurationSeconds": 300 } } } ] }
Minta JSON Web Token (JWT) pertama Anda
Anda dapat meminta Token Web JSON menggunakan GetWebIdentityTokenAPI. Anda dapat menentukan parameter berikut saat memanggil API:
-
Audiens (wajib): Penerima token yang dituju. Nilai ini mengisi klaim “aud” di JWT. Layanan eksternal memvalidasi klaim ini untuk memastikan token ditujukan untuk mereka.
-
SigningAlgorithm (wajib): Algoritma kriptografi yang digunakan untuk menandatangani token. Nilai yang valid adalah ES384 dan RS256. Gunakan ES384 untuk keamanan dan kinerja yang optimal, atau RS256 untuk kompatibilitas yang lebih luas dengan sistem yang tidak mendukung ECDSA.
-
DurationSeconds (opsional): Masa pakai token dalam hitungan detik. Nilai yang valid berkisar antara 60 hingga 3600. Defaultnya adalah 300 (5 menit). Kami merekomendasikan masa pakai token yang lebih pendek untuk meningkatkan keamanan.
-
Tag (opsional): Daftar pasangan nilai kunci untuk disertakan sebagai klaim khusus dalam token. Layanan eksternal dapat menggunakan klaim ini untuk otorisasi berbutir halus.
API mengembalikan bidang berikut:
-
IdentityToken: JWT yang ditandatangani sebagai string yang disandikan base64url. Sertakan token ini dalam permintaan ke layanan eksternal.
-
Kedaluwarsa: Stempel waktu UTC saat token kedaluwarsa.
Menggunakan AWS CLI
aws sts get-web-identity-token \ --audience "https://api.example.com" \ --signing-algorithm ES384 \ --duration-seconds 300 \ --tags Key=team,Value=data-engineering \ Key=environment,Value=production \ Key=cost-center,Value=analytics
Menggunakan AWS SDK untuk Python
import boto3 sts_client = boto3.client('sts') response = sts_client.get_web_identity_token( Audience=['https://api.example.com'], DurationSeconds=300, SigningAlgorithm='RS256', Tags=[ {'Key': 'team', 'Value': 'data-engineering'}, {'Key': 'environment', 'Value': 'production'}, {'Key': 'cost-center', 'Value': 'analytics'} ] ) token = response['WebIdentityToken']
Anda juga dapat memecahkan kode JWT untuk memeriksa isinya menggunakan pustaka JWT standar seperti PyJWT, Python-jose untuk Python, Nimbus JOSE+JWT untuk Java atau debugger seperti jwt.io. Lihat Memahami klaim token untuk informasi lebih lanjut tentang klaim yang termasuk dalam token.
Gunakan token dengan layanan eksternal
Setelah menerima token, sertakan dalam permintaan ke layanan eksternal. Metode ini bervariasi menurut layanan, tetapi sebagian besar layanan menerima token di header Otorisasi. Layanan eksternal harus menerapkan logika validasi token yang mengambil kunci JWKS dari titik akhir penerbit Anda yang terkenal, memverifikasi tanda tangan token, dan memvalidasi klaim penting sebelum memberikan akses ke beban kerja Anda. AWS
Ambil kunci verifikasi dan metadata dari titik akhir OpenID Connect (OIDC)
URL penerbit unik untuk AWS akun Anda menghosting titik akhir penemuan OpenID Connect (OIDC) yang berisi kunci verifikasi dan metadata yang diperlukan untuk verifikasi token.
URL titik akhir penemuan OIDC berisi metadata yang digunakan beberapa penyedia untuk memverifikasi token. Ini tersedia di:
{issuer_url}/.well-known/openid-configuration
Titik akhir JWKS (JSON Web Key Set) berisi kunci yang digunakan untuk memverifikasi tanda tangan token. Ini tersedia di:
{issuer_url}/.well-known/jwks.json
Ambil JWKS menggunakan curl
curl https://{issuer_url}/.well-known/jwks.json
Respons:
{ "keys": [ { "kty": "EC", "use": "sig", "kid": "key-id-1", "alg": "ES384", "crv": "P-384", "x": "base64-encoded-x-coordinate", "y": "base64-encoded-y-coordinate" }, { "kty": "RSA", "use": "sig", "kid": "key-id-2", "n": "base64-encoded-modulus", "e": "AQAB" } ] }
Menggunakan AWS SDK untuk Python
import requests # Fetch Openid Configuration open_id_config_response = requests.get("https://{issuer_url}/.well-known/openid-configuration") open_id_config = open_id_config_response.json() # Fetch JWKS jwks_response = requests.get("https://{issuer_url}/.well-known/jwks.json") jwks = jwks_response.json()
Kami merekomendasikan caching kunci ini untuk menghindari mengambilnya untuk setiap verifikasi token.
Validasi klaim penting
-
Subjek (sub): Verifikasi klaim subjek berisi pola ARN utama IAM yang diharapkan.
-
Kedaluwarsa (exp): Pastikan token belum kedaluwarsa. Pustaka JWT biasanya menangani ini secara otomatis.
-
Audiens (aud): Verifikasi audiens sesuai dengan nilai yang Anda harapkan. Ini mencegah token yang ditujukan untuk layanan lain digunakan dengan milik Anda.
-
Penerbit (iss): Verifikasi penerbit cocok dengan AWS akun yang Anda percayai. Pertahankan daftar emiten tepercaya. URLs
Jika memungkinkan, Anda harus memvalidasi klaim AWS khusus tambahan untuk menerapkan kontrol akses berbutir halus di layanan eksternal Anda. Misalnya, validasi klaim org_id untuk membatasi akses ke prinsipal IAM di AWS Organisasi Anda, periksa principal_tags untuk menerapkan kontrol akses berbasis atribut (seperti hanya mengizinkan lingkungan produksi atau tim tertentu), atau verifikasi klaim konteks sesi seperti lambda_source_function_arn atau ec2_instance_source_vpc untuk membatasi akses berdasarkan sumber daya komputasi. Lihat Memahami klaim token untuk daftar lengkap klaim yang termasuk dalam token.