@@ -23,7 +23,7 @@ func userLastAccessedDetails() *schema.Table {
2323 return & schema.Table {
2424 Name : "aws_iam_user_last_accessed_details" ,
2525 Description : `https://docs.aws.amazon.com/IAM/latest/APIReference/API_ServiceLastAccessed.html` ,
26- Resolver : fetchLastAccessedDetails ,
26+ Resolver : fetchUserLastAccessedDetails ,
2727 Transform : transformers .TransformWithStruct (& LastAccessed {}, transformers .WithUnwrapAllEmbeddedStructs (), transformers .WithPrimaryKeys ("Arn" , "ServiceNamespace" )),
2828 Multiplex : client .ServiceAccountRegionMultiplexer ("iam" ),
2929 Columns : []schema.Column {
@@ -36,7 +36,7 @@ func roleLastAccessedDetails() *schema.Table {
3636 return & schema.Table {
3737 Name : "aws_iam_role_last_accessed_details" ,
3838 Description : `https://docs.aws.amazon.com/IAM/latest/APIReference/API_ServiceLastAccessed.html` ,
39- Resolver : fetchLastAccessedDetails ,
39+ Resolver : fetchRoleLastAccessedDetails ,
4040 Transform : transformers .TransformWithStruct (& LastAccessed {}, transformers .WithUnwrapAllEmbeddedStructs (), transformers .WithPrimaryKeys ("Arn" , "ServiceNamespace" )),
4141 Multiplex : client .ServiceAccountRegionMultiplexer ("iam" ),
4242 Columns : []schema.Column {
@@ -49,7 +49,7 @@ func groupLastAccessedDetails() *schema.Table {
4949 return & schema.Table {
5050 Name : "aws_iam_group_last_accessed_details" ,
5151 Description : `https://docs.aws.amazon.com/IAM/latest/APIReference/API_ServiceLastAccessed.html` ,
52- Resolver : fetchLastAccessedDetails ,
52+ Resolver : fetchGroupLastAccessedDetails ,
5353 Transform : transformers .TransformWithStruct (& LastAccessed {}, transformers .WithUnwrapAllEmbeddedStructs (), transformers .WithPrimaryKeys ("Arn" , "ServiceNamespace" )),
5454 Multiplex : client .ServiceAccountRegionMultiplexer ("iam" ),
5555 Columns : []schema.Column {
@@ -62,7 +62,7 @@ func policyLastAccessedDetails() *schema.Table {
6262 return & schema.Table {
6363 Name : "aws_iam_policy_last_accessed_details" ,
6464 Description : `https://docs.aws.amazon.com/IAM/latest/APIReference/API_ServiceLastAccessed.html` ,
65- Resolver : fetchLastAccessedDetails ,
65+ Resolver : fetchPolicyLastAccessedDetails ,
6666 Transform : transformers .TransformWithStruct (& LastAccessed {}, transformers .WithUnwrapAllEmbeddedStructs (), transformers .WithPrimaryKeys ("Arn" , "ServiceNamespace" )),
6767 Multiplex : client .ServiceAccountRegionMultiplexer ("iam" ),
6868 Columns : []schema.Column {
@@ -71,11 +71,41 @@ func policyLastAccessedDetails() *schema.Table {
7171 }
7272}
7373
74- func fetchLastAccessedDetails (ctx context.Context , meta schema.ClientMeta , parent * schema.Resource , res chan <- any ) error {
74+ func fetchUserLastAccessedDetails (ctx context.Context , meta schema.ClientMeta , parent * schema.Resource , res chan <- any ) error {
75+ user := parent .Item .(* types.User )
76+ return fetchLastAccessedDetails (ctx , meta , user .Arn , res )
77+ }
78+
79+ func fetchRoleLastAccessedDetails (ctx context.Context , meta schema.ClientMeta , parent * schema.Resource , res chan <- any ) error {
80+ role := parent .Item .(* types.Role )
81+ return fetchLastAccessedDetails (ctx , meta , role .Arn , res )
82+ }
83+
84+ func fetchGroupLastAccessedDetails (ctx context.Context , meta schema.ClientMeta , parent * schema.Resource , res chan <- any ) error {
85+ group := parent .Item .(types.Group )
86+ return fetchLastAccessedDetails (ctx , meta , group .Arn , res )
87+ }
88+
89+ func fetchPolicyLastAccessedDetails (ctx context.Context , meta schema.ClientMeta , parent * schema.Resource , res chan <- any ) error {
90+ policy := parent .Item .(types.ManagedPolicyDetail )
91+ return fetchLastAccessedDetails (ctx , meta , policy .Arn , res )
92+ }
93+
94+ func fetchLastAccessedDetails (ctx context.Context , meta schema.ClientMeta , arn * string , res chan <- any ) error {
7595 svc := meta .(* client.Client ).Services ().Iam
76- job := parent .Item .(Job )
96+ generateConfig := iam.GenerateServiceLastAccessedDetailsInput {
97+ Arn : arn ,
98+ Granularity : types .AccessAdvisorUsageGranularityTypeActionLevel ,
99+ }
100+ output , err := svc .GenerateServiceLastAccessedDetails (ctx , & generateConfig )
101+ if err != nil {
102+ return err
103+ }
104+
105+ jobId := output .JobId
106+
77107 config := iam.GetServiceLastAccessedDetailsInput {
78- JobId : & job . JobId ,
108+ JobId : jobId ,
79109 MaxItems : aws .Int32 (1000 ),
80110 }
81111
@@ -94,8 +124,8 @@ func fetchLastAccessedDetails(ctx context.Context, meta schema.ClientMeta, paren
94124 case types .JobStatusTypeCompleted :
95125 for _ , detail := range details .ServicesLastAccessed {
96126 res <- LastAccessed {
97- Arn : job . Arn ,
98- JobId : job . JobId ,
127+ Arn : * arn ,
128+ JobId : * jobId ,
99129 ServiceLastAccessed : detail ,
100130 }
101131 }
0 commit comments