【小ネタ】複数のSwitch Roleでのクロスアカウントアクセス用URLを生成するスクリプトを書いた

2016.05.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

サーモン大好き、横山です。

今回は複数のSwitch Roleでのクロスアカウントアクセス用URLを生成するスクリプトの紹介をします。

はじめに

本記事は、「【小ネタ】複数のSwitch Roleでのクロスアカウントアクセスをブラウザのブックマークで管理する」を元にSwitch先のマネジメントコンソールからSwitchRoleするためのURLを生成します。

SwitchRoleを作成した都度、ブックマークを作ればさほど苦労はないのですが、一度にたくさんのSwitchRole用のURLを作成するのは骨が折れそうでした。そこで、少しでも楽をしようとSwitch先の環境でボタンを押したら、そこへSwitchRoleするURLに飛ぶJavaScriptを書きました。

手順

  1. ブックマーク用のJavaScriptを作成
  2. chromeのブックマーク作成
  3. 動作確認

1. ブックマーク用のJavaScriptを作成

今回はマネジメントコンソールの右上の画面の部分から情報を引っ張ってきます。

create_switch_role_url_00-1

ソースコードは以下です。

(function(){
    function run() {
      $=jQuery;
      accountId=$('#awsc-role-display-name-account').text().replace(/-/g,'');
      roleName=$('#awsc-role-display-name-user').text();
      color='';
      displayName='';
      displayNameSelector=$('#nav-usernameMenu:has(.awsc-switched-role-username-wrapper)');
      if (displayNameSelector) {
        color=$('.awsc-switched-role-username-wrapper', displayNameSelector).css('background-color')
                                                                            .toString()
                                                                            .match(/\d+/g)
                                                                            .map(function(n){
                                                                              return ("0"+(n|0).toString(16)).toUpperCase().substr(-2);
                                                                            })
                                                                            .join("");
        displayName=$('.nav-elt-label', displayNameSelector).text();
      }
      else {
        displayName=$('#nav-usernameMenu>.nav-elt-label:first').text();
      }
      displayName=$('#nav-usernameMenu>.awsc-switched-role-username-wrapper>.nav-elt-label:first').text();
      url='https://signin.aws.amazon.com/switchrole';
      url+='?account='+accountId;
      url+='&roleName='+roleName;
      url+='&displayName='+displayName;
      if (color.length > 0) {
        url+='&color='+color;
      }
      window.location.assign(url);
    }

    if(typeof jQuery !== 'function') {
      var d=document;
      var s=d.createElement('script');
      s.src='//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js';
      s.onload=run;
      d.body.appendChild(s);
    } else {
      run();
    }
  }
)();

こちらのソースコードをMinifyします。Minifyは複数Webサービスが有り、今回は jscompress を使用しました。

create_switch_role_url_00-2

Minifyされたコードが以下になります。

!function(){function e(){$=jQuery,accountId=$("#awsc-role-display-name-account").text().replace(/-/g,""),roleName=$("#awsc-role-display-name-user").text(),color="",displayName="",displayNameSelector=$("#nav-usernameMenu:has(.awsc-switched-role-username-wrapper)"),displayNameSelector?(color=$(".awsc-switched-role-username-wrapper",displayNameSelector).css("background-color").toString().match(/\d+/g).map(function(e){return("0"+(0|e).toString(16)).toUpperCase().substr(-2)}).join(""),displayName=$(".nav-elt-label",displayNameSelector).text()):displayName=$("#nav-usernameMenu>.nav-elt-label:first").text(),displayName=$("#nav-usernameMenu>.awsc-switched-role-username-wrapper>.nav-elt-label:first").text(),url="https://signin.aws.amazon.com/switchrole",url+="?account="+accountId,url+="&roleName="+roleName,url+="&displayName="+displayName,color.length>0&&(url+="&color="+color),window.location.assign(url)}if("function"!=typeof jQuery){var a=document,r=a.createElement("script");r.src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js",r.onload=e,a.body.appendChild(r)}else e()}();

さらに、Chromeのブックマークに貼っつけるために先頭に javascript: の文字を追加します。

javascript:!function(){function e(){$=jQuery,accountId=$("#awsc-role-display-name-account").text().replace(/-/g,""),roleName=$("#awsc-role-display-name-user").text(),color="",displayName="",displayNameSelector=$("#nav-usernameMenu:has(.awsc-switched-role-username-wrapper)"),displayNameSelector?(color=$(".awsc-switched-role-username-wrapper",displayNameSelector).css("background-color").toString().match(/\d+/g).map(function(e){return("0"+(0|e).toString(16)).toUpperCase().substr(-2)}).join(""),displayName=$(".nav-elt-label",displayNameSelector).text()):displayName=$("#nav-usernameMenu>.nav-elt-label:first").text(),displayName=$("#nav-usernameMenu>.awsc-switched-role-username-wrapper>.nav-elt-label:first").text(),url="https://signin.aws.amazon.com/switchrole",url+="?account="+accountId,url+="&roleName="+roleName,url+="&displayName="+displayName,color.length>0&&(url+="&color="+color),window.location.assign(url)}if("function"!=typeof jQuery){var a=document,r=a.createElement("script");r.src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js",r.onload=e,a.body.appendChild(r)}else e()}();

2. chromeのブックマーク作成

Chromeのブックマークマネージャを開きます。

create_switch_role_url_01

ブックマークバーの「管理」の画面上で右クリックをし、「ページを追加(G)」を選択します。

create_switch_role_url_02

名前は任意で結構ですここでは「make_role_url」って名前にします。URLは先程作成した javascript:!function()…をコピーして貼り付けます。

create_switch_role_url_03

3. 動作確認

ChromeでSwitchRoleしたマネジメントコンソールの画面を出します。
make_role_url のブックマークを押します。

create_switch_role_url_04

現在SwitchRoleしてる環境へのSwitchするためのページが開きます。

create_switch_role_url_06

まとめ

たくさんのSwitchRole用のブックマークを作成が面倒になった時の参考になれば幸いです。 注意点として、マネジメントコンソールの画面構成が変わると使えなくなる小ネタですので、画面構成が変わった際の動作不良を起こす可能性があります、ご了承ください。(2016/05/19現在)