Skip to content

Commit 0e0fdb3

Browse files
authored
Merge pull request #97 from cloudgraphdev/fix/CG-1262-fix-2
fix(iamRole): iamPermissionsBoundary and inlinePolicies bug fixes
2 parents 1c18d21 + 9923ba3 commit 0e0fdb3

File tree

1 file changed

+29
-16
lines changed

1 file changed

+29
-16
lines changed

src/services/iamRole/data.ts

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
133137
export const getAccountAuthorizationDetails = async (
134138
iam: IAM,
135139
marker?: string
@@ -160,11 +164,11 @@ export const getAccountAuthorizationDetails = async (
160164
export 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

Comments
 (0)