web-dev-qa-db-ja.com

1つのVPCへのアクセスを制限するIAMポリシー

ユーザーを1つのVPCに制限しようとしています。私は Amazon VPCリソースへのアクセスの制御 を実行し、次のポリシーを考え出しましたが、機能しません。誰かがその中のエラーを指摘できますか?

IAM Policy Simulator は、シミュレーション設定の条件キーの下でVPC ARNを設定した後、ポリシーは問題ないと考えているようです。

(リージョン、アカウント、vpc-idをポリシーの実際の値に置き換えました。)


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:*Vpc*",
                "ec2:*Subnet*",
                "ec2:*Gateway*",
                "ec2:*Vpn*",
                "ec2:*Route*",
                "ec2:*Address*",
                "ec2:*SecurityGroup*",
                "ec2:*NetworkAcl*",
                "ec2:*DhcpOptions*",
                "ec2:RunInstances",
                "ec2:StopInstances",
                "ec2:StartInstances",
                "ec2:TerminateInstances",
                "ec2:Describe*"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "ec2:Vpc": "arn:aws:ec2:region:account:vpc/vpc-id"
                }
            }
        }
    ]
}
4
Satie Sharma

おそらく IAMポリシーの例に沿って再構成する必要があります。例5.-内の特定のVPCにインスタンスを起動する- Amazon VPCリソースへのアクセスの制御

{
   "Version": "2012-10-17",
   "Statement": [{
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": "arn:aws:ec2:region:account:subnet/*",
        "Condition": {
         "StringEquals": {
            "ec2:Vpc": "arn:aws:ec2:region:account:vpc/vpc-1a2b3c4d"
            }
      }
   },
   ...
   ]
}

つまり、使用可能なリソース(およびその粒度)は各APIアクションに固有であるため、手元の例では RunInstances が特定のサブネットのEC2リソースに適用され、それがVPCの一部になります;したがって、サブネットをターゲットにする必要がありますが、上記のように IAMポリシー条件 を介してec2:Vpc属性を使用することにより、可能なサブネットのセットをさらに制約できます。

4
Steffen Opel

特定のリソースに適用できない特定の権限があります。 IAMでポリシーを確認すると、これらの権限にエラーが表示されます。

ユーザーを特定のVPCに制限し、すべてのEC2アクションを許可するには、次のポリシーがそれを実現するのに役立ちます。

{
"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::123456789012:role/VPCLockDown"
    },
    {
        "Sid": "AllowInstanceActions",
        "Effect": "Allow",
        "Action": [
            "ec2:RebootInstances",
            "ec2:StopInstances",
            "ec2:TerminateInstances",
            "ec2:StartInstances",
            "ec2:AttachVolume",
            "ec2:DetachVolume"
        ],
        "Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*",
        "Condition": {
            "StringEquals": {
                "ec2:InstanceProfile": "arn:aws:iam::123456789012:instance-profile/VPCLockDown"
            }
        }
    },
    {
        "Sid": "EC2RunInstances",
        "Effect": "Allow",
        "Action": "ec2:RunInstances",
        "Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*",
        "Condition": {
            "StringEquals": {
                "ec2:InstanceProfile": "arn:aws:iam::123456789012:instance-profile/VPCLockDown"
            }
        }
    },
    {
        "Sid": "EC2RunInstancesSubnet",
        "Effect": "Allow",
        "Action": "ec2:RunInstances",
        "Resource": "arn:aws:ec2:us-east-1:123456789012:subnet/*",
        "Condition": {
            "StringEquals": {
                "ec2:vpc": "arn:aws:ec2:us-east-1:123456789012:vpc/vpc-7bcd371e"
            }
        }
    },
    {
        "Sid": "RemainingRunInstancePermissions",
        "Effect": "Allow",
        "Action": "ec2:RunInstances",
        "Resource": [
            "arn:aws:ec2:us-east-1:123456789012:volume/*",
            "arn:aws:ec2:us-east-1::image/*",
            "arn:aws:ec2:us-east-1::snapshot/*",
            "arn:aws:ec2:us-east-1:123456789012:network-interface/*",
            "arn:aws:ec2:us-east-1:123456789012:key-pair/*",
            "arn:aws:ec2:us-east-1:123456789012: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"
        ],
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "ec2:vpc": "arn:aws:ec2:us-east-1:123456789012:vpc/vpc-7bcd371e"
            }
        }
    }
]
}

各ステートメントの意味を詳しく理解するために、AWSの このブログ を読むことをお勧めします。このポリシーにより、ユーザーは次のことができます。

  • AWSマネジメントコンソールにサインインし、Amazon EC2コンソールに移動します。
  • 次の条件を満たす限り、EC2インスタンスを起動します。

    適切なVPCでサブネットを指定します。許可するインスタンスプロファイルを指定します。

  • 次の条件を満たす限り、インスタンスのボリュームを起動/停止/再起動/終了/アタッチ/デタッチします。

    適切なインスタンスプロファイルで起動されたインスタンスを指定します。

  • セキュリティグループ、ルート、ルートテーブル、ネットワークACL、ACLエントリを削除し、適切なVPC内にある限り、セキュリティグループの入力ルールと出力ルールを承認および取り消します。
0
captainblack