超簡単!今すぐ使える「クロスアカウントアクセス」

2016.05.27

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

switchRole

こんにちは!ももんが大好きの小山です。

きょうは、「便利なんだろうなあ」と思いつつ試したことがなかったクロスアカウントアクセスを設定してみました。本当に簡単にできたので、まだ試したことがないという方はぜひやってみてください!

クロスアカウントアクセスとは

あなたは、今まで所有していたアカウントA (123423453456) に加えてアカウントB (654354324321) のリソースを管理することになりました。そこであなたはアカウントBに新しいIAMユーザーを作成しましたが、これによって管理すべきログイン情報が増えてしまいました。しばらくすると、こんな不安が生まれます。「今は構わないけど、もっとアカウントが増えたらどうなるんだろうか...」

そこでクロスアカウントアクセスの出番です! クロスアカウントアクセスを使うと、「アカウントAのプリンシパル」から「アカウントBのリソース」を操作できるようになります。

プリンシパルは、アクションを実行してリソースにアクセスできる AWS 内のエンティティです。AWS アカウント("root" ユーザー)、IAM ユーザー、またはロールをプリンシパルにすることができます。次の 2 つの方法のいずれかを使用して、リソースへのアクセス権限を付与できます。

ユーザー(直接、またはグループ経由で間接的に)またはロールに対し、アクセス権限ポリシーをアタッチすることができます。 リソースベースのポリシーをサポートするサービスについては、リソースにアタッチされているポリシーの Principal 要素でプリンシパルを指定できます。 AWS アカウントをプリンシパルにする場合、通常はアカウント内で定義されているすべてのプリンシパルが対象となります。

ロールに関する用語と概念 - AWS Identity and Access Management

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::654354324321:root"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

とにかくやってみましょう!

アカウントBの準備

まずはアカウントBIdentity and Access Management (IAM) コンソールを開きます。

Console-IAM

画面左のナビゲーションペインからRolesを開いて、Create New Roleを選択します。

Bildschirmfoto 2016-05-25 um 15.40.25

Set Role Nameページでは、任意の名称を入力してNext Stepを選択しましょう。

Set_Role_Name

Select Role Typeページでは、Provide access between... (Role for Cross-Account Access) を選択します。

Select_Role_Type

Establish Trustページでは、アカウントAのIDを入力してNext Stepを選択します。ここで Require MFA を選択すると、アカウントAでサインインに使用したIAMユーザーで多要素認証が有効でなかった場合のアクセスを拒否することができます。

Establish_Trust

Attach Policyページでは、与えたい権限が記述されたポリシーを選択します。今回は AWS 管理ポリシーのひとつを選択しましたが、あらかじめ用意したカスタム管理ポリシーを選択することもできます。

管理ポリシーとインラインポリシー - AWS Identity and Access Management

Bildschirmfoto 2016-05-25 um 16.17.04

Reviewページでは、内容を確かめてCreate Roleを選択しましょう。

Review

新しいIAMロールが作成できました! 赤く囲った部分のリンクを控えておきましょう。

Bildschirmfoto 2016-05-25 um 16.36.04

やってみる前に

クロスアカウントアクセスに用いるIAMユーザー (アカウントA) には、スイッチロールのための許可が必要です。以下のようなポリシーを割り当てて、sts:AssumeRoleアクションを許可しましょう。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": [
                "arn:aws:iam::654354324321:role/switchFrom-123423453456"
            ]
        }
    ]
}

アカウント/IAMロールにかかわらずスイッチを許可したい場合は、リソース名をワイルドカードで置き換えます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

やってみる

アカウントAIdentity and Access Management (IAM) コンソールを開いて、ナビゲーションバーの右端に表示されたIAMユーザーを選択します。表示されたメニューからSwitch Roleを選択しましょう。

Switch_Role

もう一度Switch Roleを選択します。

Switch_Role

Switch Roleページでは、アカウントBのIDとクロスアカウントアクセスのために作成したIAMロールの名称を指定してSwitch Roleボタンを選択します。

Switch_Role

パスワードを入力することなく、アカウントBのマネジメントコンソールを開くことができました! ナビゲーションバーの右端には、クロスアカウントアクセスに使用したIAMロールが表示されています。これを選択すると...

左側にはアカウントAでサインインに使用したIAMユーザー、右側にはクロスアカウントアクセスで用いたIAMロールが表示されます。アカウントAに戻りたいときは、青く囲ったBack to IAM_Userを選択しましょう!

おわりに

いかがでしたか? マネジメントコンソールを使うと、クロスアカウントアクセスを簡単に設定できることがわかりました。ここで用いられる Switch Role 機能は、マネジメントコンソールが AWS Security Token Service (STS) の AssumeRole API を呼び出すことにより実現しています。詳細について関心のある方は、ぜひ以下の記事をご覧になってください! いかに IAM が面白い機能であるかということを実感してもらえると思います。

IAMロール徹底理解 〜 AssumeRoleの正体 | Developers.IO

したっけまた!

IAM とは - AWS Identity and Access Management

IAM ユーザーにアクセス権限を委任するロールの作成 - AWS Identity and Access Management

ロールの切り替え(AWS マネジメントコンソール) - AWS Identity and Access Management