I am 最小権限でアクセスキーを発行したいマン

  • IAM とは - AWS Identity and Access Management
    • AWS のリソースにアクセスするためのユーザを発行する
    • 細かい権限管理が可能
    • マネジメントコンソールにパスワード認証でサインイン
      • 細かいパスワードポリシーを定義可能
      • 初回ログイン時にパスワード変更を強制できる
  • ユーザ発行フローを検討
    1. 管理者がパスワードポリシーを設定
    2. 管理者がユーザを作成
      • アクセスキーは作成しない
      • 「自動作成パスワードの割り当て」
      • 「次回のサインインで新しいパスワードを作成するようにユーザーに求める」
    3. 管理者が利用者にメールでユーザ名と自動作成パスワードを通知
    4. 利用者がマネジメントコンソールにサインイン
    5. 利用者がパスワードを変更

ここまでは、一般的なウェブサービスのユーザ発行フローとほぼ同じ。
利用者が AWS のリソースにアクセスするためには、アクセスキーを取得する必要がある。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iam:*LoginProfile",
        "iam:*AccessKey*",
        "iam:*SSHPublicKey*"
      ],
      "Resource": "arn:aws:iam::account-id-without-hyphens:user/${aws:username}"
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:ListAccount*",
        "iam:GetAccountSummary",
        "iam:GetAccountPasswordPolicy",
        "iam:ListUsers"
      ],
      "Resource": "*"
    }
  ]
}
      • ユーザの一覧画面を経由するマネジメントコンソールの設計上、本来は不要な権限を許可しなければならない問題がある(Statement の 2 要素目)

最小権限の原則 - Wikipedia に従って、下記のポリシーのみでアクセスキーを発行する方法を考える。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iam:*AccessKey*"
      ],
      "Resource": "arn:aws:iam::account-id-without-hyphens:user/${aws:username}"
    }
  ]
}
  • ユーザの一覧画面にアクセスせずに、アクセスキー発行リクエストを送信すればいい
  1. FirefoxChromehttps://console.aws.amazon.com/iam/home にアクセス
  2. アドレスバーに "j" を入力
  3. 続けて下記のブックマークレットを入力して、アクセスキーが書かれたファイルをダウンロード
avascript:$.ajax({url:'/iam/service/proxy/CreateAccessKey',type:'POST',contentType:'application/json',data:JSON.stringify({userName:UserInfo.name})}).done(function(data){a=document.createElement('a');document.body.appendChild(a);a.download=UserInfo.name+'.accesskey.txt';a.target='_blank';a.href=window.URL.createObjectURL(new Blob([data],{type:'text/plain'}));a.click()}).fail(function(data){alert(JSON.stringify(data))})

2016 年も終盤というのに、未だにブックマークレットなんて書いている(あとはてな記法)。javascript スキームが対策されていたり、Microsoft Edge では全く使えなかったりして時の流れを感じた。