Назад | Перейти на главную страницу

Ограничить пользователя IAM только определенным VPC

У меня в аккаунте два VPC. Один для DEV и один для производства. Я хочу создать пользователя IAM, который должен видеть только экземпляры DEV EC2 в консоли и должен иметь возможность создавать или перезагружать экземпляры. Он не должен видеть производственные экземпляры EC2. Я попробовал с помощью политики ниже и получил ошибку как "An error occurred fetching address data: You are not authorized to perform this operation." Моя политика IAM ...

 {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Action": [
                    "ec2:Describe*",
                    "ec2:RebootInstances",
                    "ec2:RunInstances",
                    "ec2:CreateTags"
                ],
                "Effect": "Allow",
                "Resource": "*",
                "Condition": {
                    "StringEquals": {
                        "ec2:Region:VPC": "us-west-2:vpc/vpc-00000000"
                    }
                }
            }
        ]
    }

Я мог бы кое-что сделать здесь с помощью приведенной ниже политики. Но не смог применить теги. Дело в том, что пользователь не может переименовывать какие-либо другие теги в другие теги в PRODUCTION VPC, когда я вставляю приведенное ниже правило, тогда пользователь может также изменять теги других экземпляров VPC ...

 {
    "Effect": "Allow",
    "Action": "ec2:CreateTags",
    "Resource": [
    "*"
    ]
    }

Вот мое текущее правило, которое может читать другие экземпляры VPC, но только для чтения. Меня это устраивает. Но я не могу создавать экземпляры с тегами ...

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "NonResourceBasedReadOnlyPermissions",
            "Action": [
                "ec2:Describe*",
                "ec2:CreateKeyPair",
                "ec2:CreateSecurityGroup",
                "iam:GetInstanceProfiles",
                "iam:ListInstanceProfiles"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Sid": "IAMPassRoleToInstance",
            "Action": [
                "iam:PassRole"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:iam::818755641843:role/EC2LaunchVansDEV"
        },
        {
            "Sid": "AllowInstanceActions",
            "Effect": "Allow",
            "Action": [
                "ec2:RebootInstances",
                "ec2:RunInstances",
                "ec2:StartInstances",
                "ec2:AttachVolume",
                "ec2:DetachVolume",
                "ec2:CreateTags"
            ],
            "Resource": "arn:aws:ec2:us-west-2:818755641843:instance/*",
            "Condition": {
                "StringEquals": {
                    "ec2:InstanceProfile": "arn:aws:iam::818755641843:instance-profile/EC2LaunchVansDEV"
                }
            }
        },
        {
            "Sid": "EC2RunInstances",
            "Effect": "Allow",
            "Action": [
                "ec2:RunInstances",
                "ec2:CreateTags"
            ],
            "Resource": "arn:aws:ec2:us-west-2:818755641843:instance/*",
            "Condition": {
                "StringEquals": {
                    "ec2:InstanceProfile": "arn:aws:iam::818755641843:instance-profile/EC2LaunchVansDEV"
                }
            }
        },
        {
            "Sid": "EC2RunInstancesSubnet",
            "Effect": "Allow",
            "Action": [
                "ec2:RunInstances",
                "ec2:CreateTags"
            ],
            "Resource": "arn:aws:ec2:us-west-2:818755641843:subnet/*",
            "Condition": {
                "StringEquals": {
                    "ec2:vpc": "arn:aws:ec2:us-west-2:818755641843:vpc/vpc-5b0f3c3f"
                }
            }
        },
        {
            "Sid": "RemainingRunInstancePermissions",
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": [
                "arn:aws:ec2:us-west-2:818755641843:volume/*",
                "arn:aws:ec2:us-west-2::image/*",
                "arn:aws:ec2:us-west-2::snapshot/*",
                "arn:aws:ec2:us-west-2:818755641843:network-interface/*",
                "arn:aws:ec2:us-west-2:818755641843:key-pair/*",
                "arn:aws:ec2:us-west-2:818755641843:security-group/*"
            ]
        },
        {
            "Sid": "EC2VpcNonresourceSpecificActions",
            "Effect": "Allow",
            "Action": [
                "ec2:DeleteNetworkAcl",
                "ec2:DeleteNetworkAclEntry",
                "ec2:DeleteRoute",
                "ec2:DeleteRouteTable",
                "ec2:AuthorizeSecurityGroupEgress",
                "ec2:AuthorizeSecurityGroupIngress",
                "ec2:RevokeSecurityGroupEgress",
                "ec2:RevokeSecurityGroupIngress",
                "ec2:DeleteSecurityGroup",
                "ec2:CreateTags"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "ec2:vpc": "arn:aws:ec2:us-west-2:818755641843:vpc/vpc-5b0f3c3f"
                }
            }
        }
    ]
}

В DescribeInstances действие не может быть ограничено ec2:Vpc состояние. Фактически, это часть набора действий API, которые не разрешают разрешения на уровне ресурсов, полный список см. Здесь:

http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ec2-api-permissions.html#ec2-api-unsupported-resource-permissions

Я считаю, что лучше всего разделить на несколько учетных записей и разделить их там.

Смотрите также:

Сейчас это невозможно без дополнительных уловок, например. по тегам, потому что эти действия не поддерживаю VPC в условиях:

RebootInstances
StartInstances
StopInstances
TerminateInstances

Но все они поддерживают регион в условиях, поэтому вы можете переместить среду разработки в конкретный регион.