読取り専用だけど、自分のパスワードやアクセスキー,
MFA (二段階認証) の設定だけはユーザ自身で出来る。

そんな IAM ユーザの作り方のメモです。
請求情報も参照できるポリシーも書きました。

Management Console や API から自由に参照はしていいけど、
変更は許したくない、というユーザ用に。

IAM グループの作成

この記事では IAM グループを作成し、そのグループにポリシーを与えていきます。

IAM Management Console - グループ からリードオンリー用のグループを作成します。
ここでは “Readonly” という名前でグループを作成しました。
ポリシーは後で追加していくので、まずは空っぽで。

Image: Group

次に IAM Management Console - ユーザー からユーザを作成し、
Readonly グループに加えます。

Image: User

グループに与える権限 (ポリシー)

以降、次のポリシーに分けてグループに追加していきます。
不要なものは読み飛ばしてください。

  • 各サービスの情報の参照
  • 請求情報の参照
  • 自身のパスワードの変更 (認証情報ページからの変更)
  • 自身のパスワードの変更 (ユーザーページからの変更)
  • 自身のアクセスキーの変更
  • 自身の MFA デバイスの変更
  • 自身の SSH キーの変更

各サービスの情報の参照

管理ポリシー “ReadOnlyAccess” が用意されてるので、
それを Readonly グループに追加するだけで OK です。

Image: Readonly Policy

請求情報の参照

デフォルトでは IAM ユーザは請求情報にアクセスできなくなってるので、
まずはアクセス許可の設定をします。

ルートアカウントで Billing Management Console - アカウント を開き、
[IAM アクセスのアクティブ化] を ON にします。

Image: Billing Access

その後、 Readonly グループに次のインラインポリシーを追加すれば OK です。
僕は “PortalReadonlyAccess” という名前で追加しました。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "aws-portal:View*"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

Image: Portal Policy

もし参照できる情報を制限したい場合は、試してないけど
"aws-portal:View*" の部分にワイルドカードを使わなければ良いと思う。

ViewBilling

次の [Billing and Cost Management] コンソールページを表示する権限を
IAM ユーザーに与えるか拒否します。

  • 請求ダッシュボード
  • 請求書
  • コストエクスプローラー
  • 予算
  • 支払履歴
  • 一括請求
  • 設定
  • Credits
  • 前払い(前払いの詳細については、「一括請求について」を参照してください。)

ViewAccount

アカウント設定を表示するアクセス権限を IAM ユーザーに与えるか拒否します。

ViewBudget

予算を表示するアクセス権限を IAM ユーザーに与えるか拒否します。
IAM ユーザーに予算の表示を許可するには、ViewBilling も許可する必要があります。

ViewPaymentMethods

支払方法を表示するアクセス権限を IAM ユーザーに与えるか拒否します。

ViewUsage

AWS 使用状況レポートを表示するアクセス権限を IAM ユーザーに与えるか拒否します。
IAM ユーザーが使用状況レポートを表示できるようにするには、
ViewUsage と ViewBilling の両方を許可する必要があります。

自身のパスワードの変更 (認証情報ページからの変更)

Management Console 右上メニュー [認証情報] からの変更を許可します。

Image: Auth Menu

デフォルトでは全てのユーザが自身のパスワードは
変更できるようになっているので、特にやることはありません。
もし一部のユーザのみ自身のパスワードを変更可にする場合は、
まずは IAM Management Console - アカウント設定
[ユーザーにパスワードの変更を許可] をオフにします。

その後、 Readonly グループに次のインラインポリシーを追加すれば OK です。
僕は “MyPasswordAccess” という名前で追加しました。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iam:ChangePassword",
        "iam:GetAccountPasswordPolicy"
      ],
      "Resource": "*"
    }
  ]
}

Image: Password Policy

自身のパスワードの変更 (ユーザーページからの変更)

ユーザページ からの変更を許可します。

Readonly グループに次のインラインポリシーを追加すれば OK です。
僕は “MyLoginProfileAccess” という名前で追加しました。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iam:*LoginProfile"
      ],
      "Resource": [
        "arn:aws:iam::*:user/${aws:username}"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:ListAccount*",
        "iam:GetAccountSummary",
        "iam:GetAccountPasswordPolicy",
        "iam:ListUsers"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

Image: Login Policy

自身のアクセスキーの変更

Readonly グループに次のインラインポリシーを追加すれば OK です。
僕は “MyAccessKeyAccess” という名前で追加しました。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iam:*AccessKey"
      ],
      "Resource": [
        "arn:aws:iam::*:user/${aws:username}"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:ListAccount*",
        "iam:GetAccountSummary",
        "iam:ListUsers"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

Image: Key Policy

自身の MFA デバイスの変更

Readonly グループに次のインラインポリシーを追加すれば OK です。
僕は “MyMFADeviceAccess” という名前で追加しました。

{
  "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": [
        "*"
      ]
    }
  ]
}

Image: MFA Policy

自身の SSH キーの変更

Readonly グループに次のインラインポリシーを追加すれば OK です。
僕は “MySSHPublicKeyAccess” という名前で追加しました。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iam:*SSHPublicKey"
      ],
      "Resource": [
        "arn:aws:iam::*:user/${aws:username}"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:ListAccount*",
        "iam:GetAccountSummary",
        "iam:ListUsers",
        "iam:ListSSHPublicKeys"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

Image: SSH Policy

以上!

これで IAM ユーザをグループに加えたり外したりで管理できるようになりました!

参考