Skip to Content

AWS 別アカウントにロールを使ったアクセス手順

概要

別アカウントから別アカウントのRoute53へIAMロールを使ってアクセスする手順
アクセスキーでアクセスすれば簡単だけどよりセキュアにロールで実現してみよう

構成図

Route53でホストゾーンを管理しているアカウントAに、別のアカウントのBからロールを使ってアクセスしたいイメージ

現実はイメージほど単純ではなく、このような構成でアクセスすることになった
Role-Aは自分のアカウントAのRoute53にアクセスできる権限を持っている
それをアカウントBから一時的に使わせてもらう形をとる

手順

この手順では別アカウントからRoute53への読み取り専用でアクセスするロールを例にする

参考にしたのはこちら
別アカウントのS3バケットを利用する手順 | Developers.IO

アカウントA(Route53を使わせる方)でロール作成

  1. IAMロールを作成

  2. 別のAWSアカウントを選択

  3. アカウントIDにアカウントB(Route53を使いたい方)のIDを入力

  4. AmazonRoute53ReadOnlyAccessポリシーを選択
    ※ ここではRoute53へ読み取り専用としているがポリシーを変更すれば同様のロールでのアクセスに応用できる

  5. タグを任意で設定

  6. ロール名を任意で設定

  7. 信頼性されたエンティティ アカウントにアカウントB(Route53を使いたい方)のIDが入力されているか確認

  8. 作成されたロールを確認

  9. ロールARNのarn:aws...をコピーする
    以降の作業で2回ペーストする場面が訪れる
    ※ 途中で他のものをコピーする可能性があるので、このページを開いたままにしておくと後々楽

  10. アカウントAでの設定作業は完了

アカウントB(Route53を使いたい方)でポリシーとロール作成

シークレットウィンドでアカウントBのコンソールを開くのがオススメ
後々アカウントAのロールARNをコピーしたくなる

アカウントAで作成したロールを利用するというポリシーを作成する

  1. IAMからポリシーをJSONで作成
  2. "Resource': ""の部分はアカウントAのロールARNをペースト

    コピペ用(6行目だけ要変更)
1
2
3
4
5
6
7
8
{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "arn:aws:..."
  }
}
  1. 任意のポリシー名を入力
  2. ポリシー作成完了

ポリシーを新規作成のロールにアタッチ

  1. IAMロールを新規作成

  2. AWSサービスを選択

  3. EC2を選択

  4. 直近で作成したポリシーを選択

  5. 任意のロール名を設定

  6. ロール作成完了

アカウントB(Route53を使いたい方)のEC2インスタンスにロールをアタッチ

  1. EC2から対象のインスタンスを選択して、IAMロールの割り当て

  2. 先ほど作成したロール名を選択

アカウントB(Route53を使いたい方)のEC2インスタンスからアカウントAのRoute53へアクセス

~/.aws/credentialsにロールの情報を記入してアカウントAにアクセスする

  1. ロールをアタッチしたインスタンスへSSH接続
  2. ロールを使った認証情報を新規作成
1
vi ~/.aws/credentials
  1. 追記内容
    1行目: プロファイル名は任意で付ける
    2行目: role_arn = の後ろにアカウントAで作成したロールARNをペースト
    3行目: まったく同じでOK
1
2
3
[route53-profile]
role_arn = arn:aws:iam::[アカウントA]:role/Route53ReadOnlyRole
credential_source = Ec2InstanceMetadata

credential_source = Ec2InstanceMetadataの意味は
「Amazon EC2 インスタンスプロファイルにアタッチされた IAM ロールを使用します。」
AWS CLI での IAM ロールの使用 - AWS Command Line Interface

  1. アカウントAのRoute53のホストゾーンが参照できるからプロファイルを指定して実行
    --profile [1行目で任意の名付けたプロファイル名]を付けるのがポイント
  2. ホストゾーンの情報が返ってきたのでロールを使ってアカウントAにアクセスできたことが確認できた
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
aws route53 list-hosted-zones --profile route53-profile
{
    "HostedZones": [
        {
            "ResourceRecordSetCount": 6,
            "CallerReference": "0EE90597-FF10-A810-A781-69B873D57291",
            "Config": {
                "Comment": "",
                "PrivateZone": false
            },
            "Id": "/hostedzone/xxxxxxxxxxxxxxx",
            "Name": "xxxxxx.com."
        }
    ]
}

感想

他アカウントへのロールでのアクセスを一度やってみたかった
使う機会がありそうなので手順メモ
検証して文章書いて、図も書いたら2時間40分かかった
STSの良い勉強にもなった、アウトプットは大切

参考

【そんなときどうする?】別のアカウントにセキュアにアクセスしたい! いまさらきけないSTSとは? – サーバーワークスエンジニアブログ