Peran, kredensial sementara, dan SigV4

Menggunakan Keamanan AWS untuk Developer

Rahul Singh

Technical Product Manager

Key yang berumur lebih lama dari tugasnya

Untuk mempercepat pekerjaan, sebuah key dibuat dalam skrip dan disimpan di file konfigurasi.

Di dalam file, key itu:

  • Tidak pernah dirotasi
  • Tidak pernah dicabut
  • Tidak pernah kedaluwarsa

Satu access key menyebar ke enam lokasi penyimpanan, dengan sumbu waktu di kanan menunjukkan masih valid pada bulan ke-18

Menggunakan Keamanan AWS untuk Developer

Key yang berumur lebih lama dari tugasnya

Untuk mempercepat pekerjaan, sebuah key dibuat dalam skrip dan disimpan di file konfigurasi.

Di dalam file, key itu:

  • Tidak pernah dirotasi
  • Tidak pernah dicabut
  • Tidak pernah kedaluwarsa

 

18 bulan kemudian, masih valid

Satu access key menyebar ke enam lokasi penyimpanan, dengan sumbu waktu di kanan menunjukkan masih valid pada bulan ke-18

Menggunakan Keamanan AWS untuk Developer

Kredensial yang kedaluwarsa sendiri

Jadikan kedaluwarsa sebagai default dengan AWS STS

  1. Minta sebuah role, dapatkan kredensial dengan jam bawaan

  2. Security Token Service (STS): ada masa berlaku, default satu jam

Sebuah aplikasi memanggil AssumeRole pada AWS STS, dan STS mengembalikan kredensial dengan jam bawaan.

Menggunakan Keamanan AWS untuk Developer

Kredensial yang kedaluwarsa sendiri

Jadikan kedaluwarsa sebagai default dengan AWS STS

  1. Minta sebuah role, dapatkan kredensial dengan jam bawaan

  2. Kredensial sementara diawali ASIA dan membawa session token

  3. Security Token Service (STS): ada masa berlaku, default satu jam

Sebuah aplikasi memanggil AssumeRole pada AWS STS dan menerima kredensial dengan jam bawaan. Di bawahnya, dua kredensial berdampingan: key jangka panjang diawali AKIA tanpa session token dan tidak pernah kedaluwarsa, serta kredensial sementara diawali ASIA yang membawa session token dan kedaluwarsa dalam satu jam.

Menggunakan Keamanan AWS untuk Developer

Kredensial yang kedaluwarsa sendiri

Jadikan kedaluwarsa sebagai default dengan AWS STS

  1. Minta sebuah role, dapatkan kredensial dengan jam bawaan

  2. Kredensial sementara diawali ASIA dan membawa session token

  3. Panggilan yang sama awalnya diterima, lalu ditolak

  4. Security Token Service (STS): ada masa berlaku, default satu jam

Sebuah aplikasi memanggil AssumeRole pada AWS STS dan menerima kredensial dengan jam bawaan. Di bawahnya, key jangka panjang diawali AKIA yang tidak pernah kedaluwarsa di samping kredensial sementara diawali ASIA yang membawa session token dan kedaluwarsa dalam satu jam. Di bawah itu, panggilan GetObject yang sama mengembalikan 200 OK pukul sepuluh dan ExpiredToken pukul sebelas lewat lima.

Menggunakan Keamanan AWS untuk Developer

Bagaimana kode Anda menemukannya

Memeriksa credential provider chain

  • AWS SDK, pustaka dalam kode Anda, yang melakukan pencarian
  • Daftar tetap, dicek berurutan
  • Berhenti pada kecocokan pertama

Urutan pencarian kredensial: key yang dilewatkan dalam kode dicoret di atas rantai, lalu pencarian berjalan ke variabel lingkungan, file konfigurasi, dan kredensial kontainer, berhenti pada kecocokan pertama dan tidak pernah mencapai metadata instance

Menggunakan Keamanan AWS untuk Developer

Bagaimana kode Anda menemukannya

Memeriksa credential provider chain

  • AWS SDK, pustaka dalam kode Anda, yang melakukan pencarian
  • Daftar tetap, dicek berurutan
  • Berhenti pada kecocokan pertama

 

Key yang hard-coded dicek pertama, jadi harus dihapus

Urutan pencarian kredensial: key yang dilewatkan dalam kode dicoret di atas rantai, lalu pencarian berjalan ke variabel lingkungan, file konfigurasi, dan kredensial kontainer, berhenti pada kecocokan pertama dan tidak pernah mencapai metadata instance

