皆さんこんにちは。
梅雨が明けて真夏日ばかりの日々ですね。暑いのが苦手なので、この季節は堪えます。
さて、先日外部の方に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してください。
[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のログインに必要です。
Management Console
IAMから払い出したユーザに対するManagement ConsoleはAWS契約アカウントと異なるURLからログインします。このURLはIAMのトップにある AWS Account Alias という項目内に表示されています。
おわりに
以上で、IAMで作成したユーザがManagement Consoleにログインして、指定したEC2インスタンスのみ起動や停止ができるようになりました。
で、このエントリーを書いていて気付いたんですけど、こういう時こそ Management Console なんか使わないで Vagrant 使えって話ですよね。はい。次からそうします。
このエントリーに対するコメント
- トラックバック
「いいね!」で応援よろしくお願いします!