sixtyfour
sixtyfour copied to clipboard
Speed up six_bucket_permissions
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
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