web-dev-qa-db-ja.com

IAMを使用してユーザーがAWS / EC2セキュリティグループを編集できるようにしますか?

IAMグループにEC2セキュリティグループを編集する権限を付与しようとしていますが、EC2のすべてへのアクセスを許可しないと、これを機能させることができません。

私はこれのいくつかのバージョンを試しました:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1392336685000",
      "Effect": "Allow",
      "Action": [
        "ec2:*"
      ],
      "Resource": [
        "arn:aws:ec2:us-east-1:<MYACCOUNTHERE>:security-group/*"
      ]
    }
  ]
}

しかし、IAMユーザーでログインすると、セキュリティグループページに「この操作を実行する権限がありません」というメッセージが表示されます。

「Amazon EC2フルアクセス」のIAMポリシーテンプレートを選択すると、ユーザーはEC2のすべてにアクセスできるため、ユーザー/グループが機能していることがわかります。

私は明らかにIAMの経験があまりないので、助けていただければ幸いです。

16
Chris

これを機能させるには、以下を明示的に許可する必要があります。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1392679134000",
      "Effect": "Allow",
      "Action": [
        "ec2:AuthorizeSecurityGroupEgress",
        "ec2:AuthorizeSecurityGroupIngress",
        "ec2:CreateSecurityGroup",
        "ec2:DeleteSecurityGroup",
        "ec2:DescribeInstanceAttribute",
        "ec2:DescribeInstanceStatus",
        "ec2:DescribeInstances",
        "ec2:DescribeNetworkAcls",
        "ec2:DescribeSecurityGroups",
        "ec2:RevokeSecurityGroupEgress",
        "ec2:RevokeSecurityGroupIngress"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

上記のJSONポリシーは基本的に、ユーザーが上記にのみアクセスできることを規定しています。彼らは他の何にもアクセスできません。これには、ec2インスタンス、S3、IAM、cloudfrontなどが含まれます。

13
Scott Moore

編集を単一のセキュリティグループに制限したい場合は、2つのステートメントが必要だと思います。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1413232782000",
            "Effect": "Allow",
            "Action": [               
                "ec2:DescribeInstanceAttribute",
                "ec2:DescribeInstanceStatus",
                "ec2:DescribeInstances",
                "ec2:DescribeNetworkAcls",
                "ec2:DescribeSecurityGroups"              
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "Stmt1413232782001",
            "Effect": "Allow",
            "Action": [
                "ec2:AuthorizeSecurityGroupEgress",
                "ec2:AuthorizeSecurityGroupIngress",                
                "ec2:RevokeSecurityGroupEgress",
                "ec2:RevokeSecurityGroupIngress"
            ],
            "Resource": [
                "arn:aws:ec2:us-east-1:<accountid>:security-group/sg-<id>"
            ]
        }
    ]
}

DescribeInstanceは必要ないかもしれませんが、私の場合はそれが欲しかったので、それなしでテストしていません

13
Guillaume Gros

セキュリティグループがインスタンスまたは他のEC2リソースによって使用されている可能性があります。あなたは試すことができます:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1392336685000",
      "Effect": "Allow",
      "Action": [
        "ec2:*"
      ],
      "Resource": [
        "arn:aws:ec2:us-east-1:<MYACCOUNTHERE>:instance/*",
        "arn:aws:ec2:us-east-1:<MYACCOUNTHERE>:security-group/*"
      ]
    }
  ]
}
1
Rico

question that @ nsij22 の回答を、受け入れられた回答のコメントで尋ねました。残念ながら、それは不可能のようです。 IAM Policy Simulator によると、特定のリソースでは @ DevMan14 の回答からの以下のアクションのみを使用できます。

  • DeleteSecurityGroup
  • AuthorizeSecurityGroupEgress
  • AuthorizeSecurityGroupIngress
  • RevokeSecurityGroupEgress
  • RevokeSecurityGroupIngress

その他については、IAM Policy Simulatorは次のように述べています。

このアクションは、リソースレベルの権限をサポートしていません。アクセスを許可するポリシーでは、リソース要素に「*」を指定する必要があります。

次のようになります。

screenshot

「許可」と「拒否」はすべて同じなので、折りたたみました。

1
selurvedu