概要
GASからGCPのAPIを実行にあたり、アクセストークンが必要なる場合があります。
今回はアクセストークンの取得からGCPに登録しているユーザー一覧を取得するところまでをハンズオンしていきたいと思います。
アカウント登録
まずはGCPのアカウント作成およびプロジェクトを作成しましょう!
アカウント作成については以下記事が参考になるかと思います。
プロジェクト作成までできたら、次はサービスアカウントの作成に移っていきましょう!
サービスアカウントの作成
GCPのアクセストークン取得に必要なサービスアカウントを作成していきましょう!
GCPの画面にて、メニューから「IAMと管理」→サービスアカウントを選択してください。
![](https://kazblog.jp/wp-content/uploads/2023/06/6a8e257e6a714b1e756eb74544755501-1024x596.png)
画面上側にある「サービスアカウントの作成」を押しましょう
![](https://kazblog.jp/wp-content/uploads/2023/06/c2fd30017bb0567bd273312e7ace9163-1024x291.png)
まずは任意のサービスアカウント名を入力します。今回はユーザー名をaccountにしました。
サービスアカウントIDとサービスアカウントの説明の箇所も任意でOKです!入力が終わったら「作成して続行」ボタンを押しましょう!
![](http://kazblog.jp/wp-content/uploads/2023/06/1da2839bee48fb2a4ab428084996586a-958x1024.png)
次にサービスアカウントのロールを基本→オーナーに設定します!設定後、画面下の「完了」ボタンを押しましょう!
![](http://kazblog.jp/wp-content/uploads/2023/06/4e6bb00d0b3e3e58ebc87ba5ce5cb70f-964x1024.png)
これで新たにサービスアカウントが作成できました!メール列に表示されているサービスアカウントのメールアドレスは以降で使うのでメモしておきましょう!
そのままメールアドレスのリンク先に遷移しましょう!
![](https://kazblog.jp/wp-content/uploads/2023/06/2f4a146dc6790bac269503900b8c09cd-1024x264.png)
アカウントの詳細画面に飛んだら「キー」タブに遷移し、「鍵を追加」→「新しい鍵を作成」を押しましょう!
![](https://kazblog.jp/wp-content/uploads/2023/06/59e6b141f680d860361c2f0fe58dd5e1-1024x400.png)
秘密鍵の作成ではJSON形式で出力します!
![](https://kazblog.jp/wp-content/uploads/2023/06/f88e68bc1899c143660eaffcce710841-1024x659.png)
出力されたJSONファイルを開き、private_keyの値を確認しておきましょう!(後ほど使います)
![](https://kazblog.jp/wp-content/uploads/2023/06/fd5f0595aaad6e5aa81784b9d60f9a08-1024x653.png)
あとは今回使うAPIとして、Cloud Resource Manager APIを有効にしておきましょう!
検索窓に「Cloud Resource Manager API」を入力し、選択します。
![](https://kazblog.jp/wp-content/uploads/2023/06/9cdade44547c17f27d5cd4fe3db74df4-1024x256.png)
以下画面に遷移したらCloud Resource Manager APIを有効にします。
![](https://kazblog.jp/wp-content/uploads/2023/06/7b68006383075bd53d33948303f2d883-1024x526.png)
これで事前準備は完了しました。実際にコーディングに移っていきます!
コーディング
以下、GASに対してアクセストークンを取得するコードになります。(アクアセストークンの期限は30分で設定)
function getAccessToken() {
const options = {
"method": "POST",
"payload": {
"grant_type": 'urn:ietf:params:oauth:grant-type:jwt-bearer',
"assertion": getAssertion()
},
'muteHttpExceptions': true,
};
const response = JSON.parse(UrlFetchApp.fetch('https://oauth2.googleapis.com/token', options));
return response.access_token;
}
function getAssertion() {
const privateKey = "-----BEGIN PRIVATE KEY-----\n<PRIVATE KEY>-----END PRIVATE KEY-----\n"
const header = {
alg: 'RS256',
typ: 'JWT'
};
const now = new Date();
const claimSet = {
iss: "<Service Accountメールアドレス>",
scope: "https://www.googleapis.com/auth/cloud-platform.read-only",
aud: "https://accounts.google.com/o/oauth2/token",
exp: (now.getTime() / 1000) + 3000,
iat: now.getTime() / 1000
};
let toSign = Utilities.base64EncodeWebSafe(JSON.stringify(header)) + '.' + Utilities.base64EncodeWebSafe(JSON.stringify(claimSet));
toSign = toSign.replace(/=+$/, '');
const signatureBytes = Utilities.computeRsaSha256Signature(toSign, privateKey);
let signature = Utilities.base64EncodeWebSafe(signatureBytes);
signature = signature.replace(/=+$/, '');
return toSign + '.' + signature;
};
次は上記アクセストークンから、GCPのポリシーを取得する以下APIを実行してみます。
また、上記コードのgetAssertion関数内にて設定している"scope"の値は下記リンクのAuthorization Scopesから値を取ってきてます。
feedbackMethod: projects.get - GCP API
function getGcpPolicies() {
const options = {
"method": "POST",
"contentType": "application/json",
"headers": {
"Authorization": "Bearer " + getAccessToken(),
},
'muteHttpExceptions': true,
};
const response = JSON.parse(UrlFetchApp.fetch('https://cloudresourcemanager.googleapis.com/v1/projects/<プロジェクトID>:getIamPolicy', options).getContentText());
const policies = response.bindings;
console.log(policies)
}
上記実行すると、以下のようにロールと対象のロールに紐づくユーザーが確認できるかと思います!(↓削除したServiceAccountも表示されてます)
![](https://kazblog.jp/wp-content/uploads/2023/06/795316b92fc766b0181f6fef074f03fa-15-1024x235.png)
まとめ
今回、GASでGCP APIを使用する上で必要になるアクセストークンのについて解説しました!
GASからGoogle Cloud上の操作を行いたい場合に本記事が役に立つことを願います!