AWS Management Consoleで限られた操作ができるユーザを作成する このエントリをはてなブックマークに登録

2013年07月22日

ishizimaishizima

皆さんこんにちは。
梅雨が明けて真夏日ばかりの日々ですね。暑いのが苦手なので、この季節は堪えます。

さて、先日外部の方にEC2のインスタンス管理を任せたいという事案が発生しました。頻繁に使うインスタンスではないため、使用時だけ立ち上げて終わったら落とす、という運用です。
インスタンスの起動は事前準備が要らないManagement Consoleを使うことになりました。ただ、普段のAWSアカウントを渡すわけにはいきません。このエントリーは操作範囲を極力限定したアカウントを作るための備忘録です。

条件

概ね以下の2つです。

  • Management Consoleにログインできる
  • 特定のインスタンスだけ操作できる

ちなみに、これだけだとEC2のインスタンス一覧は見えてしまうのですが、そこは止む無しと判断しました。

AWSのポリシー設定について

AWSの各リソースや操作に関する権限は、グループやユーザに対してJSONフォーマットで表現されるポリシー設定を適用(Attach)することで、許可・禁止を細かく設定することができます。ポリシー設定には随所でワイルドカード(*)が使えることもあり、非常に柔軟な表現が可能です。
ポリシー設定のJSONは手で書くか、AWS Policy Generatorで生成することで用意します。ただし、操作対象である機能やリソースに関するアドレス(ARN)は自動生成されないので、完全自動ではありません。

ユーザとグループの作成

今回は複数のユーザを渡さなければならないこと、それらのユーザ間に権限の差異はないことから、グループ側にポリシーを設定します。

グループの作成と適用

IAMのGroupsでCreate New Groupします。

グループポリシーの作成

これから、Management Consoleでインスタンスの一覧を見るための許可、及び操作権限を特定のインスタンスに限る、という2つのポリシーを作成について解説します。
以降の項で解説するポリシーを有効にするには、グループにポリシーをAttachしなければなりません。既にポリシーを作成済みならGroupの作成時にCustom Policyを選んで貼り付け、今回のようにグループ作成後にポリシーを作成する場合は、AIMのPermissionsからAttach Policyを選択します。
Attach Policy

インスタンス一覧の閲覧権限ポリシー

以下の内容でグループにAttachしてください。
[cc lang="text"]
{
"Statement": [
{
"Action": [
"ec2:Describe*"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
[/cc]
EC2の設定項目の取得をガッツリ許可しました。DescribeInstances と DescribeInstanceAttribute あたりだけで済む気もするんですが、、、誰か実験して教えてください。

特定インスタンスの操作権限

ちょっと雑ですけど、指定したインスタンスに対する全ての操作を以下のポリシーをAttachすることで許可できます。
[cc lang="text"]
{
"Statement": [
{
"Action": "ec2:*",
"Effect": "Allow",
"Resource": "arn:aws:ec2:ap-northeast-1:123456789012:instance/i-XXXXXXXX"
}
]
}
[/cc]
複数のインスタンスを対象とする場合はResourceを配列にするか、ワイルドカードを使用します。

ARNについて

AWSのポリシーでは、操作対象のオブジェクトを ARN ( Amazon Resource Name ) と呼ばれる記法で指定します。EC2のインスタンスは以下のように表現します。
[cc lang="text"]
arn:aws:ec2:ap-northeast-1:123456789012:instance/i-XXXXXXXX
[/cc]
これは、以下のような構造になっています。
[cc]
arn:aws:#{service_name}:#{region}:#{account_number}:instance/#{instance_id}
[/cc]

  • service_name: AWSのサービス名。ec2、s3などが入ります。
  • region: AWSのリージョン。Tokyoは ap-northeast-1 です。
  • account_number: アカウントナンバーをハイフン無しで。My Accountから確認できます。
  • instance_id: インスタンスID。Management Consoleのインスタンス一覧で確認できます。

ユーザの作成

IAMでユーザを作成します。今回API経由で云々は考えていないので、Security Credentialsは使いません。
作成後、GroupsタブからAdd User to Groupsを押下して先ほど作ったグループに追加します。また、ユーザ名を右クリックして Manage Password でパスワードを設定しておいてください。Management Consoleのログインに必要です。
IAM Manage Password

Management Console

IAMから払い出したユーザに対するManagement ConsoleはAWS契約アカウントと異なるURLからログインします。このURLはIAMのトップにある AWS Account Alias という項目内に表示されています。
AWS Account Alias

おわりに

以上で、IAMで作成したユーザがManagement Consoleにログインして、指定したEC2インスタンスのみ起動や停止ができるようになりました。
で、このエントリーを書いていて気付いたんですけど、こういう時こそ Management Console なんか使わないで Vagrant 使えって話ですよね。はい。次からそうします。

  1. メモからはじめる情報共有 DocBase 無料トライアルを開始
  2. DocBase 資料をダウンロード

「いいね!」で応援よろしくお願いします!

このエントリーに対するコメント

コメントはまだありません。


トラックバック

we use!!Ruby on RailsAmazon Web Services

このページの先頭へ