Skip to content

Instantly share code, notes, and snippets.

@Code-Hex
Last active June 26, 2025 23:39
Show Gist options
  • Select an option

  • Save Code-Hex/b653ac81786e7117a63b2f13f1f11035 to your computer and use it in GitHub Desktop.

Select an option

Save Code-Hex/b653ac81786e7117a63b2f13f1f11035 to your computer and use it in GitHub Desktop.
Get GCP IAM Roles
const cheerio = require('cheerio');
const fetch = require('node-fetch');
const fs = require('fs');
// roles["roles/accesscontextmanager.policyAdmin"]["en"]
const roles = {};
async function makePredefinedRoles(locale) {
const response = await fetch(
`https://cloud.google.com/iam/docs/understanding-roles?hl=${locale}`
);
const html = await response.text();
const $ = await cheerio.load(html);
if (locale === 'en') {
$('div', '#predefined-roles').each((_, div) => {
$(div)
.find('tr')
.each((_, tr) => {
const role = $(tr).find('td')[0];
const roleName = $(role).find('.role-name').text().trim();
if (roleName === '') return;
const permission = $(tr).find('td')[1];
const permissions = [];
$(permission)
.find('li')
.each((_, v) => permissions.push($(v).text()));
roles[roleName] = { permissions };
});
});
}
$('div', '#predefined-roles').each((_, div) => {
$(div)
.find('tr')
.each((_, tr) => {
const role = $(tr).find('td')[0];
const roleName = $(role).find('.role-name').text().trim();
if (roleName === '') return;
roles[roleName][locale] = {
roleTitle: $(role).find('.role-title').text().trim(),
roleName: roleName,
roleDescription: $(role).find('.role-description').text().trim(),
};
});
});
}
async function main() {
await makePredefinedRoles('en');
await makePredefinedRoles('ja');
const jsonRoles = JSON.stringify(roles);
fs.writeFile('roles.json', jsonRoles, (err) => console.error('error: ', err));
}
(async function () {
await main();
})();
$ node scripts/gcp-roles.js
This file has been truncated, but you can view the full file.
@alpoz11
Copy link

alpoz11 commented Jun 26, 2025

Don't worry my black cat

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment