0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

クロスアカウントAssumeRole + Interface型VPCエンドポイント経由でS3にアクセスする

0
Posted at

概要

アカウント1のEC2から、VPCピアリング越しにアカウント2のVPCエンドポイントを経由して、クロスアカウントAssumeRole → S3アクセスする検証を行った。

構成

abc.png

フローは下記の通り。

  1. アカウント1のEC2がVPCピアリング経由でアカウント2のSTS VPCエンドポイントに到達する
  2. STS VPCエンドポイント経由で sts:AssumeRole を実行する(対象:アカウント2のIAMロール)
  3. STSがアカウント2のIAMロールの信頼ポリシーを検証し、アカウント1のロールが許可されていることを確認する
  4. 検証成功後、アカウント2のIAMロールの権限で一時クレデンシャルが発行される
  5. 取得した一時クレデンシャルを使ってS3 VPCエンドポイント経由でアカウント2のS3バケットにアクセスする

ポイントとして、S3にアクセスしているのはアカウント1のEC2ですが、使っている権限はアカウント2のIAMロールのものです。

環境構築

IAMロール(アカウント1)

EC2にアタッチするロールを作成する。

  • ARN:arn:aws:iam::<アカウント1ID>:role/ec2-test-role
  • 許可ポリシー:AdministratorAccess
  • 信頼ポリシー:下記の通り
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

VPCピアリング・ルートテーブル

アカウント 宛先 ターゲット
アカウント1 172.18.0.0/16 pcx-xxxxxx
アカウント2 192.168.1.0/24 pcx-xxxxxx

IAMロール(アカウント2)

クロスアカウントAssumeRole用のロールを作成する。信頼ポリシーでアカウント1のロールからのAssumeRoleを許可する。

  • ARN:arn:aws:iam::<アカウント2ID>:role/test2-role
  • 許可ポリシー:AmazonS3FullAccess
  • 信頼ポリシー:下記の通り
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<アカウント1ID>:role/ec2-test-role"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

セキュリティグループ(アカウント2:エンドポイント用)

方向 タイプ プロトコル ポート ソース
インバウンド HTTPS TCP 443 192.168.1.0/24
アウトバウンド すべてのトラフィック All All 0.0.0.0/0

VPCエンドポイント(アカウント2)

Interface型で作成する。Gateway型だとVPCピアリング越しのアクセスが到達しない。

Name エンドポイントID タイプ サービス名
s3-test vpce-xxxxxxxxxxxxxxxxx Interface com.amazonaws.ap-northeast-1.s3
sts-test vpce-xxxxxxxxxxxxxxxxx Interface com.amazonaws.ap-northeast-1.sts

S3バケット(アカウント2)

S3バケットを作成し、テストファイルをアップロードする。

s3://test20260701test/test20260701.txt

検証

アカウント1のEC2(Windows)にRDPでログインし、コマンドプロンプトで実行する。

現在のロール確認

aws sts get-caller-identity
{
    "Account": "<アカウント1ID>",
    "Arn": "arn:aws:sts::<アカウント1ID>:assumed-role/ec2-test-role/i-xxxxxxxxxxxxxxxxx"
}

AssumeRole実行

aws sts assume-role --role-arn arn:aws:iam::<アカウント2ID>:role/test2-role --role-session-name test-session --endpoint-url https://sts.ap-northeast-1.amazonaws.com
{
    "Credentials": {
        "AccessKeyId": "ASIAXXXXXXXXXXXXXXXX",
        "SecretAccessKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "SessionToken": "xxxxxxxx......xxxxxxxx",
        "Expiration": "2026-07-01T09:00:00+00:00"
    },
    "AssumedRoleUser": {
        "AssumedRoleId": "AROAXXXXXXXXXXXXXXXXX:test-session",
        "Arn": "arn:aws:sts::<アカウント2ID>:assumed-role/test2-role/test-session"
    }
}

一時クレデンシャルを環境変数にセット

set AWS_ACCESS_KEY_ID=ASIAXXXXXXXXXXXXXXXX
set AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
set AWS_SESSION_TOKEN=xxxxxxxx......xxxxxxxx

ロール切り替えの確認

aws sts get-caller-identity
{
    "Account": "<アカウント2ID>",
    "Arn": "arn:aws:sts::<アカウント2ID>:assumed-role/test2-role/test-session"
}

アカウント2のロールに切り替わった。

S3アクセス

aws s3 ls s3://test20260701test/
2026-07-01 07:10:00         14 test20260701.txt

aws s3 cp s3://test20260701test/test20260701.txt C:\Users\Administrator\Desktop\test.txt
download: s3://test20260701test/test20260701.txt to C:\Users\Administrator\Desktop\test.txt

アカウント2のS3からファイルを取得できた。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?