@@ -42,7 +42,7 @@ export interface RawAwsIamRole extends Omit<Role, 'Tags'> {
4242 ManagedPolicies : AttachedPolicy [ ]
4343 region : string
4444 Tags ?: TagMap
45- PermissionsBoundaryArn : string
45+ PermissionsBoundaryArn ? : string
4646 InlinePolicies : Array < { name : string ; document : string } >
4747}
4848
@@ -130,6 +130,10 @@ const managedPoliciesByRoleName = async (
130130 )
131131 } )
132132
133+ export interface RoleInlinePolicyMap {
134+ [ key : string ] : Array < { name : string ; document : string } >
135+ }
136+
133137export const getAccountAuthorizationDetails = async (
134138 iam : IAM ,
135139 marker ?: string
@@ -160,11 +164,11 @@ export const getAccountAuthorizationDetails = async (
160164export const listIamRoles = async ( {
161165 iam,
162166 marker,
163- roleAuthorizationDetails ,
167+ roleInlinePolicyMap ,
164168} : {
165169 iam : IAM
166170 marker ?: string
167- roleAuthorizationDetails : RoleDetail [ ]
171+ roleInlinePolicyMap : RoleInlinePolicyMap
168172} ) : Promise < RawAwsIamRole [ ] > =>
169173 new Promise ( resolve => {
170174 const result : RawAwsIamRole [ ] = [ ]
@@ -224,14 +228,13 @@ export const listIamRoles = async ({
224228 . map ( p => p . ManagedPolicies )
225229 . reduce ( ( current , acc ) => [ ...acc , ...current ] , [ ] ) || [ ] ,
226230 Tags : tags . find ( t => t ?. RoleName === RoleName ) ?. Tags || { } ,
227- PermissionsBoundaryArn :
228- PermissionsBoundary . PermissionsBoundaryArn ,
229- InlinePolicies : roleAuthorizationDetails
230- . find ( rAD => rAD . RoleName === RoleName )
231- . RolePolicyList . map ( rPl => ( {
232- name : rPl . PolicyName ,
233- document : rPl . PolicyDocument ,
234- } ) ) ,
231+ ...( PermissionsBoundary ?. PermissionsBoundaryArn
232+ ? {
233+ PermissionsBoundaryArn :
234+ PermissionsBoundary ?. PermissionsBoundaryArn ,
235+ }
236+ : { } ) ,
237+ InlinePolicies : roleInlinePolicyMap [ RoleName ] ?? [ ] ,
235238 }
236239 }
237240 )
@@ -242,7 +245,7 @@ export const listIamRoles = async ({
242245 ...( await listIamRoles ( {
243246 iam,
244247 marker : Marker ,
245- roleAuthorizationDetails ,
248+ roleInlinePolicyMap ,
246249 } ) )
247250 )
248251 }
@@ -280,11 +283,21 @@ export default async ({
280283 logger . debug ( lt . lookingForIamRoles )
281284
282285 // Fetch role authorization details first
283- const roleAuthorizationDetails = await getAccountAuthorizationDetails (
284- client
285- )
286+ const roleAuthorizationDetails : RoleDetail [ ] =
287+ await getAccountAuthorizationDetails ( client )
288+ // Create inlinePolicies map
289+ const roleInlinePolicyMap : RoleInlinePolicyMap = { }
290+ roleAuthorizationDetails . map ( roleDetail => {
291+ roleInlinePolicyMap [ roleDetail . RoleName ] = roleDetail . RolePolicyList . map (
292+ ( { PolicyName, PolicyDocument } ) => ( {
293+ name : PolicyName ,
294+ // PolicyDocument is URI encoded
295+ document : decodeURIComponent ( PolicyDocument ) ,
296+ } )
297+ )
298+ } )
286299 // Fetch IAM Roles
287- rolesData = await listIamRoles ( { iam : client , roleAuthorizationDetails } )
300+ rolesData = await listIamRoles ( { iam : client , roleInlinePolicyMap } )
288301
289302 errorLog . reset ( )
290303 logger . debug ( lt . foundRoles ( rolesData . length ) )
0 commit comments