12054
AWSのIAMを利用して、他のユーザが特定のリソースのみにアクセスできるようにしたいです。

様々なサイトを参考にしながらPolicyのJSONファイルを記述しているのですが、そのなかで以下の様な例みつかりました。

```

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "Stmt1373379896000",
          "Action": [
            "ec2:describe*"
          ],
          "Resource": [
            "*"
          ],
          "Effect": "Allow"
        },
        {
          "Sid": "Stmt1373381303000",
          "Action": [
            "ec2:RebootInstances",
            "ec2:StartInstances",
            "ec2:StopInstances",
            "ec2:TerminateInstances"
          ],
          "Resource": [
            "arn:aws:ec2:ap-northeast-1:0123456789:instance/i-e0123456"
          ],
          "Effect": "Allow"
        }
      ]
    }
    
```

このPolicyを設定されたグループに所属するユーザは以下のことが可能になると思います。

  * 全てのEC2インスタンスを閲覧できる
  * 特定のインスタンス（i-e0123456）に対しReboot、Start、Stop,Terminateができる

しかし、今回は特定のインスタンスに対してすべての権限を与え、それ以外のインスタンスを閲覧できないようにしたいです。

`Statement`配列の1つ目のステートメントでは、`ec2:describe*`アクションが有効になっており、対象のリソースが`Resource:["*"]`となっていますので、全てのEC2インスタンスに対しての閲覧権限を与えるという意味になるかと思います。

この設定のせいで、見せたくないインスタンスが閲覧できるようになってしまっていると思われるので、`Resouce:["*"]`を特定のインスタンスを指定するようにする必要があります。

しかし、そのようなリソースを指定しているステートメントは`Statement`配列の2つ目のステートメントに設定されていますので、こちらの`Action`に`ec2:describe*`を追加すれば良いということになります。

加えて、2番めのステートメントでは、`Action`がRebootやStartなど特定のアクションのみの操作に限定されています。今回は特定のインスタンスに全てのアクション権限を与えたいと思っていますのでこちらの`Action`も`ec2:*`に変更します。

すると以下のようなPolicyJSONが出来上がります。

```

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "Stmt1373381303000",
          "Action": ["ec2:*"],
          "Resource": ["arn:aws:ec2:ap-northeast-1:0123456789:instance/i-e0123456"],
          "Effect": "Allow"
        }
      ]
    }
    
```

しかし、上記のPolicyを設定されたアカウントでログインしてみても、インスタンスが一つも表示されず、目的の権限を与えることができていません。

試しに初めに記述したPolicyJSONを設定してみたところ、全てのインスタンスが表示されることが確認できました。

arnの記述方法としましては以下のようになっており

```

    arn:aws:service:region:account:resource
    
```

今回、質問用に書き換えさせて頂いておりますが

```

    arn:aws:ec2:ap-northeast-1:0123456789:instance/i-e0123456"
    
```

上記arnは

```

    arn:aws:ec2:[リージョンのID]:[AWSアカウントのID]:instance/[インスタンスID]"
    
```

と認識しており、リージョンは東京リージョンを利用していて、AWSアカウントIDもインスタンスIDにも間違いがありません。

インスタンスの詳細を見てみたところ、リージョンが`ap-
northeast-1a`となっていたので、`a`を付け加えてみたのですが、Policyの検証時に`invalid region for vendor
ec2.`というようなエラーが表示されてしまいました。

どこに間違いがあるのでしょうか？
CC BY-SA 3.0
2015-07-05T10:10:35.707
12048
2015-07-05T14:49:50.110
2015-07-05T10:23:27.677
5840
5840
question
aws
AWSでIAMのPolicyの設定で特定のインスタンス以外のインスタンスを閲覧できないようにしたい
API によっては arn によるリソース区別をサポートしていないものがあります。  
現時点では、EC2 の DescribeInstances もこれに該当します。

<http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-supported-iam-
actions-resources.html>  
<http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ec2-api-
permissions.html#ec2-api-unsupported-resource-permissions>

リソース区別をサポートしていない API の場合、IAM Policy のリソースには "*" と設定しなければならないようです。
CC BY-SA 3.0
2015-07-05T14:49:50.110
12054
2015-07-05T14:49:50.110
4603
12048
answer