Blog Personal Inganta

Berbagi pengetahuan untuk memperkaya pemahaman

04 Apr 2021

Mengelola Kredensial AWS Dengan Prinsip Swakelola yang Prudensial

AWS merupakan penyedia layanan komputasi awan paling terkemuka saat ini. Layanan-layanan yang ditawarkan oleh AWS digunakan oleh berbagai jenis pengguna dari personal, bisnis kecil, sampai bisnis skala besar. Ketika pengguna pertama kali mendaftar, AWS menciptakan pengguna baru yang disebut dengan nama AWS account root user (Pengguna akar akun AWS). Pengguna akar akun AWS memiliki akses penuh keseluruh sumber daya yang ada pada akun tersebut. Kredensial pengguna ini perlu disimpan dengan aman. Prinsip least privilege mengajarkan untuk supaya pengguna memakai hak akses seperlunya untuk menyelesaikan suatu tugas. Maka dari itu pengguna akar akun AWS sebaiknya tidak digunakan saat kegiatan operasi akun AWS sehari-hari.

Sebagai gantinya, pengguna AWS menggunakan layanan Identity and Access Management (AWS IAM) untuk mengelola akses seluruh pengguna ke akun AWS tersebut. AWS IAM memiliki fitur pengguna IAM (IAM User) untuk memodelkan entitas pengguna AWS. Selain pengguna IAM, layanan AWS IAM juga memiliki fitur grup IAM (IAM Group), kebijakan IAM (IAM policy), dan peran IAM (IAM Role) untuk mengelola hak akses. Tidak seperti pengguna akar akun AWS, hak akses pengguna IAM bisa dibatasi menggunakan kebijakan IAM atau peran IAM. Pemisahan tugas antara administrator (pengguna yang memiliki hak akses spesial) dan pengguna lain bisa dipisahkan menggunakan pengguna IAM. Layanan AWS IAM menyediakan kebijakan siap pakai (nama kebijakannya AdministratorAccess) yang bisa diberikan ke pengguna IAM sehingga pengguna tersebut menjadi administrator. Selanjutnya administrator bisa membuat pengguna lain dan memberikan hak akses secukupnya untuk pengguna tersebut menyelesaikan tugasnya.

Pengguna IAM memiliki beberapa jenis kredensial yang perlu dikelola dengan prinsip kehati-hatian (prudensial). Salah satu dari jenis kredensial tersebut adalah kombinasi nama pengguna (username) dan kata sandi (password). Kedua informasi tersebut diperlukan oleh pengguna untuk mengakses layanan AWS melalui konsol berbasis web yang disediakan oleh AWS. Layanan AWS IAM memiliki fitur kebijakan kata sandi (password policy) untuk memastikan kata sandi yang digunakan oleh pengguna memenuhi persyaratan yang telah ditetapkan. Berikut berbagai kebijakan kata sandi yang bisa diaktifkan oleh administrator:

  • Jumlah minimal karakter kata sandi
  • Kata sandi harus memiliki paling sedikit satu huruf kecil
  • Kata sandi harus memiliki paling sedikit satu huruf besar
  • Kata sandi harus memiliki paling sedikit satu angka
  • Kata sandi harus memiliki paling sedikit satu karakter khusus
  • Waktu kedaluarsa kata sandi
  • Memerlukan administrator untuk memasang kembali kata sandi yang telah kedaluarsa
  • Membolehkan pengguna untuk mengganti sendiri kata sandi mereka
  • Membatasi penggunaan ulang kata sandi yang sudah pernah digunakan sebelumnya

Selain kata sandi, pengguna IAM juga memiliki kredensial berupa kunci akses. Kunci akses berguna ketika pengguna mengakses layanan AWS secara terprogram baik itu melalui antarmuka baris perintah (CLI), Kit Pembangunan Perangkat Lunak (Software Development Kit / SDK), atau akses API secara langsung. Kunci akses AWS merupakan sepasang informasi yang terdiri dari:

  • ID kunci akses AWS (AWS Access Key ID)
  • Kunci akses rahasia AWS (AWS Secret Access Key)

