sixtyfour icon indicating copy to clipboard operation
sixtyfour copied to clipboard

Speed up six_bucket_permissions

Open sckott opened this issue 1 year ago • 1 comments

Via #61

Maybe this should inspire six_buckets()? Here is my quick prototype:

aws_buckets()$bucket_name %>% 
  map(~ six_bucket_permissions(.x) %>% 
               mutate(bucket = .x)) %>% 
  bind_rows() %>% 
  filter(user == aws_user()$user$UserName[1]) %>% 
  right_join(aws_buckets(), by = c("bucket" = "bucket_name")) %>% 
  select(-user) %>% 
  rename(bucket_name = bucket) %>% 
  select(bucket_name, permissions, everything(), -policy_admin, policy_admin)

For some reason this is taking a long time to run.

Originally posted by @seankross in #61

sckott avatar Feb 26 '25 21:02 sckott

hacked a bit on locally, try this on a branch

permissions_user_bucket <- function(bucket) {
  aws_user_mem <- memoise::memoise(aws_user)
  tmp <- aws_users()$UserName %>%
    map(
      \(user) structure(user, pols = aws_user_mem(user)$attached_policies)
    ) %>%
    keep(\(user) NROW(attr(user, "pols")) > 0) %>%
    map(\(user) {
      attr(user, "pols") %>%
        rowwise() %>%
        mutate(
          user = user,
          resource_arn = list(
            latest_policy_doc(PolicyArn %||% NULL)$Statement$Resource
          )
        ) %>%
        ungroup()
    }) %>%
    list_rbind()
  if (rlang::is_empty(tmp)) {
    return(empty_tibble())
  }
  tmp %>%
    filter(map_lgl(resource_arn, \(w) any(grepl(bucket, unlist(w)))))
}

permissions_user_bucket within six_bucket_permissions was slow - we were calling aws_user 2x for each user to get attached policies, this call is just once and stores as an attribute

check other functions that might be slow too

sckott avatar Feb 26 '25 21:02 sckott