// Ġsnippet - source description :[ IAM Scenario . kt Ġdemonstrates Ġhow Ġto Ġperform Ġvarious ĠAWS ĠIdentity Ġand ĠAccess ĠManagement Ġ( IAM ) Ġoperations .] č Ċ // Ġsnippet - keyword :[ AWS ĠSDK Ġfor ĠKotlin ] č Ċ // Ġsnippet - keyword :[ Code ĠSample ] č Ċ // Ġsnippet - service :[ IAM ] č Ċ // Ġsnippet - s ourc etype :[ full - example ] č Ċ // Ġsnippet - s ourced ate :[ 0 1 / 2 0 / 2 0 2 2 ] č Ċ // Ġsnippet - source author :[ sc mac don - aws ] čĊč Ċ /* čĊĠĠ ĠCopyright ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . ĠAll ĠRights ĠReserved . čĊĠĠ ĠSPDX - License - Identifier : ĠApache - 2 . 0 č Ċ */ čĊč Ċ package Ġcom . kotlin . iam čĊč Ċ // Ġsnippet - start :[ iam . kotlin . scenario . import ] č Ċ import Ġaws . sdk . kotlin . runtime . auth . credentials . Static Credentials Provider č Ċ import Ġaws . sdk . kotlin . services . iam . Iam Client č Ċ import Ġaws . sdk . kotlin . services . iam . model . Attach Role Policy Request č Ċ import Ġaws . sdk . kotlin . services . iam . model . Attached Policy č Ċ import Ġaws . sdk . kotlin . services . iam . model . Create Policy Request č Ċ import Ġaws . sdk . kotlin . services . iam . model . Create Role Request č Ċ import Ġaws . sdk . kotlin . services . iam . model . Create UserRequest č Ċ import Ġaws . sdk . kotlin . services . iam . model . Delete Policy Request č Ċ import Ġaws . sdk . kotlin . services . iam . model . Delete Role Request č Ċ import Ġaws . sdk . kotlin . services . iam . model . Delete UserRequest č Ċ import Ġaws . sdk . kotlin . services . iam . model . Detach Role Policy Request č Ċ import Ġaws . sdk . kotlin . services . iam . model . List Attached Role Policies Request č Ċ import Ġaws . sdk . kotlin . services . s 3 . S 3 Client č Ċ import Ġaws . sdk . kotlin . services . s 3 . model . List Objects Request č Ċ import Ġaws . sdk . kotlin . services . sts . St s Client č Ċ import Ġaws . sdk . kotlin . services . sts . model . Ass ume Role Request č Ċ import Ġkotlinx . coroutines . delay č Ċ import Ġorg . json . simple . JSONObject č Ċ import Ġorg . json . simple . parser . JSONParser č Ċ import Ġjava . io . FileReader č Ċ import Ġkotlin . system . exit Process č Ċ // Ġsnippet - end :[ iam . kotlin . scenario . import ] čĊč Ċ /** č Ċ To Ġrun Ġthis ĠKotlin Ġcode Ġexample , Ġensure Ġthat Ġyou Ġhave Ġset Ġup Ġyour Ġdevelopment Ġenvironment , č Ċ including Ġyour Ġcredentials . čĊč Ċ For Ġinformation , Ġsee Ġthis Ġdocumentation Ġtopic : č Ċ https :// docs . aws . amazon . com / sdk - for - kotlin / latest / developer - guide / setup . html čĊč Ċ This Ġexample Ġperforms Ġthese Ġoperations : čĊčĊ 1 . ĠCreates Ġa Ġuser Ġthat Ġhas Ġno Ġpermissions . čĊ 2 . ĠCreates Ġa Ġrole Ġand Ġpolicy Ġthat Ġgr ants ĠAmazon ĠS 3 Ġpermissions . čĊ 3 . ĠGr ants Ġthe Ġuser Ġpermissions . čĊ 4 . ĠGets Ġtemporary Ġcredentials Ġby Ġassuming Ġthe Ġrole . čĊ 5 . ĠCreates Ġan ĠAmazon ĠS 3 ĠService Ġclient Ġobject Ġwith Ġthe Ġtemporary Ġcredentials Ġand Ġlist Ġobjects Ġin Ġan ĠAmazon ĠS 3 Ġbucket . čĊ 6 . ĠDeletes Ġthe Ġresources . čĊ Ġ*/ čĊč Ċ // Ġsnippet - start :[ iam . kotlin . scenario . main ] č Ċ suspend Ġfun Ġmain ( args : ĠArray < String >) Ġ{ čĊčĊĠĠĠ Ġval Ġusage Ġ= Ġ""" čĊĠĠĠ ĠUsage : čĊĠĠĠĠĠĠĠ Ġ< username > Ġ< policy Name > Ġ< role Name > Ġ< role Session Name > Ġ< file Location > Ġ< bucketName > Ġ čĊčĊĠĠĠ ĠWhere : čĊĠĠĠĠĠĠĠ Ġusername Ġ- Ġthe Ġname Ġof Ġthe ĠIAM Ġuser Ġto Ġcreate . ĠčĊĠĠĠĠĠĠĠ Ġpolicy Name Ġ- Ġthe Ġname Ġof Ġthe Ġpolicy Ġto Ġcreate . ĠčĊĠĠĠĠĠĠĠ Ġrole Name Ġ- Ġthe Ġname Ġof Ġthe Ġrole Ġto Ġcreate . ĠčĊĠĠĠĠĠĠĠ Ġrole Session Name Ġ- Ġthe Ġname Ġof Ġthe Ġsession Ġrequired Ġfor Ġthe Ġassume Role Ġoperation . ĠčĊĠĠĠĠĠĠĠ Ġfile Location Ġ- Ġthe Ġfile Ġlocation Ġto Ġthe ĠJSON Ġrequired Ġto Ġcreate Ġthe Ġrole Ġ( see ĠRead me ). ĠčĊĠĠĠĠĠĠĠ Ġbucket Name Ġ- Ġthe Ġname Ġof Ġthe ĠAmazon ĠS 3 Ġbucket Ġfrom Ġwhich Ġobjects Ġare Ġread . ĠčĊĠĠĠ Ġ""" čĊčĊĠĠĠ Ġif Ġ( args . size Ġ!= Ġ 6 ) Ġ{ čĊĠĠĠĠĠĠĠ Ġprintln ( usage ) čĊĠĠĠĠĠĠĠ Ġexit Process ( 1 ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġval ĠuserName Ġ= Ġargs [ 0 ] čĊĠĠĠ Ġval Ġpolicy Name Ġ= Ġargs [ 1 ] čĊĠĠĠ Ġval Ġrole Name Ġ= Ġargs [ 2 ] čĊĠĠĠ Ġval Ġrole Session Name Ġ= Ġargs [ 3 ] čĊĠĠĠ Ġval Ġfile Location Ġ= Ġargs [ 4 ] čĊĠĠĠ Ġval Ġbucket Name Ġ= Ġargs [ 5 ] čĊčĊĠĠĠ Ġcreate User ( userName ) čĊĠĠĠ Ġprintln ("$ userName Ġwas Ġsuccessfully Ġcreated .") čĊčĊĠĠĠ Ġval Ġpol Arn Ġ= Ġcreate Policy ( policy Name ) čĊĠĠĠ Ġprintln (" The Ġpolicy Ġ$ pol Arn Ġwas Ġsuccessfully Ġcreated .") čĊčĊĠĠĠ Ġval Ġrole Arn Ġ= Ġcreate Role ( role Name , Ġfile Location ) čĊĠĠĠ Ġprintln ("$ role Arn Ġwas Ġsuccessfully Ġcreated .") čĊĠĠĠ Ġattach Role Policy ( role Name , Ġpol Arn ) čĊčĊĠĠĠ Ġprintln (" *** ĠWait Ġfor Ġ 1 ĠMIN Ġso Ġthe Ġresource Ġis Ġavailable .") čĊĠĠĠ Ġdelay ( 6 0 0 0 0 ) čĊĠĠĠ Ġassume Given Role ( role Arn , Ġrole Session Name , Ġbucket Name ) čĊčĊĠĠĠ Ġprintln (" *** ĠGetting Ġready Ġto Ġdelete Ġthe ĠAWS Ġresources .") čĊĠĠĠ Ġdelete Role ( role Name , Ġpol Arn ) čĊĠĠĠ Ġdelete User ( userName ) čĊĠĠĠ Ġprintln (" This ĠIAM ĠScenario Ġhas Ġsuccessfully Ġcompleted .") č Ċ } čĊč Ċ suspend Ġfun Ġcreate User ( username Val : ĠString ?): ĠString ? Ġ{ čĊčĊĠĠĠ Ġval Ġrequest Ġ= ĠCreate UserRequest Ġ{ čĊĠĠĠĠĠĠĠ ĠuserName Ġ= Ġusername Val čĊĠĠĠ Ġ} čĊčĊĠĠĠ ĠI am Client Ġ{ Ġregion Ġ= Ġ" AWS _ GLOBAL " Ġ}. use Ġ{ Ġiam Client Ġ-> čĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġiam Client . createUser ( request ) čĊĠĠĠĠĠĠĠ Ġreturn Ġresponse . user ?. userName čĊĠĠĠ Ġ} č Ċ } čĊč Ċ suspend Ġfun Ġcreate Policy ( policy Name Val : ĠString ?): ĠString Ġ{ čĊčĊĠĠĠ Ġval Ġpolicy Document Value : ĠString Ġ= Ġ" {" Ġ+ čĊĠĠĠĠĠĠĠ Ġ" Ġ Ġ\" Version \": Ġ\" 2 0 1 2 - 1 0 - 1 7 \ "," Ġ+ čĊĠĠĠĠĠĠĠ Ġ" Ġ Ġ\" Statement \": Ġ[" Ġ+ čĊĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ{" Ġ+ čĊĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġ\" Effect \": Ġ\" Allow \ "," Ġ+ čĊĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġ\" Action \": Ġ[" Ġ+ čĊĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġ\" s 3 : *\ "" Ġ+ čĊĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠ Ġ], " Ġ+ čĊĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠ Ġ\" Resource \": Ġ\" *\ "" Ġ+ čĊĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ}" Ġ+ čĊĠĠĠĠĠĠĠ Ġ" ĠĠ Ġ] " Ġ+ čĊĠĠĠĠĠĠĠ Ġ" }" čĊčĊĠĠĠ Ġval Ġrequest Ġ= ĠCreate Policy Request Ġ{ čĊĠĠĠĠĠĠĠ Ġpolicy Name Ġ= Ġpolicy Name Val čĊĠĠĠĠĠĠĠ Ġpolicy Document Ġ= Ġpolicy Document Value čĊĠĠĠ Ġ} čĊčĊĠĠĠ ĠI am Client Ġ{ Ġregion Ġ= Ġ" AWS _ GLOBAL " Ġ}. use Ġ{ Ġiam Client Ġ-> čĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġiam Client . create Policy ( request ) čĊĠĠĠĠĠĠĠ Ġreturn Ġresponse . policy ?. arn . toString () čĊĠĠĠ Ġ} č Ċ } čĊč Ċ suspend Ġfun Ġcreate Role ( rol ename Val : ĠString ?, Ġfile Location : ĠString ?): ĠString ? Ġ{ čĊčĊĠĠĠ Ġval ĠjsonObject Ġ= Ġfile Location ?. let Ġ{ Ġread Json Simple Demo ( it ) Ġ} Ġas ĠJSONObject čĊčĊĠĠĠ Ġval Ġrequest Ġ= ĠCreate Role Request Ġ{ čĊĠĠĠĠĠĠĠ Ġrole Name Ġ= Ġro lename Val čĊĠĠĠĠĠĠĠ Ġassume Role Policy Document Ġ= ĠjsonObject . toJSON String () čĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Created Ġusing Ġthe ĠAWS ĠSDK Ġfor ĠKotlin " čĊĠĠĠ Ġ} čĊčĊĠĠĠ ĠI am Client Ġ{ Ġregion Ġ= Ġ" AWS _ GLOBAL " Ġ}. use Ġ{ Ġiam Client Ġ-> čĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġiam Client . create Role ( request ) čĊĠĠĠĠĠĠĠ Ġreturn Ġresponse . role ?. arn čĊĠĠĠ Ġ} č Ċ } čĊč Ċ suspend Ġfun Ġattach Role Policy ( role Name Val : ĠString , Ġpolicy Arn Val : ĠString ) Ġ{ čĊčĊĠĠĠ Ġval Ġrequest Ġ= ĠList Attached Role Policies Request Ġ{ čĊĠĠĠĠĠĠĠ Ġrole Name Ġ= Ġrole Name Val čĊĠĠĠ Ġ} čĊčĊĠĠĠ ĠI am Client Ġ{ Ġregion Ġ= Ġ" AWS _ GLOBAL " Ġ}. use Ġ{ Ġiam Client Ġ-> čĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġiam Client . list Attached Role Policies ( request ) čĊĠĠĠĠĠĠĠ Ġval Ġattached Policies Ġ= Ġresponse . attached Policies čĊčĊĠĠĠĠĠĠĠ Ġ// ĠEnsure Ġthat Ġthe Ġpolicy Ġis Ġnot Ġattached Ġto Ġthis Ġrole . čĊĠĠĠĠĠĠĠ Ġval Ġcheck Status : ĠInt čĊĠĠĠĠĠĠĠ Ġif Ġ( attached Policies Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Status Ġ= Ġcheck My List ( attached Policies , Ġpolicy Arn Val ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Status Ġ== Ġ- 1 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġval Ġpolicy Request Ġ= ĠAttach Role Policy Request Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġrole Name Ġ= Ġrole Name Val čĊĠĠĠĠĠĠĠĠĠĠĠ Ġpolicy Arn Ġ= Ġpolicy Arn Val čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġiam Client . attach Role Policy ( policy Request ) čĊĠĠĠĠĠĠĠ Ġprintln (" Successfully Ġattached Ġpolicy Ġ$ policy Arn Val Ġto Ġrole Ġ$ role Name Val ") čĊĠĠĠ Ġ} č Ċ } čĊč Ċ fun Ġcheck My List ( attached Policies : ĠList < Attached Policy >, Ġpolicy Arn Val : ĠString ): ĠInt Ġ{ čĊčĊĠĠĠ Ġfor Ġ( policy Ġin Ġattached Policies ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġpol Arn Ġ= Ġpolicy . policy Arn . toString () čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( pol Arn . compareTo ( policy Arn Val ) Ġ== Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" The Ġpolicy Ġis Ġalready Ġattached Ġto Ġthis Ġrole .") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊĠĠĠ Ġreturn Ġ 0 č Ċ } čĊč Ċ suspend Ġfun Ġassume Given Role ( role Arn Val : ĠString ?, Ġrole Session Name Val : ĠString ?, Ġbucket Name : ĠString ) Ġ{ čĊčĊĠĠĠ Ġval Ġst s Client Ġ= ĠSt s Client Ġ{ čĊĠĠĠĠĠĠĠ Ġregion Ġ= Ġ" us - east - 1 " čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġval Ġrole Request Ġ= ĠAssume Role Request Ġ{ čĊĠĠĠĠĠĠĠ Ġrole Arn Ġ= Ġrole Arn Val čĊĠĠĠĠĠĠĠ Ġrole Session Name Ġ= Ġrole Session Name Val čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġval Ġrole Response Ġ= Ġst s Client . assume Role ( role Request ) čĊĠĠĠ Ġval Ġmy Cred s Ġ= Ġrole Response . credentials čĊĠĠĠ Ġval Ġkey Ġ= Ġmy Cred s ?. access KeyId čĊĠĠĠ Ġval Ġsec Key Ġ= Ġmy Cred s ?. secret AccessKey čĊĠĠĠ Ġval Ġsec Token Ġ= Ġmy Cred s ?. session Token čĊčĊĠĠĠ Ġval Ġstatic Credentials Ġ= ĠStatic Credentials Provider Ġ{ čĊĠĠĠĠĠĠĠ Ġaccess KeyId Ġ= Ġkey čĊĠĠĠĠĠĠĠ Ġsecret AccessKey Ġ= Ġsec Key čĊĠĠĠĠĠĠĠ Ġsession Token Ġ= Ġsec Token čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ// ĠList Ġall Ġobjects Ġin Ġan ĠAmazon ĠS 3 Ġbucket Ġusing Ġthe Ġtemp Ġcreds . čĊĠĠĠ Ġval Ġs 3 Ġ= ĠS 3 Client Ġ{ čĊĠĠĠĠĠĠĠ Ġcredentials Provider Ġ= Ġstatic Credentials čĊĠĠĠĠĠĠĠ Ġregion Ġ= Ġ" us - east - 1 " čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprintln (" Created Ġa ĠS 3 Client Ġusing Ġtemp Ġcredentials .") čĊĠĠĠ Ġprintln (" Listing Ġobjects Ġin Ġ$ bucketName ") čĊčĊĠĠĠ Ġval Ġlist Objects Ġ= ĠList Objects Request Ġ{ čĊĠĠĠĠĠĠĠ Ġbucket Ġ= Ġbucket Name čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġval Ġresponse Ġ= Ġs 3 . list Objects ( list Objects ) čĊĠĠĠ Ġresponse . contents ?. forEach Ġ{ Ġmy Object Ġ-> čĊĠĠĠĠĠĠĠ Ġprintln (" The Ġname Ġof Ġthe Ġkey Ġis Ġ${ my Object . key }") čĊĠĠĠĠĠĠĠ Ġprintln (" The Ġowner Ġis Ġ${ my Object . owner }") čĊĠĠĠ Ġ} č Ċ } čĊč Ċ suspend Ġfun Ġdelete Role ( role Name Val : ĠString , Ġpol Arn : ĠString ) Ġ{ čĊčĊĠĠĠ Ġval Ġiam Ġ= ĠI am Client Ġ{ Ġregion Ġ= Ġ" AWS _ GLOBAL " Ġ} čĊčĊĠĠĠ Ġ// ĠFirst Ġthe Ġpolicy Ġneeds Ġto Ġbe Ġdet ached . čĊĠĠĠ Ġval Ġrole Policy Request Ġ= ĠDet ach Role Policy Request Ġ{ čĊĠĠĠĠĠĠĠ Ġpolicy Arn Ġ= Ġpol Arn čĊĠĠĠĠĠĠĠ Ġrole Name Ġ= Ġrole Name Val čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġiam . detach Role Policy ( role Policy Request ) čĊčĊĠĠĠ Ġ// ĠDelete Ġthe Ġpolicy . čĊĠĠĠ Ġval Ġrequest Ġ= ĠDelete Policy Request Ġ{ čĊĠĠĠĠĠĠĠ Ġpolicy Arn Ġ= Ġpol Arn čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġiam . delete Policy ( request ) čĊĠĠĠ Ġprintln (" *** ĠSuccessfully Ġdeleted Ġ$ pol Arn ") čĊčĊĠĠĠ Ġ// ĠDelete Ġthe Ġrole . čĊĠĠĠ Ġval Ġrole Request Ġ= ĠDelete Role Request Ġ{ čĊĠĠĠĠĠĠĠ Ġrole Name Ġ= Ġrole Name Val čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġiam . delete Role ( role Request ) čĊĠĠĠ Ġprintln (" *** ĠSuccessfully Ġdeleted Ġ$ role Name Val ") č Ċ } čĊč Ċ suspend Ġfun Ġdelete User ( userName Val : ĠString ) Ġ{ čĊĠĠĠ Ġval Ġiam Ġ= ĠI am Client Ġ{ Ġregion Ġ= Ġ" AWS _ GLOBAL " Ġ} čĊĠĠĠ Ġval Ġrequest Ġ= ĠDelete UserRequest Ġ{ čĊĠĠĠĠĠĠĠ ĠuserName Ġ= ĠuserName Val čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġiam . delete User ( request ) čĊĠĠĠ Ġprintln (" *** ĠSuccessfully Ġdeleted Ġ$ userName Val ") č Ċ } čĊč Ċ @ Throws ( java . lang . Exception :: class ) č Ċ fun Ġread Json Simple Demo ( filename : ĠString ): ĠAny ? Ġ{ čĊĠĠĠ Ġval Ġreader Ġ= ĠFileReader ( filename ) čĊĠĠĠ Ġval Ġjson Parser Ġ= ĠJSON Parser () čĊĠĠĠ Ġreturn Ġjson Parser . parse ( reader ) č Ċ } č Ċ // Ġsnippet - end :[ iam . kotlin . scenario . main ] čĊ