【AWS】IAM Roleを使用してインスタンスに操作権限を設定する

スポンサーリンク

AWS CLIでAPIを使用するためにはアクセスキーの認証情報が必要になりますが、複数人で使う場合などはキー情報をみんなに伝えるのも面倒ですしセキュリティ上あまりよろしくないかと思います。また、全員に同じ権限が必要な訳でもないです。こういった場合はIAM Roleをインスタンスに割り当てればポリシーに準じた操作権限を与える事ができます。

IAM Roleを作成する

まずはインスタンスに割り当てるIAM Roleを作成します。マネジメントコンソールからIAM管理画面に移動します。

f:id:tasukujp:20141220183956p:plain

左のメニューにあるRolesを選択し、「Create New Role」ボタンをクリックします。

f:id:tasukujp:20141220185840p:plain

IAM Roleの名前を入力します。

f:id:tasukujp:20141220185947p:plain

IAM Roleの種類を選択します。今回はEC2インスタンスに割り当てるロールを作成するので、Amazon EC2 を選択します。

f:id:tasukujp:20141220190118p:plain

IAM Roleに適用するポリシーを選択します。今回はEC2のRead Only Accessを選択します。

f:id:tasukujp:20141220190533p:plain

選択したポリシーの内容が表示されます。これで問題なければ次へ。

f:id:tasukujp:20141220191058p:plain

最後に内容に誤りがなければ「Create Role」ボタンをクリックして終了です。

f:id:tasukujp:20141220191206p:plain

作成されました。

f:id:tasukujp:20141220191319p:plain

インスタンスにIAM Roleを割り当てる

IAM Roleはインスタンス作成時にしか割り当てられませんので新規作成から行ないます。インスタンスの作成については以下参照。

【AWS】EC2インスタンスの作成とSSH接続について - TASK NOTES

IAM Roleは「Step 3: Configure Instance Details」で指定します。

f:id:tasukujp:20141220192428p:plain

IAM Roleを指定した状態でインスタンスを作成すると、適用したポリシーでAPIにアクセスできるようになります。

インスタンスからAWS CLIを使う

それでは作成したインスタンスにSSHログインしてAWS CLIを使ってみます。

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2014.09-release-notes/
18 package(s) needed for security, out of 42 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-172-31-9-12 ~]$ 

aws configure でアクセスキーなど認証情報の設定は何もしていませんが、インスタンス情報の取得することができました。

$ aws ec2 describe-instances --region ap-northeast-1 --output text --query Reservations[].Instances[].InstanceId
i-58a214bb  i-a56631dc

今回適用しているポリシーはEC2の読み取り専用ですので、インスタンスを作成しようとするとエラーになります。

$ aws ec2 run-instances --image-id ami-4985b048 --instance-type t2.micro --region ap-northeast-1 --output json
A client error (UnauthorizedOperation) occurred when calling the RunInstances operation: You are not authorized to perform this operation. Encoded authorization failure message:

また、IAM Roleを何も指定してないインスタンスの場合は次のように認証情報の設定を求められます。

$ aws ec2 describe-instances
Unable to locate credentials. You can configure credentials by running "aws configure".

IAM Roleのポリシーを変更する

IAM Roleはインスタンスの作成時にしか割り当てられませんが、ポリシーを変更することは出来ます。

f:id:tasukujp:20141220200102p:plain

Manage Policyからポリシーを書き換えるか、

f:id:tasukujp:20141220200115p:plain

f:id:tasukujp:20141220195549p:plain

Attach Role Policyからポリシーを追加します。

f:id:tasukujp:20141220201239p:plain

f:id:tasukujp:20141220201246p:plain

f:id:tasukujp:20141220201252p:plain

f:id:tasukujp:20141220201329p:plain

これで先程できなかったインスタンスの作成ができるようになりました。

$ aws ec2 run-instances --image-id ami-4985b048 --instance-type t2.micro --region ap-northeast-1 --output json
{
    "OwnerId": "510419843452", 
    "ReservationId": "r-725c174f", 
    "Groups": [], 
    "Instances": [
        {
            "Monitoring": {
                "State": "disabled"
            }, 
...
}