この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、望月です。
管理ポリシーのReadOnlyAccessを使っていますか?
参照のみさせるユーザーに利用されることが多い管理ポリシーですが、参照権限がゆえに足りない権限というのもあります。
今回はMFA設定を変更できるインラインポリシーを作成し、そのポリシーとReadOnlyAccessを作成したグループに割り当て、ユーザー自身が参照権限ながらMFA設定を有効化できるグループをCloudFormationで作成していきたいと思います。
やってみた
下記、テンプレートをファイルに保存します。例:ReadOnlyMFA_cfn.yml
AWSTemplateFormatVersion: '2010-09-09'
Description: This CloudFormation template to create IAM
Resources:
# Create IAM Group
ReadOnlyMFAGroup:
Type: AWS::IAM::Group
Properties:
GroupName: "ReadOnlyMFAGroup"
ManagedPolicyArns:
- 'arn:aws:iam::aws:policy/ReadOnlyAccess'
Path: "/"
# Create IAM Policy
ReadOnlyMFAPolicy:
Type: AWS::IAM::Policy
Properties:
PolicyName: "UserMFAPolicy"
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: "Allow"
Action:
- "iam:*MFADevice"
Resource:
- "arn:aws:iam::*:user/${aws:username}"
- "arn:aws:iam::*:mfa/${aws:username}"
- Effect: "Allow"
Action:
- "iam:ListAccount*"
- "iam:GetAccountSummary"
- "iam:ListUsers"
- "iam:ListMFADevices"
- "iam:ListVirtualMFADevices"
Resource: "*"
Groups:
- !Ref "ReadOnlyMFAGroup"
Outputs:
ReadOnlyMFAGroup:
Value: !Ref ReadOnlyMFAGroup
ReadOnlyMFAPolicy:
Value: !Ref ReadOnlyMFAPolicy
保存した "ReadOnlyMFA_cfn.yml" からスタックを作成します。
$ aws cloudformation create-stack --stack-name ReadOnlyMFA --region ap-northeast-1 --template-body file://ReadOnlyMFA_cfn.yml --capabilities CAPABILITY_NAMED_IAM
{
"StackId": "arn:aws:cloudformation:ap-northeast-1:xxxxxxxxxxxxxx:stack/ReadOnlyMFA/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx"
}
以下コマンドを実行し、問題なくスタックが作成されたことを確認します。
$ aws cloudformation describe-stacks --stack-name ReadOnlyMFA | jq '.Stacks[].StackStatus'
"CREATE_COMPLETE"
IAMコンソールのグループを確認し、ReadOnlyMFAGroupが作成されていることを確認します。
あとは参照権限を持たせたいIAMユーザーのグループにReadOnlyMFAGroupを割り当てることで、MFA設定を有効化できるようになります。
まとめ
参照権限しか持たないユーザーとはいえ、MFAを有効化するに越したことはありません。
インラインポリシーを作ったりと、ひと手間発生してしまいますが、ぜひ参照権限ユーザーでもMFAを有効化しましょう。