Kredensial penting lainnya adalah otentikasi banyak faktor (Multi-Factor Authentication / MFA). AWS mendukung berbagai jenis otentikasi banyak faktor berbasis virtual ataupun perangkat lunak seperti:

  • Perangkat otentikasi virtual berbasis TOTP seperti Authy, Google Authenticator, dan Microsoft Authenticator.
  • Perangkat otentikasi berbasis perangkat keras seperti kunci Yubico, kunci Gemalto, dan kartu tampilan Gemalto.

Pengaturan kebijakan kata sandi akun AWS

Administrator akun AWS perlu mengaktifkan kebijakan kata sandi yang sesuai dengan pedomain standar emas kata sandi NIST 800-63B. Berikut langkah-langkah yang bisa dilakukan oleh administrator:

  1. Masuk ke akun AWS dan akses menu Account settings pada layanan IAM
  2. Klik tombol Change pada bagian Password policy untuk mengubah kebijakan kata kunci
  3. Atur minimal jumlah karakter kata sandi menjadi 12
  4. Centang opsi Require at least one uppercase letter from Latin alphabet (A-Z)
  5. Centang opsi Require at least one lowercase letter from Latin alphabet (a-z)
  6. Centang opsi Require at least one number
  7. Centang opsi Require at least one non-alphanumeric character (! @ # $ % ^ & * ( ) _ + - = [ ] { } | ‘)
  8. Centang opsi Allow users to change their own password
  9. Centang opsi Prevent password reuse dan isi 3 pada bidang Remember password(s)
  10. Klik tombol Save changes untuk mengaktifkan kebijakan kata sandi baru

Berikut contoh tangkapan layar pengaturan kebijakan kata sandi pada akun AWS Kebijakan kata sandi AWS

Pengelolaan kunci akses AWS pada lokal mesin pengguna

Pengguna tingkat mahir membutuhkan akses ke API AWS untuk mengotomatisasi tugas-tugas tertentu yang berkaitan dengan AWS. Otomatisasi dilakukan melalui program yang mereka tulis sendiri ataupun hasil unduh dari internet. Program tersebut dijalankan pada lokal mesin dan membutuhkan kunci akses AWS. Kunci akses AWS merupakan informasi yang bersifat rahasia sehingga membutuhkan penyimpanan yang aman di lokal mesin pengguna. Selain penyimpanan, akses terhadap kunci tersebut juga perlu dibatasi dan dikelola melalui mekanisme yang aman pula.

Salah satu alat yang bisa digunakan untuk mengelola kunci akses AWS adalah AWS Vault. AWS Vault merupakan alat berbasis antarmuka baris perintah yang berguna untuk menyimpan dan mengakses kredensial AWS pada lokal mesin pengguna secara aman. Pengguna bisa melakukan instalasi AWS Vault dengan mengikuti panduan yang sesuai dengan sistem operasi yang digunakan pada halaman https://github.com/99designs/aws-vault#installing.

Pengelolaan kredensial pengguna IAM secara mandiri

Pengguna IAM dengan level akses administrator memiliki istimewa untuk mengelola kredensial pengguna IAM lainnya. Mengharuskan pengguna IAM untuk mengontak administrator ketika mengubah kredensial bisa menjadi beban kerjaan bagi administrator, apalagi jika administrator mengelola pengguna IAM dalam jumlah besar. Cara yang lain untuk mengurangi bebas kerja administrator dalam mengelola pengguna IAM adalah dengan memperbolehkan pengguna IAM untuk mengelola kredensial mereka secara mandiri. Untuk mencapai tujuan ini, administrator perlu memberikan hak khusus sehingga setiap pengguna IAM bisa mengelola kredensial mereka sendiri. Dalam pemberian hak khusus, administrator perlu membatasi agar satu pengguna IAM biasa hanya bisa mengelola kredensial IAMnya sendiri tanpa bisa mengelola kredensial pengguna IAM lainnya.

Administrator perlu membuat kebijakan IAM baru untuk memungkinkan pengguna lain melakukan pengelolaan kredensial secara mandiri. Berikut langkah yang bisa dilakukan oleh administrator untuk membuat kebijakan tersebut:

  1. Masuk ke akun AWS dan akses menu IAM Policies

  2. Klik tombol Create policy

  3. Pilih tab JSON, kemudian isi kolom dengan nilai berikut

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "IzinLihatInfoAkun",
                "Effect": "Allow",
                "Action": [
                    "iam:GetAccountPasswordPolicy",
                    "iam:GenerateServiceLastAccessedDetails",
                    "iam:ListUsers",
                    "iam:GetServiceLastAccessedDetails",
                    "iam:ListVirtualMFADevices",
                    "iam:GetAccountSummary",
                    "iam:ListPoliciesGrantingServiceAccess"
                ],
                "Resource": "*"
            },
            {
                "Sid": "IzinLihatInfoPengguna",
                "Effect": "Allow",
                "Action": [
                    "iam:ListGroupsForUser",
                    "iam:ListAttachedUserPolicies",
                    "iam:ListServiceSpecificCredentials",
                    "iam:ListUserPolicies",
                    "iam:ListUserTags",
                    "iam:ListSSHPublicKeys",
                    "iam:GetUser"
                ],
                "Resource": "arn:aws:iam::*:user/${aws:username}"
            },
            {
                "Sid": "IzinSwakelolaKataSandi",
                "Effect": "Allow",
                "Action": [
                    "iam:ChangePassword"
                ],
                "Resource": "arn:aws:iam::*:user/${aws:username}"
            },
            {
                "Sid": "IzinSwakelolaKunciAkses",
                "Effect": "Allow",
                "Action": [
                    "iam:CreateAccessKey",
                    "iam:DeleteAccessKey",
                    "iam:ListAccessKeys",
                    "iam:UpdateAccessKey"
                ],
                "Resource": "arn:aws:iam::*:user/${aws:username}"
            },
            {
                "Sid": "IzinSwakelolaPerangkatMFAVirtual",
                "Effect": "Allow",
                "Action": [
                    "iam:CreateVirtualMFADevice",
                    "iam:DeleteVirtualMFADevice"
                ],
                "Resource": "arn:aws:iam::*:mfa/${aws:username}"
            },
            {
                "Sid": "IzinSwakelolaMFAPengguna",
                "Effect": "Allow",
                "Action": [
                    "iam:DeactivateMFADevice",
                    "iam:EnableMFADevice",
                    "iam:GetUser",
                    "iam:ListMFADevices",
                    "iam:ResyncMFADevice"
                ],
                "Resource": "arn:aws:iam::*:user/${aws:username}"
            }
        ]
    }
    
  4. Klik tombol Next: Tags untuk menambahkan label

  5. Klik tombol Next: Review

  6. Isi nama dan dekripsi kebijakan masing-masing pada baris Name dan baris Description

  7. Klik tombol Create policy untuk membuat kebijakan

