はじめに
たまたま、AWS: 特定の日付内で MFA を使用する特定のアクセスを許可するを見つけ、とても良さそうだったので、少しアレンジしつつ挙動の確認をしてみました。
簡単にどんなことをしたかというと、
- 特定のユーザーに期間限定でAWSコンソールへアクセスできるようにする。
- 他のアカウントからのスイッチロールを利用する。
- スイッチ元でMFAを利用していない場合はアクセスできないようにする。
この3点について確認しました。
設定
特に変わった作業はないです。ポリシーの作成をしてからロールの作成を行います。
ポリシーの作成
まずはIAMのポリシーから「ポリシーの作成」を行います。
上の画像のように「JSON」タブを選択したら以下のポリシーをコピペして「Review policy」をクリックします。
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": [
"*"
],
"Resource": "*",
"Condition": {
"DateGreaterThan": {"aws:CurrentTime": "2018-10-01T00:00:00Z"},
"DateLessThan": {"aws:CurrentTime": "2018-12-31T23:59:59Z"}
}
}
}
Condition のところに注目です。DateGreaterThan と _DateLessThan_で利用できる期間の設定が行えます。
ここでは "2018/10/01 〜 2018/12/31" の期間でこのポリシーが利用できる設定を行っています。
次にポリシーの名前と説明を設定画面になるので適当に入力します。
ここでは 「LimitedTime」 というポリシー名を設定しました。
ロールの作成
ポリシーを作成したらアタッチするロールの作成です。
「ロールの作成」をクリックしたら今回は「別のAWSアカウント」を選択し、_アカウントID_のところにスイッチ元のアカウントIDを入力し「次のステップ:アクセス権限」へ進みます。
ここでは先ほど作成したポリシー(ここではLimitedTime)を選択して「次のステップ:確認」へ進みます。
確認画面ではロール名と説明の入力画面になるため適当に入力します。
今度は「LimitedTimeUser」というロール名にしました。
これで設定は完了です。
それでは許可スイッチロールしてみます。
無事スイッチロールできました。
期間外でスイッチロールした場合
それでは設定した期間外でスイッチロールしたらどうなるのでしょうか?
今回はポリシーの DateLessThan を過去にして確認してみました。
S3へアクセスした場合
EC2へアクセスした場合
とりあえずS3とEC2の2つに対してアクセスしてたところ、ロールは用意されているのでスイッチロールはできますが、アクセス権限がないためエラーとなりました。
MFAの利用設定
このロールに対してMFA利用設定を追加するとどうなるのでしょうか?
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": [
"*"
],
"Resource": "*",
"Condition": {
"Bool": {"aws:MultiFactorAuthPresent": true},
"DateGreaterThan": {"aws:CurrentTime": "2018-10-01T00:00:00Z"},
"DateLessThan": {"aws:CurrentTime": "2018-12-31T23:59:59Z"}
}
}
}
Condition のところに 「"Bool": {"aws:MultiFactorAuthPresent": true}」 を追加しています。
それではこの状態で改めてスイッチロールし直してみます。
すると先ほどの期間外の状況と同じく、スイッチロールはできてもアクセス権限がないのでエラーとなってしまいます。
なぜならスイッチ元のユーザーでMFAを利用したログインを行っていなかったからです。
それではスイッチ元のAWSコンソールに対してMFAを利用したログインを行った上で再度スイッチロールしてみます。
すると無事スイッチできました。
おわりに
期間設定は一時的なアカウント払い出しが必要になった場合などでとても便利です。
また、今回スイッチロールを絡めたのは、パートナー企業などに対して利用しているところは少なくないと思ったからです。
その際に気になるのが、もし許可したAWSアカウント側でMFAが設定されていなかったらという点です。
そういったセキュリティ維持にもポリシーで制限させておくと良いと思います。