コンテンツにスキップするには Enter キーを押してください

[Ruby] AWS Management Console へのログインURLをSDKで生成する

こんにちわ。Fusic 内田です。

マネージメントコンソールへのログイン、ぶっちゃけ面倒ですよね。
今回は、SDKを使ってAWSマネージメントコンソールへのログインURLをさくっと生成するTipsを紹介します。

やること・つかうもの

やること

  • AWSマネージメントコンソールへのログインURLの生成

つかうもの

  • ruby : 2.5
  • AWS SDK : 3.0.1
  • 対象AWSアカウントのIAMアクセス情報

やってみる

手順としては、以下です。

  1. IAMアカウントのstsクレデンシャルを取得
  2. AWSのフェデレーションポイントへリクエストを投げ、トークンを取得する
  3. トークンを使ってログイン用URLを整形する

コードはこんな感じ

require "aws-sdk"
require "open-uri"

cred   = Aws::Credentials.new(access_key_id, secret_access_key)
sts = Aws::STS::Client.new(region: 'us-east-1', credentials: cred)

# ログインURLにて操作できる権限を設定
policy = {
  Version:   '2012-10-17',
  Statement: {
    Effect:   'Allow',
    Action:   '*',
    Resource: '*'
  }
}

session = sts.get_federation_token({
                                     duration_seconds: 3600,
                                     name: 'fusic',
                                     policy: policy.to_json
                                   })

# ログインセッションが切れたときのリンクURL
issuer_url = "https://fusic.co.jp"
# ログイン後のリダイレクトページ、今回はトップ画面
console_url = "https://ap-northeast-1.console.aws.amazon.com/console/home?region=ap-northeast-1"
# AWSフェデレーションエンドポイント
signin_url = "https://signin.aws.amazon.com/federation"

# 認証情報からセッション文字列を生成
session_json = {
  sessionId:    session.credentials.access_key_id,
  sessionKey:   session.credentials.secret_access_key,
  sessionToken: session.credentials.session_token
}.to_json

# セッション文字列をURLエンコード
get_signin_token_url = signin_url + "?Action=getSigninToken" + "&SessionType=json&Session=" + CGI.escape(session_json)

# AWSフェデレーションエンドポイントにリクエストを送信してサインイントークンを取得
returned_content   = URI.parse(get_signin_token_url).read
signin_token       = JSON.parse(returned_content)['SigninToken']
signin_token_param = "&SigninToken=" + CGI.escape(signin_token)

# 5. ログイン用URLを作成
issuer_param      = "&Issuer=" + CGI.escape(issuer_url)
destination_param = "&Destination=" + CGI.escape(console_url)
login_url = signin_url + "?Action=login" + signin_token_param + issuer_param + destination_param

puts login_url

生成されたURLをブラウザでたたいてみるとマネージメントコンソールに行けるはずです。

おわりに

AWS SDKを利用してログインURLを生成するTipsでした。
AWSをより快適に使うための誰かの助けになれば。

今回はIAMアカウント自身のURLを生成したので、結局IAMアカウントがログインしたいアカウント分必要のように思えますが、AssumeRole を利用してセッション情報を取得すればその必要もありません。
その内容についてはまた別の記事で書けたらと思います。

福岡でWebエンジニアやってます。PHP, クラウド, インフラあたりが好き。AWS 五冠

コメントする

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です