Menggunakan Keamanan AWS untuk Developer

Rantai, selangkah demi selangkah

1. explicit      a key passed in your code
2. environment   AWS_* variables, and on Lambda
                 that is the execution role
3. config file   ~/.aws/credentials
4. container     ECS or EKS task role
5. instance      EC2 instance profile, via IMDS
  • Kecocokan pertama yang digunakan
  • Hapus key yang tersimpan, pencarian berlanjut ke role
Menggunakan Keamanan AWS untuk Developer

Membuktikan identitas dari luar AWS

Pipeline kode sering berjalan di luar AWS, jadi credential chain tidak bisa dilampirkan

  • Berjalan di GitHub atau GitLab
  • Tidak ada yang bisa ditemukan oleh rantai

Sebuah runner CI dan platformnya digambar di luar batas AWS, runner diberi tanda tidak memiliki role untuk dilampirkan, dan platform menandatangani token OIDC yang menyebut satu repositori dan satu workflow

Menggunakan Keamanan AWS untuk Developer

Membuktikan identitas dari luar AWS

Pipeline kode sering berjalan di luar AWS, jadi credential chain tidak bisa dilampirkan

  • Berjalan di GitHub atau GitLab
  • Tidak ada yang bisa ditemukan oleh rantai

 

Token OIDC (OpenID Connect)

  • Ditandatangani dan berumur pendek
  • Pernyataan identitas, bukan kredensial

Sebuah runner CI dan platformnya digambar di luar batas AWS, runner diberi tanda tidak memiliki role untuk dilampirkan, dan platform menandatangani token OIDC yang menyebut satu repositori dan satu workflow

Menggunakan Keamanan AWS untuk Developer

Aturan menggantikan key tersimpan

Token OIDC yang menyebut satu repositori, ditukar melalui AssumeRoleWithWebIdentity menjadi kredensial sementara yang kedaluwarsa dalam satu jam, karena kebijakan trust role sudah menyebut issuer dan repositori tersebut

Menukar token dengan kredensial

Menggunakan Keamanan AWS untuk Developer

Aturan menggantikan key tersimpan

Token OIDC yang menyebut satu repositori, ditukar melalui AssumeRoleWithWebIdentity menjadi kredensial sementara yang kedaluwarsa dalam satu jam, karena kebijakan trust role sudah menyebut issuer dan repositori tersebut

Menukar token dengan kredensial

  • AssumeRoleWithWebIdentity: AssumeRole, dengan token luar sebagai bukti
  • Trust policy: ditulis pada role sebelumnya, tidak disimpan di pipeline
  • Claim: satu fakta di dalam token
  • Issuer dipakai bersama oleh semua repositori di platform, jadi pin repositorinya juga

Rahasia repositori: kini kosong

Menggunakan Keamanan AWS untuk Developer

Setiap permintaan ditandatangani

Signature Version 4, atau SigV4

  • Membuktikan kredensial mana yang membuat permintaan
  • Membuktikan permintaan tidak diubah saat transit
  • Ditandatangani oleh CLI dan SDK pada setiap panggilan

Alur penandatanganan di mana sebuah request dan kredensial Anda menghasilkan signature yang dikirim di header Authorization, yang dihitung ulang dan dibandingkan oleh AWS, diterima jika cocok dan mengembalikan SignatureDoesNotMatch jika tidak cocok

Menggunakan Keamanan AWS untuk Developer

Tanda tangan yang bisa Anda serahkan

Kredensial sementara

  • Banyak aksi, dibatasi oleh role
  • Dipegang oleh kode Anda

Kode Anda memanggil empat layanan AWS, S3, DynamoDB, SQS, dan KMS, dengan kredensial sementara

Menggunakan Keamanan AWS untuk Developer

Tanda tangan yang bisa Anda serahkan

Kredensial sementara

  • Banyak aksi, dibatasi oleh role
  • Dipegang oleh kode Anda

Pre-signed URL

  • Satu objek, satu aksi, dan siapa pun yang memegang tautannya
  • Masa berlaku pilihan Anda, lalu tidak berlaku
  • Membawa izin Anda, bukan milik pemegang tautan

Kode Anda memanggil empat layanan AWS, S3, DynamoDB, SQS, dan KMS, dengan kredensial sementara

Browser milik orang lain mengakses tepat satu objek melalui satu jalur, diputus oleh jam berlabel masa berlaku yang Anda tetapkan

Menggunakan Keamanan AWS untuk Developer

Ayo berlatih!

Menggunakan Keamanan AWS untuk Developer

Preparing Video For Download...