Amazon-Vpc

適用於單個 VPC 子網的 Amazon AWS IAM 策略

  • March 29, 2018

我想創建一個允許使用者部署實例的 IAM 策略,如下所示:

  1. 他們只能使用 1 個 AMI
  2. 他們只能部署到 1 個特定的 VPC 子網
  3. 他們只能使用 1 個特定的 VPC 安全組

此場景在此處的 VPC 文件中得到解決(範例 4):

http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_IAM.html#subnet-sg-example-iam

我已經嘗試過我自己的政策版本:

{
"Version": "2012-10-17",
"Statement":[{
   "Effect":"Allow",
   "Action": "ec2:RunInstances",
   "Resource": [
       "arn:aws:ec2:eu-west-1:937821706121:image/ami-141ac363",
       "arn:aws:ec2:eu-west-1:937821706121:subnet/subnet-733de516",
       "arn:aws:ec2:eu-west-1:937821706121:network-interface/*",
       "arn:aws:ec2:eu-west-1:937821706121:volume/*",
       "arn:aws:ec2:eu-west-1:937821706121:key-pair/*",
       "arn:aws:ec2:eu-west-1:937821706121:security-group/sg-4aa80f2f"
   ]
}]
}

它不起作用。當我嘗試將實例部署為應用此策略的組的成員時,我的權限被拒絕。我需要包含其他一些策略以允許以這種方式部署實例嗎?

基本上,當涉及到設置全域管理或只讀策略之外的任何事情時,IAM 文件是完全不可靠的。

這是我最終開始採用的策略(至少對於子網位):

{
  "Version": "2012-10-17",
  "Statement": [{
     "Effect": "Deny",
     "Action": "ec2:RunInstances",
     "Resource": [
        "arn:aws:ec2:eu-west-1:937821706121:network-interface/*"
     ],
    "Condition": {
        "ArnNotEquals": {
           "ec2:Subnet": "arn:aws:ec2:eu-west-1:937821706121:subnet/subnet-733de516"
           }
     }
  },
  {
     "Effect": "Allow",
     "Action": "ec2:RunInstances",
     "Resource": [
        "arn:aws:ec2:eu-west-1::image/ami-*",
        "arn:aws:ec2:eu-west-1:937821706121:network-interface/*",
        "arn:aws:ec2:eu-west-1:937821706121:instance/*",
        "arn:aws:ec2:eu-west-1:937821706121:subnet/*",
        "arn:aws:ec2:eu-west-1:937821706121:volume/*",
        "arn:aws:ec2:eu-west-1:937821706121:key-pair/*",
        "arn:aws:ec2:eu-west-1:937821706121:security-group/*"
        ]
     }
  ]
}

這需要大量的試驗和錯誤。

基本上,當您想根據特定資源限制使用者時,您需要創建一個語句,首先拒絕執行實例的能力,除非特定 arn 資源滿足條件,然後最後允許它們執行任何操作。

更新:

亞馬遜承認他們的文件不准確:

https://forums.aws.amazon.com/thread.jspa?threadID=160287&tstart=0

引用自:https://serverfault.com/questions/626541