はじめに
- 本記事の目的と背景
同一のAWSアカウント内で複数の開発メンバーと検証を行う必要が生じました。その際、自身が管理するAWSアカウント内に、他メンバーに管理者権限を付与したIAMユーザを発行することになりました(本来的には必要なポリシーのみをアタッチすることが推奨されますが…)。初めてのIAMユーザ発行だったため、GPTやAWSドキュメントを参考にポリシー内容を調査し、備忘録としてまとめることを目的としています。
前提・注意点
管理者権限の付与は誤操作や不正利用、情報漏洩といった重大なリスクを伴います。
検証対象のリソース・アクションを規定し、最小権限の原則を守ることがベストプラクティスです。
設定手順
今回の設定は以下の手順で実施します。
- カスタムポリシーの作成
MFAデバイスの管理許可&MFAを用いたサインインを実施していない場合、
アクションを拒否する設定 - ユーザグループの作成
1のカスタムポリシーと「AdministratorAccess」をグループにアタッチ - ユーザグループにユーザを割当
カスタムポリシーの作成
ポリシー作成>ポリシーエディタにて以下のアクセス許可ステートメントを設定します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowIndividualUserToManageTheirOwnMFA",
"Effect": "Allow",
"Action": [
"iam:CreateVirtualMFADevice",
"iam:DeleteVirtualMFADevice",
"iam:DeactivateMFADevice",
"iam:EnableMFADevice",
"iam:ResyncMFADevice",
"iam:ListMFADevices"
],
"Resource": [
"arn:aws:iam::*:mfa/${aws:username}",
"arn:aws:iam::*:user/${aws:username}"
]
},
{
"Sid": "BlockMostAccessUnlessSignedInWithMFA",
"Effect": "Deny",
"NotAction": [
"iam:CreateVirtualMFADevice",
"iam:DeleteVirtualMFADevice",
"iam:DeactivateMFADevice",
"iam:EnableMFADevice",
"iam:ResyncMFADevice",
"iam:ListMFADevices"
],
"Resource": "*",
"Condition": {
"BoolIfExists": {
"aws:MultiFactorAuthPresent": "false"
}
}
}
]
-
1つめのブロック
このステートメントはユーザーが自身のMFA(多要素認証)デバイスを管理できるようにするためのものです。各設定内容の意味は以下の通りです。- iam:CreateVirtualMFADevice:仮想MFAデバイスの作成
- iam:DeleteVirtualMFADevice:仮想MFAデバイスの削除
- iam:DeactivateMFADevice:MFAデバイスの無効化
- iam:EnableMFADevice:MFAデバイスの有効化
- iam:ResyncMFADevice:MFAデバイスの再同期
- iam:ListMFADevices:MFAデバイスの一覧取得
Resourceで指定されているARN(Amazonリソースネーム)は、リクエストを実行するユーザー自身に紐付くMFAデバイスとユーザー情報(${aws:username})に限定されており、他のユーザへの影響を防止します。
- 2つめのブロック
このステートメントは、ユーザーがMFA(多要素認証)によるサインインを使用していない場合、MFAの設定や管理に関連するアクション(上記の設定内容と同様)以外は拒否することを示しています。
ここでは上記のステートメントを設定したポリシーを「mustSetMFA」という名称で保存します。
ユーザグループの作成
ユーザグループを作成し(ここでは「admin」という名称で作成しています)許可に、
前提で作成したカスタムポリシーとデフォルトで存在する「AdministratorAccess」をアタッチします。
ユーザグループにユーザを割当
ユーザにグループを割り当て、上記のグループを割り当てます。
※当該のユーザにはコンソールアクセス提供オプションを設定する
検証
各リソースへのアクセス・実行許可がないことを確認する
上記手順でグループに割り当てたIAMユーザにて、サインインして検証してみます。
以下にて各サービスの表示・実行権限がないことを確認できます。
MFAを設定し各リソースへのアクセス・実行許可が存在することを確認する
IAM>セキュリティ認証情報よりMFAデバイスの割り当てが選択できることを確認し、MFAデバイスを設定します。
設定後、一度サインアウトしてから再度サインインし各サービスの表示・実行権限が存在することを確認できます。
まとめ
本記事では、管理者権限のリスクを踏まえた上で、MFAを利用したセキュリティ強化策を適用したIAMユーザ作成手順を簡単にまとめました。前提・注意点に記載通り検証対象のリソース・アクションを規定することが原則のため、本記事を参照の際はご注意ください。