AWS環境では、異なるアカウント間でリソースにアクセスする必要が生じることがあります。このような場合、IAMロールのスイッチロールを利用することで、特定のリソースへのアクセス権限を安全に委譲できます。本記事では、アカウントAからアカウントBに対してS3バケットのアクセス権限を付与する方法を実際に試し、その手順と結果を共有します。
IAMをより深く理解したい方におすすめ
今回のIAMのスイッチロールだけではなく、IAMを全般的に理解したい方に向けて、AWS IAMの基礎から応用まで学べる電子書籍「AWSの薄い本 IAMのマニアックな話」をご紹介します。
本書は、IAMの仕組みを詳細に解説しており、日常業務でIAMを利用しているエンジニアや、これからIAMの深い知識を習得したい方に最適です。特に、信頼ポリシーやアクセス管理の実例が豊富に取り上げられているため、実務での即戦力となる知識が得られます。
はじめに
2つのアカウント(アカウントAとアカウントB)を利用し、
- アカウントAでIAMロールを作成し、アカウントBが利用できるよう設定します。
- アカウントBでスイッチロールを実行し、アカウントAのS3リソースにアクセスします。
- 設定したポリシーに基づいて、アクセス可能なリソースと制限されるリソースを確認します。
これにより、IAMロールを利用した安全な権限移譲の方法を紹介します。
アカウントAでロールとポリシーを作成する
IAMロールを作成する
1. アカウントAにサインインします
2. IAMに移動し、ロール>ロールを作成をクリックします
3. 信頼されたエンティティタイプを①「AWSアカウント」、AWSアカウントを「別のAWSアカウント」とし、アカウントIDには、アカウントBのものを設定します
4. 許可を追加では、そのまま何を追加せずに「次へ」をクリックします
5.ロール名「AccountBS3AccessRole」を入力し、信頼ポリシーが下記のようになっていることを確認します。XXXXXXXXXXXには、アカウントBが指定されています。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::XXXXXX:root"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
6. ロールを作成をクリックします
ポリシーの作成
1.作成したロールを選択し、「許可を追加」>「インラインポリシーの追加」をクリックします
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:List*"
],
"Resource": [
"*"
]
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"s3:Get*",
"s3:Describe*"
],
"Resource": [
"arn:aws:s3:::XXXXXXXX",
"arn:aws:s3:::XXXXXXXX/*"
]
}
]
}
アカウントBからスイッチロールで操作する
スイッチロールを設定する
1. アカウントBにサインインします
2. 画面右上のIAMユーザをクリックし、「ロールの切り替え」をクリックします
3. ロールの切り替えで下記を入力し、「ロールの切り替え」をクリックします
- アカウントID:アカウントAのID
- IAMロール名:アカウントAで作成したIAMロール名「AccountBS3AccessRole」
- 表示名:任意
- 表示色:任意
権限がないS3オブジェクトにアクセスする
- S3に移動します。List権限がついているので一覧が見えます。
2. 権限がないバケットにアクセスします
3. 任意のファイルを選び、「ダウンロード」をクリックします
4. AccessDeniedになりました。想定通りです。
権限を持っているS3オブジェクトにアクセスする
1. 対象のバケットを選択します
2. オブジェクトを選択し、「ダウンロード」をクリックします
3. ダウンロードできました!
% ls -l index.html
-rw-r--r--@ 1 XXXX XXXX 574 12 9 22:39 index.html
%
FAQ:スイッチロールでよくある質問
Q1: スイッチロールとは何ですか? A1: スイッチロールは、AWSアカウント間や異なるサービス間で権限を移譲するための仕組みです。特定のIAMロールに切り替えることで、別アカウントのリソースにアクセスできます。
Q2: スイッチロールの際に表示されるエラー”AccessDenied”の原因は何ですか? A2: 主な原因として以下が考えられます:
- IAMポリシーで必要な権限が付与されていない。
- 信頼ポリシーにアクセス元アカウントが設定されていない。
- アクセス対象リソースに適切なリソースポリシーが設定されていない。
Q3: 信頼ポリシーとは何ですか? A3: 信頼ポリシーは、どのエンティティがIAMロールを引き受けることができるかを定義するポリシーです。今回の例では、アカウントBがアカウントAのIAMロールを引き受けられるよう設定しました。
Q4: アカウントBでスイッチロールを実行する際、IAMユーザでなければならないのでしょうか? A4: はい、スイッチロールはIAMユーザまたはフェデレーティッドユーザが実行できます。ルートアカウントではスイッチロールを利用できません。
書籍のご紹介とリソース
IAMをより深く理解したい方におすすめ
今回のIAMのスイッチロールだけではなく、IAMを全般的に理解したい方に向けて、AWS IAMの基礎から応用まで学べる電子書籍「AWSの薄い本 IAMのマニアックな話」をご紹介します。
本書は、IAMの仕組みを詳細に解説しており、日常業務でIAMを利用しているエンジニアや、これからIAMの深い知識を習得したい方に最適です。特に、信頼ポリシーやアクセス管理の実例が豊富に取り上げられているため、実務での即戦力となる知識が得られます。
リソース
まとめ
IAMロールを利用したスイッチロールは、異なるアカウント間での安全な権限移譲を実現するための非常に有効な手段です。本記事で取り上げた手順と検証結果をもとに、他のAWSリソースに対する応用も可能です。
今後は、さらなる応用例として、異なるサービス間での連携やより複雑なポリシーの設定についても検討してみたいと思います。
コメント