Gunakan pengguna IDs dalam kebijakan IAM untuk kontrol akses dan otomatisasi - AWS Prescriptive Guidance

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

Gunakan pengguna IDs dalam kebijakan IAM untuk kontrol akses dan otomatisasi

Srinivas Ananda Babu dan Ram Kandaswamy, Amazon Web Services

Ringkasan

Pola ini menjelaskan potensi jebakan menggunakan kebijakan berbasis nama pengguna di AWS Identity and Access Management (IAM), manfaat menggunakan pengguna IDs, dan bagaimana mengintegrasikan pendekatan ini dengan otomatisasi. AWS CloudFormation

Di dalamnya AWS Cloud, layanan IAM membantu Anda mengelola identitas pengguna dan kontrol akses dengan presisi. Namun, ketergantungan pada nama pengguna dalam pembuatan kebijakan IAM dapat menyebabkan risiko keamanan yang tidak terduga dan masalah kontrol akses. Misalnya, pertimbangkan skenario ini: Karyawan baru, John Doe, bergabung dengan tim Anda, dan Anda membuat akun pengguna IAM dengan nama penggunaj.doe, yang memberi mereka izin melalui kebijakan IAM yang mereferensikan nama pengguna. Ketika John meninggalkan perusahaan, akun tersebut dihapus. Masalahnya dimulai ketika karyawan baru, Jane Doe, bergabung dengan tim Anda, dan j.doe nama pengguna dibuat ulang. Kebijakan yang ada sekarang memberi Jane Doe izin yang sama dengan John Doe. Ini menciptakan mimpi buruk keamanan dan kepatuhan potensial.

Memperbarui setiap kebijakan secara manual untuk mencerminkan detail pengguna baru adalah proses yang memakan waktu dan rawan kesalahan, terutama seiring pertumbuhan organisasi Anda. Solusinya adalah dengan menggunakan ID pengguna yang unik dan tidak dapat diubah. Saat Anda membuat akun pengguna IAM, AWS berikan ID pengguna unik (atau ID utama) kepada pengguna IAM. Anda dapat menggunakan pengguna ini IDs dalam kebijakan IAM Anda untuk memastikan kontrol akses yang konsisten dan andal yang tidak terpengaruh oleh perubahan nama pengguna atau penggunaan kembali.

Misalnya, kebijakan IAM yang menggunakan ID pengguna mungkin terlihat seperti ini:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::example-bucket", "Principal": { "AWS": "arn:aws:iam::123456789012:user/abcdef01234567890" } } ] }

Manfaat menggunakan pengguna IDs dalam kebijakan IAM meliputi:

  • Keunikan. Pengguna IDs unik di semua Akun AWS, sehingga mereka memberikan aplikasi izin yang benar dan konsisten.

  • Kekekalan. Pengguna IDs tidak dapat diubah, sehingga mereka menyediakan pengenal yang stabil untuk merujuk pengguna dalam kebijakan.

  • Audit dan kepatuhan. Layanan AWS sering menyertakan pengguna IDs dalam log dan jejak audit, yang membuatnya mudah untuk melacak tindakan kembali ke pengguna tertentu.

  • Otomasi dan integrasi. Menggunakan pengguna IDs dalam AWS APIs, SDKs, atau skrip otomatisasi memastikan bahwa proses tetap tidak terpengaruh oleh perubahan nama pengguna.

  • Pemeriksaan masa depan. Menggunakan kebijakan pengguna IDs sejak awal dapat mencegah potensi masalah kontrol akses atau pembaruan kebijakan yang ekstensif.

Otomatisasi

Saat Anda menggunakan alat infrastruktur sebagai kode (IAc) seperti AWS CloudFormation, jebakan kebijakan IAM berbasis nama pengguna masih dapat menyebabkan masalah. Sumber daya pengguna IAM mengembalikan nama pengguna saat Anda memanggil fungsi Ref intrinsik. Seiring perkembangan infrastruktur organisasi Anda, siklus pembuatan dan penghapusan sumber daya, termasuk akun pengguna IAM, dapat menyebabkan masalah kontrol akses yang tidak diinginkan jika Anda menggunakan kembali nama pengguna.