Setelah kebijakan IAM selesai dibuat, administrator perlu memberikan kebijakan IAM tersebut ke setiap pengguna. Hal ini dapat dicapai dengan memberikan kebijakan IAM tersebut langsung ke pengguna IAM. Cara lainnya adalah dengan memberikan kebijakan IAM tersebut ke suatu grup IAM, kemudian memasukan pengguna IAM ke dalam grup IAM tersebut. Pada skala besar, pengguna grup IAM lebih disarankan dibanding pemberian kebijakan IAM langsung ke pengguna IAM.

Contoh pengelolaan pengguna IAM secara lengkap dari ujung ke ujung

Pada contoh ini diasumsikan bahwa pengguna IAM dengan level akses administrator sudah tersedia. Selain itu, kebijakan kata sandi untuk akun AWS yang akan digunakan sudah diaktifkan. Administrator sudah membuat pengguna IAM baru di akun AWS dan memberikan kebijakan seperti dijelaskan pada bagian Pengelolaan kredensial pengguna IAM secara mandiri di atas. Administrator juga telah membagikan nama pengguna, kata sandi sementara, dan alamat URL untuk masuk ke akun AWS ke pengguna sasaran melalui jalur komunikasi privat dan tersandi (Misalkan melalui password manager atau aplikasi pesan tersandi secara end-to-end). Selain itu pengguna target sudah memasang aplikasi MFA virtual seperti Authy atau Google Authenticator pada perangkat selulernya.

