スイッチロール用の IAM ロールを簡単に作りたい!!

CloudFormation テンプレートを使ってスイッチロール用の IAM ロール作成を効率化する
2023.02.24

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

マネジメントコンソールを手動で操作し、スイッチロール用の IAM ロールを作成する手順はこちらに紹介されています。

スイッチ用のIAMロール作成手順

これを、 CloudFormation を用いて半自動化するのがこの記事の目的です。とはいえ、用意したテンプレートを使っていただくだけなので CloudFormation について学習する必要はありません。この記事のみでいくらかの効率化が可能です。

下準備

次のものを準備してください。

  1. 作成する IAM ロールを使用される方の情報
    • 名字
    • お名前
    • 所属組織名
  2. スイッチロール元の IAM ユーザーがある AWS アカウントの ID
  3. IAM ロールを作成したい AWS アカウント上での IAM ロール作成権限

CloudFormation を呼び出すための URL を作る

CloudFormation テンプレート

CloudFormation ではテンプレートを用いて定形作業を効率化できます

今回使用するテンプレートはこちらです。

https://utility-for-aws-operation.s3-ap-northeast-1.amazonaws.com/create-iam-role.json

{
  "AWSTemplateFormatVersion" : "2010-09-09",
  "Description" : "Template for Creating IAM Role to Switch",
  "Parameters" : {
    "TrustedAWSAccountId" : {
      "AllowedPattern" : "^[0-9]*$",
      "Type" : "String",
      "Default" : "",
      "Description" : "Trusted AWS Account ID"
    },
    "IAMUserName": {
      "AllowedPattern" : "^[a-z._-]*$",
      "Type": "String",
      "Default": "xxx.xxx",
      "Description": "IAM Role Name"
    }
  },
  "Resources" : {
    "IAMRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Principal": {
                "AWS": { "Fn::Join" : [ "", [ "arn:aws:iam::", { "Ref" : "TrustedAWSAccountId" }, ":user/", { "Ref" : "IAMUserName" } ] ] }
              },
              "Action": [
                "sts:AssumeRole"
              ],
              "Condition": {
                "Bool": {
                  "aws:MultiFactorAuthPresent": "true"
                }
              }
            }
          ]
        },
        "ManagedPolicyArns": [
          "arn:aws:iam::aws:policy/PowerUserAccess"
        ],
        "Path": "/",
        "RoleName": { "Ref" : "IAMUserName" }
      }
    }
  },
  "Outputs" : {
    "IAMRoleArn": {
      "Value": { "Fn::GetAtt" : [ "IAMRole", "Arn" ] }
    },
    "LinkForSwitchRole": {
      "Value": { "Fn::Join": [ "", [ "https://signin.aws.amazon.com/switchrole?roleName=", { "Ref" : "IAMUserName" }, "&account=", { "Ref" : "AWS::AccountId" } ] ] }
    }
  }
}

ご覧の通り、作成される IAM ロールは PowerUserAccess 権限を持ちます。 権限を変更したい場合は上記テンプレートを変更後、ご自身が作成された S3 バケットにアップロードしてお使いください。

これを使用するために、次の URL を用います。

https://ap-northeast-1.console.aws.amazon.com/cloudformation/home?region=ap-northeast-1#/stacks/create/review?templateURL=https://utility-for-aws-operation.s3-ap-northeast-1.amazonaws.com/create-iam-role.json&stackName=<organization name>-<family name>-<given name>-iamRole&param_IAMUserName=<organization name>-<family name>.<given name>&param_TrustedAWSAccountId=<aws account id>

URL の書き換え

?の URL は 4 つ、書き換えるところがあります。

プレースホルダー名 説明
<organization name> 所属組織名 classmethod
<family name> 名字 takagi
<given name> お名前 kensuke
<aws account id> スイッチロール元の AWS アカウント ID 123456789012

準備した情報にあわせて書き換えてください。

作成した URL をブラウザーで開く

書き換えた URL をブラウザーで開きましょう。次のような画面が出てきます。

CloudFormation スタックを作成する

入力値に間違いがなければ次の承認にチェックをいれます。

右下のボタンを押してスタックを作成しましょう。

作成された IAM ロールを確認する

次のような表示になったら作成が完了しています。

意図通りの IAM ロールが作成できたかどうか、 AWS IAM の画面で確認してください。

以上で完了です。 多分これが一番楽だと思います。