はじめに
業務でほどよくAWSは使用しますが、管理側(?)は経験がありません。
AWSの認定資格の勉強でも、結構アカウント管理周りは机上の理解でした。
そこで、今回はアカウント管理で重要なAssumeRoleについて、実際に触って整理していこうと思います。
前提理解
ここは前提として、サクッとまとめます。
IAMユーザーだけで管理する
誰になんの権限をもたせるか、、、複雑ですね。
ロールを使用する
さて、これをロールを使用して綺麗にしていきましょう。
前提のまとめ
ユーザーだけで権限管理しようとするととても複雑なので、ロールごとにまとめることでシンプルになりました。
これによって
- ユーザー
- 誰がいるか
- ロール
- どんな案件(ロール)があるか
- それぞれ何ができるか
が整理できました。
このユーザーとロールを紐付けるために、AssumeRoleを使用します。
では、ユーザーとロールを紐づけて、AssumeRoleの実際の動きを見ていきましょう。
AssumeRole
ケース
今回は同一のアカウントから行います。実際には別アカウントになったりしますね。
- ユーザーA
- ロール1へのAssumeRoleのみ可能
- ロール1
- ユーザーAからのAssumeRoleを許可
- Lambdaへのフルアクセスを許可
やってみること
以下の構成を実際にやってみます。
ユーザーA
ユーザーAには以下のポリシーを設定しています。
詳細は省きますが、とにかくAssumeRoleしか許可していない、という意味です。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AssumeRolePolicy",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::XXXXXXXXXXXX:role/role1"
}
]
}
前述の通り、AssumeRole以外の権限を持っていないので、ユーザーAでのログイン時には、Lambdaにアクセスできません。
ロール1
続いて、ロール1には以下を設定しています。
信頼ポリシー
ユーザーAからのAssumeRoleのみ許可しています。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/userA"
},
"Action": "sts:AssumeRole"
}
]
}
許可ポリシー
ここでは、Lambdaのフルアクセスを許可します。
この例では分かりやすさのために*FullAccessを使用していますが、実際の運用では必要最小限の権限を付与しましょう。
ここまで
ユーザーAとロール1の双方で、AssumeRoleを許可する関係ができました。
ユーザーとロールの両方で許可し合うことで、AssumeRoleの準備ができます。
- ユーザー側がロールへのAssumeRole権限を持っている
- ロール側がユーザーからのAssumeRoleを許可している
てことでやってみる
では実際にやってみましょう。
ふりかえり
ユーザーAの状態では、Lambdaにアクセスはできません。
Switch
コンソール右上のメニューから、ロールの切り替えを選択し。
作成したロールの情報を入力します。
そうすると、ロールが変わった状態になります。
確認
さきほどアクセスできなかったLambdaのダッシュボードにアクセスできました。
で、いつのまにかAssumeRoleからスイッチロールに変わっていましたが、実際には以下が行われています。
ユーザーがロールを使用する過程でAssumeRoleが行われます。
まとめ
今回はAssumeRoleについてまとめました。
ユーザーとロールの構築、AssumeRoleの実際の挙動を見てきましたが、開発者の立場でアサインされることが多く
- 現場ではアカウントを渡されて、なんとなく実施している
- AWS認定試験では、机上の理解になっている
となりがちだったので、実際に触って整理すると、とても理解が深まりました。
同じようなふんわり理解の方々などの参考になれば幸いです。
以上です。