Berikut langkah yang perlu dilakukan pengguna untuk mengelola kredensial AWS secara aman:

  1. Pastikan AWS Vault sudah terpasang pada lokal mesin pengguna. Penjelasan mengenai AWS Vault bisa dilihat pada bagian Pengelolaan kunci akses AWS pada lokal mesin pengguna

  2. Pastikan antarmuka baris perintah AWS sudah terpasang. Panduan instalasi untuk berbagai sistem operasi bisa dilihat pada halaman https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html

  3. Masuk ke akun AWS menggunakan kredensial yang sebelumnya telah dibagikan oleh Administrator. Ketika pertama kali masuk, AWS akan meminta pengguna untuk mengganti kata sandi. Ikuti panduan dari AWS untuk mengganti kata sandi lama dengan kata sandi baru. Kata sandi baru harus memenuhi kebijakan kata sandi yang sudah ditentukan oleh Administrator. Jangan lupa untuk menyimpan kata sandi baru ke dalam password manager.

  4. Masuk ke menu Users pada layanan AWS IAM. Menu Users bisa diakses melalui tautan https://console.aws.amazon.com/iam/home#/users. Pilih nama pengguna, kemudian klik nama pengguna untuk melihat halaman ringkasan pengguna.

  5. Masuk ke tab Security credentials untuk membuat kunci akses.

    1. Klik tombol Create access key untuk membuat kunci akses baru. Konsol AWS akan menampilkan ID kunci akses dan kunci akses rahasia dalam bentuk tersandi.
    2. Buka terminal, kemudian ketik perintah aws-vault add <nama profil>.
    3. Salin nilai ID kunci akses dari halaman konsol AWS, tempel pada terminal, dan klik tombol enter maju ke langkah selanjutnya.
    4. Salin nilai kunci akses rahasia (Pastikan menekan tombol Show sebelum menyalin), tempel hasil salinan ke terminal, dan klik tombol enter menyelesaikan penyimpanan kunci akses ke dalam AWS Vault.
    5. Klik tombol Close pada konsol AWS untuk menutup halaman pembuatan kunci akses. Berikut contoh tangkapan layar pembuatan kunci akses AWS. (Kunci akses dibawah sudah dihapus dari akun AWS) Pembutan kunci akses AWS
  6. Kembali ke tab Security credentials untuk mengaktifkan perangkat MFA virtual.

    1. Klik tombol Manage pada baris Assigned MFA Device di bagian Sign-in Credentials.
    2. Pilih opsi Virtual MFA device, kemudian klik tombol Continue.
    3. Klik Show QR code untuk menampilkan QR code, kemudian pindai QR code menggunakan aplikasi otentikator pada perangkat seluler.
    4. Masukan 2 kode MFA berurutan dari aplikasi otentikator.
    5. Klik tombol Assign MFA Berikut contoh tangkapan layar pengaktifan perangkat MFA virtual akun AWS. (Hanya sebagai contoh dan MFA telah dihapus dari akun AWS) Pengaktifan perangkat MFA virtual
  7. Daftarkan ARN perangkat MFA virtual ke berkas konfigurasi AWS menggunakan aws-cli.

    aws configure --profile <nama profil> set mfa_serial <ARN MFA>
    

    ARN MFA bisa dilihat pada baris Assigned MFA Device di bawah bagian Sign-in Credentials pada tab Security credentials pengguna IAM.

Merotasi kunci akses AWS

AWS menyarankan untuk mengganti kunci akses pengguna IAM setelah 90 dari waktu pembuatan. Pengganti berkala dalam waktu yang lebih cepat tentunya akan lebih baik lagi. Kita bisa menggunakan AWS Vault untuk mengganti kunci akses menggunakan perintah berikut

aws-vault rotate <nama profil>

Berikut contoh hasil pengganti kunci akses menggunakan perintah aws-vault

Rotating credentials stored for profile '<nama profil>' using a session from profile '<nama profile>' (takes 10-20 seconds)
Creating a new access key
Enter token for arn:aws:iam::<ID akun AWS>:mfa/<nama pengguna>: 234388
Created new access key ****************D6UP
Deleting old access key ****************VLOV
Enter token for arn:aws:iam::<ID akun AWS>:mfa/<nama pengguna>: 234388
Enter token for arn:aws:iam::<ID akun AWS>:mfa/<nama pengguna>: 977095
Deleted old access key ****************VLOV
Finished rotating access key