I am 最小権限でアクセスキーを発行したいマン
- IAM とは - AWS Identity and Access Management
- AWS のリソースにアクセスするためのユーザを発行する
- 細かい権限管理が可能
- マネジメントコンソールにパスワード認証でサインイン
- 細かいパスワードポリシーを定義可能
- 初回ログイン時にパスワード変更を強制できる
- ユーザ発行フローを検討
- 管理者がパスワードポリシーを設定
- 管理者がユーザを作成
- アクセスキーは作成しない
- 「自動作成パスワードの割り当て」
- 「次回のサインインで新しいパスワードを作成するようにユーザーに求める」
- 管理者が利用者にメールでユーザ名と自動作成パスワードを通知
- 利用者がマネジメントコンソールにサインイン
- 利用者がパスワードを変更
ここまでは、一般的なウェブサービスのユーザ発行フローとほぼ同じ。
利用者が AWS のリソースにアクセスするためには、アクセスキーを取得する必要がある。
- 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}" } ] }
- Firefox か Chrome で https://console.aws.amazon.com/iam/home にアクセス
- アドレスバーに "j" を入力
- 続けて下記のブックマークレットを入力して、アクセスキーが書かれたファイルをダウンロード
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 では全く使えなかったりして時の流れを感じた。