Contoh kode Node.js ini menunjukkan:
Cara membuat dan menghapus kebijakan IAM.
Cara melampirkan dan melepaskan kebijakan IAM dari peran.
Skenario
Anda memberikan izin kepada pengguna dengan membuatkebijakan, yang merupakan dokumen yang mencantumkan tindakan yang dapat dilakukan pengguna dan sumber daya tindakan tersebut dapat mempengaruhi. Tindakan atau sumber daya apa pun yang tidak secara eksplisit diizinkan akan ditolak secara default. Kebijakan dapat dibuat dan dilampirkan ke pengguna, kelompok pengguna, peran yang diasumsikan oleh pengguna, dan sumber daya.
Dalam contoh ini, serangkaian modul Node.js digunakan untuk mengelola kebijakan di IAM. Modul Node.js menggunakan SDK untuk JavaScript untuk membuat dan menghapus kebijakan serta melampirkan dan memisahkan kebijakan peran menggunakan metodeIAMclass klien:
CreatePolicyCommand
GetPolicyCommand
ListAttachedRolePoliciesCommand
AttachRolePolicyCommand
DetachRolePolicyCommand
Untuk informasi selengkapnya tentang pengguna IAM, lihatIkhtisar manajemen akses: Izin dan kebijakandiPanduan Pengguna IAM.
Tugas prasyarat
Untuk mengatur dan menjalankan contoh ini, Anda harus terlebih dahulu menyelesaikan tugas ini:
Mengatur lingkungan proyek untuk menjalankan contoh Node TypeScript ini, dan menginstal diperlukanAWS SDK for JavaScriptdan modul pihak ketiga. Ikuti petunjuknya diGitHub.
Buat file konfigurasi bersama dengan kredensi pengguna Anda. Untuk informasi selengkapnya tentang menyediakan file kredenal bersama, lihatMemuat kredensi di Node.js dari file kredensi bersama.
Membuat peran IAM yang dapat Anda lampiri kebijakan. Untuk informasi selengkapnya tentang membuat peran, lihatMembuat Peran IAMdiPanduan Pengguna IAM.
Contoh-contoh ini menunjukkan bagaimana mengimpor/mengekspor objek layanan klien dan perintah menggunakan ECMAScript6 (ES6).
Ini membutuhkan Node.js versi 13.x atau lebih tinggi. Untuk mengunduh dan menginstal Node.js versi terbaru, lihatUnduhan Node.js..
Jika Anda lebih suka menggunakan sintaks CommonJS, lihatsintaks JavaScript ES6/CommonJS.
Membuat kebijakan IAM
Buatlibsdirektori, dan membuat modul Node.js dengan nama fileiamClient.js. Copy dan paste kode di bawah ini ke dalamnya, yang menciptakan objek klien IAM. GantiDAERAHdenganAWSWilayah.
import { IAMClient } from "@aws-sdk/client-iam"; // Set the AWS Region. const REGION = "REGION"; // For example, "us-east-1". // Create an IAM service client object. const iamClient = new IAMClient({ region: REGION }); export { iamClient };Contoh kode ini dapat ditemukandi GitHub.
Membuat modul Node.js dengan nama fileiam_createpolicy.js. Pastikan untuk mengkonfigurasi SDK seperti yang ditunjukkan sebelumnya, termasuk mengunduh klien dan paket yang diperlukan. Buat dua objek JSON, satu berisi dokumen kebijakan untuk membuat dan yang lain berisi parameter yang diperlukan untuk membuat kebijakan, yang mencakup kebijakan JSON dan nama untuk memberikan kebijakan. Pastikan untuk stringify kebijakan JSON objek dalam parameter. MemanggilCreatePolicyCommandmetodeIAMobjek layanan klien.
GantiRESOURCE_ARNdengan Amazon Resource Name (ARN) sumber daya yang ingin Anda berikan izin tersebut, danDYNAMODB_POLICY_NAMEdengan nama kebijakan DynamoDB.
// Import required AWS SDK clients and commands for Node.js. import { iamClient } from "./libs/iamClient.js"; import { CreatePolicyCommand } from "@aws-sdk/client-iam"; // Set the parameters. const myManagedPolicy = { Version: "2012-10-17", Statement: [ { Effect: "Allow", Action: "logs:CreateLogGroup", Resource: "RESOURCE_ARN", // RESOURCE_ARN }, { Effect: "Allow", Action: [ "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:Scan", "dynamodb:UpdateItem", ], Resource: "DYNAMODB_POLICY_NAME", // DYNAMODB_POLICY_NAME; For example, "myDynamoDBName". }, ], }; export const params = { PolicyDocument: JSON.stringify(myManagedPolicy), PolicyName: "IAM_POLICY_NAME", }; export const run = async () => { try { const data = await iamClient.send(new CreatePolicyCommand(params)); console.log("Success", data); return data; } catch (err) { console.log("Error", err); } }; run();Untuk menjalankan contoh, masukkan yang perintah selanjutnya pada prompt perintah.
node iam_createpolicy.jsContoh kode ini dapat ditemukandi GitHub.
Mendapatkan kebijakan IAM
Buatlibsdirektori, dan membuat modul Node.js dengan nama fileiamClient.js. Copy dan paste kode di bawah ini ke dalamnya, yang menciptakan objek klien IAM. GantiDAERAHdenganAWSWilayah.
import { IAMClient } from "@aws-sdk/client-iam"; // Set the AWS Region. const REGION = "REGION"; // For example, "us-east-1". // Create an IAM service client object. const iamClient = new IAMClient({ region: REGION }); export { iamClient };Contoh kode ini dapat ditemukandi GitHub.
Membuat modul Node.js dengan nama fileiam_getpolicy.js. Pastikan untuk mengkonfigurasi SDK seperti yang ditunjukkan sebelumnya, termasuk mengunduh klien dan paket yang diperlukan. Buat objek JSON yang berisi parameter yang diperlukan mengambil kebijakan, yang merupakan ARN kebijakan untuk mendapatkan. MemanggilGetPolicyCommandmetodeIAMobjek layanan klien. Tulis deskripsi kebijakan ke konsol.
// Import required AWS SDK clients and commands for Node.js. import { iamClient } from "./libs/iamClient.js"; import { GetPolicyCommand } from "@aws-sdk/client-iam"; // Set the parameters. const params = { PolicyArn: "POLICY_ARN" /* required */, }; const run = async () => { try { const data = await iamClient.send(new GetPolicyCommand(params)); console.log("Success", data.Policy); } catch (err) { console.log("Error", err); } }; run();Untuk menjalankan contoh, masukkan yang perintah selanjutnya pada prompt perintah.
node iam_getpolicy.jsContoh kode ini dapat ditemukandi GitHub.
Melampirkan kebijakan peran terkelola
Buatlibsdirektori, dan membuat modul Node.js dengan nama fileiamClient.js. Copy dan paste kode di bawah ini ke dalamnya, yang menciptakan objek klien IAM. GantiDAERAHdenganAWSWilayah.
import { IAMClient } from "@aws-sdk/client-iam"; // Set the AWS Region. const REGION = "REGION"; // For example, "us-east-1". // Create an IAM service client object. const iamClient = new IAMClient({ region: REGION }); export { iamClient };Contoh kode ini dapat ditemukandi GitHub.
Membuat modul Node.js dengan nama fileiam_attachrolepolicy.js. Pastikan untuk mengkonfigurasi SDK seperti yang ditunjukkan sebelumnya, termasuk mengunduh klien dan paket yang diperlukan. Buat objek JSON yang berisi parameter yang diperlukan untuk mendapatkan daftar kebijakan IAM terkelola yang melekat pada peran, yang terdiri dari nama peran. Berikan nama peran sebagai parameter baris perintah. MemanggilListAttachedRolePoliciesCommandmetodeIAMobjek layanan klien, yang mengembalikan array kebijakan dikelola untuk fungsi callback.
Periksa anggota array untuk melihat apakah kebijakan yang dilampirkan pada peran sudah terpasang. Jika kebijakan tidak dilampirkan, hubungiAttachRolePolicyCommanduntuk melampirkannya.
GantiROLE_NAMEdengan nama peran untuk dilampirkan.
// Import required AWS SDK clients and commands for Node.js. import { iamClient } from "./libs/iamClient.js"; import { ListAttachedRolePoliciesCommand, AttachRolePolicyCommand, } from "@aws-sdk/client-iam"; // Set the parameters. const ROLENAME = "ROLE_NAME"; const paramsRoleList = { RoleName: ROLENAME }; //ROLE_NAME export const params = { PolicyArn: "arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess", RoleName: ROLENAME, }; export const run = async () => { try { const data = await iamClient.send( new ListAttachedRolePoliciesCommand(paramsRoleList) ); return data; const myRolePolicies = data.AttachedPolicies; myRolePolicies.forEach(function (val, index, array) { if (myRolePolicies[index].PolicyName === "AmazonDynamoDBFullAccess") { console.log( "AmazonDynamoDBFullAccess is already attached to this role." ); process.exit(); } }); try { const data = await iamClient.send(new AttachRolePolicyCommand(params)); console.log("Role attached successfully"); return data; } catch (err) { console.log("Error", err); } } catch (err) { console.log("Error", err); } }; run();Untuk menjalankan contoh, masukkan yang perintah selanjutnya pada prompt perintah.
node iam_attachrolepolicy.jsContoh kode ini dapat ditemukandi GitHub.
Melepaskan kebijakan peran terkelola
Buatlibsdirektori, dan membuat modul Node.js dengan nama fileiamClient.js. Copy dan paste kode di bawah ini ke dalamnya, yang menciptakan objek klien IAM. GantiDAERAHdenganAWSWilayah.
import { IAMClient } from "@aws-sdk/client-iam"; // Set the AWS Region. const REGION = "REGION"; // For example, "us-east-1". // Create an IAM service client object. const iamClient = new IAMClient({ region: REGION }); export { iamClient };Contoh kode ini dapat ditemukandi GitHub.
Membuat modul Node.js dengan nama fileiam_detachrolepolicy.js. Pastikan untuk mengkonfigurasi SDK seperti yang ditunjukkan sebelumnya, termasuk mengunduh klien dan paket yang diperlukan. Buat objek JSON yang berisi parameter yang diperlukan untuk mendapatkan daftar kebijakan IAM terkelola yang melekat pada peran, yang terdiri dari nama peran. Berikan nama peran sebagai parameter baris perintah. MemanggilListAttachedRolePoliciesCommandmetodeIAMobjek layanan klien, yang mengembalikan array kebijakan dikelola dalam fungsi callback.
Periksa anggota array untuk melihat apakah kebijakan untuk melepaskan diri dari peran dilampirkan. Jika kebijakan dilampirkan, hubungiDetachRolePolicyCommanduntuk melepaskannya.
GantiROLE_NAMEdengan nama peran untuk melepaskan.
// Import required AWS SDK clients and commands for Node.js. import { iamClient } from "./libs/iamClient.js"; import { ListAttachedRolePoliciesCommand, DetachRolePolicyCommand, } from "@aws-sdk/client-iam"; // Set the parameters. export const params = { RoleName: "ROLE_NAME" }; //ROLE_NAME export const run = async () => { try { const data = await iamClient.send( new ListAttachedRolePoliciesCommand(params) ); return data; const myRolePolicies = data.AttachedPolicies; myRolePolicies.forEach(function (val, index, array) { if (myRolePolicies[index].PolicyName === "AmazonDynamoDBFullAccess") { const params = { PolicyArn: "arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess", paramsRoleList, }; try { const results = iamClient.send( new DetachRolePolicyCommand(paramsRoleList) ); console.log("Policy detached from role successfully"); process.exit(); } catch (err) { console.log("Unable to detach policy from role", err); } } else { } }); } catch (err) { console.log("User " + "USER_NAME" + " does not exist."); } }; run();Untuk menjalankan contoh, masukkan yang perintah selanjutnya pada prompt perintah.
node iam_detachrolepolicy.jsContoh kode ini dapat ditemukandi GitHub.