Untuk mengatasi masalah ini, kami sarankan Anda memasukkan pengguna IDs ke dalam CloudFormation template Anda. Namun, mendapatkan pengguna IDs untuk tujuan ini bisa menjadi tantangan. Di sinilah sumber daya khusus dapat membantu. Anda dapat menggunakan sumber daya CloudFormation khusus untuk memperluas fungsionalitas layanan dengan mengintegrasikan dengan AWS APIs atau layanan eksternal. Dengan membuat sumber daya kustom yang mengambil ID pengguna untuk pengguna IAM tertentu, Anda dapat membuat ID pengguna tersedia dalam template Anda CloudFormation . Pendekatan ini merampingkan proses referensi pengguna IDs dan memastikan bahwa alur kerja otomatisasi Anda tetap kuat dan tahan masa depan.

Prasyarat dan batasan

Prasyarat

  • Aktif Akun AWS

  • Peran IAM untuk administrator cloud untuk menjalankan template AWS CloudFormation

Batasan

Arsitektur

Arsitektur target

Diagram berikut menunjukkan bagaimana AWS CloudFormation menggunakan sumber daya kustom yang didukung oleh AWS Lambda untuk mengambil ID pengguna IAM.

Mendapatkan ID pengguna IAM dengan menggunakan sumber daya CloudFormation khusus.

Otomatisasi dan skala

Anda dapat menggunakan CloudFormation template beberapa kali untuk berbagai Wilayah AWS dan akun. Anda hanya perlu menjalankannya sekali di setiap Wilayah atau akun.

Alat

Layanan AWS

  • IAM — AWS Identity and Access Management (IAM) adalah layanan web yang membantu Anda mengontrol akses ke sumber daya dengan aman. AWS Anda menggunakan IAM untuk mengontrol siapa yang diautentikasi (masuk) dan diotorisasi (memiliki izin) untuk menggunakan sumber daya.

  • AWS CloudFormation— AWS CloudFormation membantu Anda memodelkan dan mengatur AWS sumber daya Anda sehingga Anda dapat menghabiskan lebih sedikit waktu mengelola sumber daya tersebut dan lebih banyak waktu untuk berfokus pada aplikasi Anda yang berjalan AWS. Anda membuat template yang menjelaskan AWS sumber daya yang Anda inginkan, dan CloudFormation mengurus penyediaan dan konfigurasi sumber daya tersebut untuk Anda.

  • AWS Lambda— AWS Lambda adalah layanan komputasi yang mendukung menjalankan kode tanpa menyediakan atau mengelola server. Lambda menjalankan kode Anda hanya saat diperlukan dan menskalakan secara otomatis, dari beberapa permintaan per hari hingga ribuan per detik. 

Praktik terbaik

Jika Anda memulai dari awal atau merencanakan penerapan greenfield, kami sangat menyarankan Anda menggunakannya AWS IAM Identity Centeruntuk manajemen pengguna terpusat. IAM Identity Center terintegrasi dengan penyedia identitas Anda yang ada (seperti Active Directory atau Okta) untuk menyatukan identitas pengguna AWS, yang menghilangkan kebutuhan untuk membuat dan mengelola pengguna IAM secara langsung. Pendekatan ini tidak hanya memastikan kontrol akses yang konsisten tetapi juga menyederhanakan manajemen siklus hidup pengguna dan membantu meningkatkan keamanan dan kepatuhan di seluruh lingkungan Anda. AWS

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Validasi peran Anda Akun AWS dan IAM.

Konfirmasikan bahwa Anda memiliki peran IAM dengan izin untuk menerapkan CloudFormation templat di situs Anda. Akun AWS

Jika Anda berencana menggunakan AWS CLI alih-alih CloudFormation konsol untuk menerapkan template pada langkah terakhir prosedur ini, Anda juga harus menyiapkan kredensyal sementara untuk menjalankan perintah. AWS CLI Untuk petunjuk, lihat dokumentasi IAM.

Arsitek awan
TugasDeskripsiKeterampilan yang dibutuhkan

Buat CloudFormation template.

  1. Buat CloudFormation template dengan mengikuti instruksi dalam CloudFormation dokumentasi. Anda dapat menggunakan format JSON atau YAMM. Pola ini mengasumsikan bahwa Anda menggunakan format YAMM.

  2. Simpan template dengan namaget_unique_user_id.yaml.

AWS DevOps, arsitek Cloud

