参照権限ユーザーでもMFAを有効化したい!

2019.07.12

この記事は公開されてから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を有効化しましょう。