

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
<a name="use-user-ids-iam-policies-access-control-automation"></a>

*Srinivas Ananda Babu dan Ram Kandaswamy, Amazon Web Services*

## Ringkasan
<a name="use-user-ids-iam-policies-access-control-automation-summary"></a>

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 pengguna`j.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
<a name="use-user-ids-iam-policies-access-control-automation-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS
+ Peran IAM untuk administrator cloud untuk menjalankan template CloudFormation 

**Batasan**
+ Beberapa Layanan AWS tidak tersedia di semua AWS Region. Untuk ketersediaan Wilayah, lihat [Layanan AWS berdasarkan Wilayah](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Untuk titik akhir tertentu, lihat halaman [titik akhir dan kuota Layanan](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), dan pilih tautan untuk layanan.

## Arsitektur
<a name="use-user-ids-iam-policies-access-control-automation-architecture"></a>

**Arsitektur target**

Diagram berikut menunjukkan bagaimana 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.](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/71698647-274e-4911-92f0-549e444b53f6/images/7e507df4-f597-499e-bd5b-6d7a55e64146.png)


**Otomatisasi dan skala**

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

## Alat
<a name="use-user-ids-iam-policies-access-control-automation-tools"></a>

**Layanan AWS**
+ [IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) — 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 dapat terautentikasi (masuk) dan berwenang (memiliki izin) untuk menggunakan sumber daya.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)— 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](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)— 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
<a name="use-user-ids-iam-policies-access-control-automation-best-practices"></a>

Jika Anda memulai dari awal atau merencanakan penerapan greenfield, kami sangat menyarankan Anda menggunakannya [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)untuk 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
<a name="use-user-ids-iam-policies-access-control-automation-epics"></a>

### Validasi izin
<a name="validate-permissions"></a>


| Tugas | Deskripsi | Keterampilan 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<br />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](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html#using-temp-creds-sdk-cli). | Arsitek awan | 

### Membangun CloudFormation template
<a name="build-a-cfnshort-template"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat CloudFormation template. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/use-user-ids-iam-policies-access-control-automation.html) | AWS DevOps, arsitek Cloud | 
| Tambahkan parameter input untuk nama pengguna. | Tambahkan kode berikut ke `Parameters` bagian CloudFormation template:<pre>Parameters:<br />  NewIamUserName:<br />    Type: String<br />    Description: Unique username for the new IAM user<br /></pre><br />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:<pre>Resources:<br />  rNewIamUser:<br />    Type: 'AWS::IAM::User'<br />    Properties:<br />      UserName: !Ref NewIamUserName<br /></pre><br />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:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/use-user-ids-iam-policies-access-control-automation.html)<br />Untuk petunjuk tentang cara membuat peran eksekusi, lihat dokumentasi [Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html). 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.<pre>  GetUserLambdaFunction:<br />    Type: 'AWS::Lambda::Function'<br />    Properties:<br />      Handler: index.handler<br />      Role: <<ROLENAME>><br />      Timeout: 30<br />      Runtime: python3.11<br />      Code:<br />        ZipFile: |<br />          import cfnresponse, boto3<br />          def handler(event, context):<br />            try:<br />              print(event)<br />              user = boto3.client('iam').get_user(UserName=event['ResourceProperties']['NewIamUserName'])['User']<br />              cfnresponse.send(event, context, cfnresponse.SUCCESS, {'NewIamUserId': user['UserId'], 'NewIamUserPath': user['Path'], 'NewIamUserArn': user['Arn']})<br />            except Exception as e:<br />              cfnresponse.send(event, context, cfnresponse.FAILED, {'NewIamUser': str(e)})<br /></pre> | AWS DevOps, arsitek Cloud | 
| Tambahkan sumber daya khusus. | Tambahkan kode berikut ke `Resources` bagian CloudFormation template:<pre>  rCustomGetUniqueUserId:<br />    Type: 'Custom::rCustomGetUniqueUserIdWithLambda'<br />    Properties:<br />      ServiceToken: !GetAtt GetUserLambdaFunction.Arn<br />      NewIamUserName: !Ref NewIamUserName<br /></pre><br />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:<pre>Outputs:<br />  NewIamUserId:<br />    Value: !GetAtt rCustomGetUniqueUserId.NewIamUserId<br /></pre><br />Ini menampilkan IAM `UserID` untuk pengguna IAM baru. | AWS DevOps, arsitek Cloud | 
| Simpan template. | Simpan perubahan Anda ke CloudFormation template. | AWS DevOps, arsitek Cloud | 

### Menyebarkan template CloudFormation
<a name="deploy-the-cfnshort-template"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Menyebarkan CloudFormation template. | Untuk menerapkan `get_unique_user_id.yaml` template dengan menggunakan CloudFormation konsol, ikuti instruksi dalam [CloudFormation dokumentasi](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html).<br />Atau, Anda dapat menjalankan AWS CLI perintah berikut untuk menyebarkan template:<pre>aws cloudformation create-stack \<br />--stack-name DemoNewUser \<br />--template-body file://get_unique_user_id.yaml \<br />--parameters ParameterKey=NewIamUserName,ParameterValue=demouser \<br />--capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps, arsitek Cloud | 

## Sumber daya terkait
<a name="use-user-ids-iam-policies-access-control-automation-resources"></a>
+ [Buat tumpukan dari CloudFormation konsol](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) (CloudFormation dokumentasi)
+ [Sumber daya kustom yang didukung Lambda (dokumentasi](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources-lambda.html)) CloudFormation 
+ [Pengidentifikasi unik](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids) (dokumentasi IAM)
+ [Gunakan kredensyal sementara dengan AWS sumber daya (dokumentasi](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html) IAM)