旅行好きから見たAWS IAMマルチアカウント運用ガイド
はじめに
こんにちは、LOH YI THUNGと申します!
旅行好きのエンジニアの皆さん、海外旅行で国境を越える時の体験と、AWS IAMのマルチアカウント運用って実はとても似ているって知っていましたか!?![]()
今回は、普段の海外旅行の経験を通じて、AWSのAssumeRoleとマルチアカウント運用について分かりやすく解説しようと思っております!
この記事では、AssumeRoleを「海外旅行
」に例えて、技術的な概念を身近な体験として理解できるように説明していきます。
旅行好きが理解するマルチアカウント運用の世界
国と国の関係 = AWSアカウント間の関係
海外旅行を考えてみてください。例えば、日本からアメリカに旅行する場合を想像してみましょう。
日本(アカウントA) ←→ アメリカ(アカウントB)
この2つの国は、それぞれ独立した主権を持つ国家です。しかし、外交関係により相互に信頼関係を築いており、特定の条件下で相手国の国民を受け入れています。
AWSのマルチアカウント運用でも同様に:
- アカウントAとアカウントBは、それぞれ独立したAWSアカウント
- IAMロールの信頼関係(Trust Policy)により、アカウント間の「外交関係」を構築
- この信頼関係があることで、一方のアカウントのユーザーが、もう一方のアカウントのリソースにアクセス可能になります
ビザ申請 = 信頼関係の構築
海外旅行では、多くの場合ビザ(査証)の取得が必要です。
(日本のパスポートは世界No.1で、ほぼ全世界に査証なし気軽く行けるが、、、、)
ビザ取得プロセス:
- 渡航先国への申請:アメリカ大使館・領事館にビザを申請
- 身元審査:申請者の身元、目的、期間などをチェック
- ビザ発給:審査に通過すればビザが発給される
AssumeRoleの信頼関係:
- Assume先での設定:アカウントBでIAMロールを作成
- 信頼ポリシーの設定:アカウントBのロールはアカウントAのどのユーザー/ロールを信頼するかを定義
- 信頼関係の確立:設定により、アカウントA → アカウントBへのアクセスが可能に
■アカウントAのIAMポリシーに記載する物:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::アカウントA:user/旅行者"
},
"Action": "sts:AssumeRole"
}
]
}
航空券の購入 = AssumeRole権限の付与:
旅行するには航空券を購入する必要があります。これは「移動する権利」を購入することです。
AWSの言葉に書き換えますと、
■アカウントBのIAMロールの信頼関係に記載する物:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::アカウントB:role/観光客ロール"
}
]
}
以上を持って、下記の物が準備できたかと思います!
・日本>>>>アメリカへの旅
・アカウントA>>>アカウントBへのAssume
旅行する準備は整えましたので、いよいよ出発へ~!
飛行機に乗って入国 = AssumeRoleの実行:
いよいよ旅行当日。飛行機に乗ってアメリカに向かいます。
aws sts assume-role \
--role-arn "arn:aws:iam::アカウントB:role/観光客ロール" \
--role-session-name "アメリカでの楽しいセッション"
この実行により、一時的な認証情報(AccessKey、SecretKey、SessionToken)を取得します。これは「入国スタンプ付きのパスポート」のようなものです。
現地の法律を遵守 = IAMポリシーに従った行動:
アメリカに入国した後は、アメリアの法律に従って行動する必要があります。
観光ビザで入国した場合、働くことはできませんし、滞在期間にも制限があります。
AWSでは:
AssumeRoleで引き受けたロールに付与されたIAMポリシーに従って行動する必要があります。
例えば「観光客ロール」には以下のような制限があるかもしれません:
・S3バケットの読み取りのみ可能
・EC2インスタンスの参照のみ可能
・RDSへの読み取り専用アクセス
AWSの言葉に書き換えますと、
■アカウントBのIAMロールのIAMポリシーに記載する物:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "S3ReadOnlyAccess",
"Effect": "Allow",
"Action": [
"s3:Get*",
"s3:List*",
"s3:Describe*"
],
"Resource": "*"
},
{
"Sid": "EC2ReadOnlyAccess",
"Effect": "Allow",
"Action": [
"ec2:Describe*"
],
"Resource": "*"
},
{
"Sid": "RDSReadOnlyAccess",
"Effect": "Allow",
"Action": [
"rds:Describe*",
"rds:ListTagsForResource"
],
"Resource": "*"
}
]
}
このように、AssumeRoleで引き受けたロール(アカウントB)に付与されたIAMポリシーに従って操作可能な範囲が制限されます!![]()
おまとめ
旅行上でのベストプラクティス:
・事前にパスポート(IAMユーザー/ロールの設定)を確認する
・ビザ(信頼関係)設定を正確に行う
・航空券(sts:AssumeRole権限)の発行を忘れない
・現地の法律(IAMポリシー)に従う
表にまとめると:
| 旅行の概念 | AWS IAMの概念 | 説明 |
|---|---|---|
| 国と国の外交関係 | アカウント間の信頼関係 | 相互の信頼により安全なアクセス |
| ビザ申請・取得 | Trust Policy の設定 | 誰がアクセス可能か事前に定義 |
| 航空券の購入 | sts:AssumeRole 権限 | ロールを引き受ける権利 |
| 入国・滞在 | AssumeRoleの実行 | 一時的認証情報によるアクセス |
| 現地法の遵守 | IAMポリシーの適用 | 許可された操作のみ可能 |
最後に
これでAWSマルチアカウント運用も、旅行気分で楽しみながら理解できますね!
Happy Traveling & Happy Assuming! ☁️✈️🌍