Tambahkan parameter input untuk nama pengguna.

Tambahkan kode berikut ke Parameters bagian CloudFormation template:

Parameters: NewIamUserName: Type: String Description: Unique username for the new IAM user

Parameter ini meminta pengguna untuk nama pengguna.

AWS DevOps, arsitek Cloud

Tambahkan sumber daya khusus untuk membuat pengguna IAM.

Tambahkan kode berikut ke Resources bagian CloudFormation template:

Resources: rNewIamUser: Type: 'AWS::IAM::User' Properties: UserName: !Ref NewIamUserName

Kode ini menambahkan CloudFormation sumber daya yang menciptakan pengguna IAM dengan nama yang disediakan oleh NewIamUserName parameter.

AWS DevOps, arsitek Cloud

Tambahkan peran eksekusi untuk fungsi Lambda.

Pada langkah ini, Anda membuat peran IAM yang memberikan izin AWS Lambda fungsi untuk mendapatkan IAM. UserId Tentukan izin minimum yang diperlukan berikut untuk dijalankan Lambda:

  • logs:CreateLogStream

  • logs:PutLogEvents

  • CreateLogGroup

  • iam:GetUser

  • AssumeRoleuntuk lambda.amazonaws.com

Untuk petunjuk tentang cara membuat peran eksekusi, lihat dokumentasi Lambda. Anda akan mereferensikan peran ini di langkah berikutnya, saat Anda membuat fungsi Lambda.

Administrator AWS, arsitek Cloud

Tambahkan fungsi Lambda untuk mendapatkan IAM yang unik. UserId

Pada langkah ini, Anda mendefinisikan fungsi Lambda dengan runtime Python untuk mendapatkan IAM yang unik. UserId Untuk melakukan ini, tambahkan kode berikut ke Resources bagian CloudFormation templat. Ganti <<ROLENAME>> dengan nama peran eksekusi yang Anda buat di langkah terakhir.

GetUserLambdaFunction: Type: 'AWS::Lambda::Function' Properties: Handler: index.handler Role: <<ROLENAME>> Timeout: 30 Runtime: python3.11 Code: ZipFile: | import cfnresponse, boto3 def handler(event, context): try: print(event) user = boto3.client('iam').get_user(UserName=event['ResourceProperties']['NewIamUserName'])['User'] cfnresponse.send(event, context, cfnresponse.SUCCESS, {'NewIamUserId': user['UserId'], 'NewIamUserPath': user['Path'], 'NewIamUserArn': user['Arn']}) except Exception as e: cfnresponse.send(event, context, cfnresponse.FAILED, {'NewIamUser': str(e)})
AWS DevOps, arsitek Cloud

Tambahkan sumber daya khusus.

Tambahkan kode berikut ke Resources bagian CloudFormation template:

rCustomGetUniqueUserId: Type: 'Custom::rCustomGetUniqueUserIdWithLambda' Properties: ServiceToken: !GetAtt GetUserLambdaFunction.Arn NewIamUserName: !Ref NewIamUserName

Sumber daya khusus ini memanggil fungsi Lambda untuk mendapatkan IAM. UserID

AWS DevOps, arsitek Cloud

Tentukan CloudFormation output.

Tambahkan kode berikut ke Outputs bagian CloudFormation template:

Outputs: NewIamUserId: Value: !GetAtt rCustomGetUniqueUserId.NewIamUserId

Ini menampilkan IAM UserID untuk pengguna IAM baru.

AWS DevOps, arsitek Cloud

Simpan template.

Simpan perubahan Anda ke CloudFormation template.

AWS DevOps, arsitek Cloud
TugasDeskripsiKeterampilan yang dibutuhkan

Menyebarkan CloudFormation template.

Untuk menerapkan get_unique_user_id.yaml template dengan menggunakan CloudFormation konsol, ikuti instruksi dalam CloudFormation dokumentasi.

Atau, Anda dapat menjalankan AWS CLI perintah berikut untuk menyebarkan template:

aws cloudformation create-stack \ --stack-name DemoNewUser \ --template-body file://get_unique_user_id.yaml \ --parameters ParameterKey=NewIamUserName,ParameterValue=demouser \ --capabilities CAPABILITY_NAMED_IAM
AWS DevOps, arsitek Cloud

Sumber daya terkait