IAM 評估邏輯如何使用具有多個條件金鑰的明確拒絕政策來運作?

2 分的閱讀內容
0

我想要建立 AWS Identity and Access Management (IAM) 明確拒絕政策,以限制 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體和 Amazon Elastic Block Store (Amazon EBS) 磁碟區的建立。我該怎麼做?

簡短描述

您可以使用 IAM 政策標籤來限制 EC2 執行個體和 EBS 磁碟區的啟動,方法是使用 StringLike允許,或使用 StringNotLike 條件運算子拒絕。如需使用 StringLike 條件運算子的允許的相關指示,請參閱如何使用 IAM 政策標籤來限制 EC2 執行個體或 EBS 磁碟區的建立方式?

解決方法

使用下列 IAM 政策範例,該政策使用 StringNotLike拒絕來限制建立 EC2 執行個體和 EBS 磁碟區的建立。

注意: 最佳做法是使用 StringNotLike拒絕,以防止意外的特權存取。

如果您的政策具有多個條件運算子,或將多個索引鍵附加至單一條件運算子,則會使用 AND 邏輯評估條件。使用拒絕多個標籤值時,每個 RequestTag 金鑰必須在單獨的陳述式中使用,才能取得相同的 AND 邏輯。

注意: 使用拒絕政策在一個條件下設定所有 RequestTag 金鑰值可能無法如預期般運作。這是因為在滿足所有條件之前允許執行此動作。當所有條件都符合時,會拒絕該動作。

請注意下列必要標籤:

  • cost_center 標籤必須具有非空值。
  • EC2 執行個體有一個名為 Production 的標籤金鑰。
  • 識別碼標籤必須是任何五個字元的組合。
  • env 標籤值必須是 sandboxdevprod.
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowToDescribeAll",
            "Effect": "Allow",
            "Action": [
                "ec2:Describe*"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowRunInstances",
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": [
                "arn:aws:ec2:*::image/*",
                "arn:aws:ec2:*::snapshot/*",
                "arn:aws:ec2:*:*:subnet/*",
                "arn:aws:ec2:*:*:network-interface/*",
                "arn:aws:ec2:*:*:security-group/*",
                "arn:aws:ec2:*:*:key-pair/*"
            ]
        },
        {
            "Sid": "AllowRunInstancesWithRestrictions1",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:RequestTag/cost_center": "?*"
                }
            }
        },
        {
            "Sid": "AllowRunInstancesWithRestrictions2",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "ForAllValues:StringNotLike": {
                    "aws:TagKeys": "Production"
                }
            }
        },
        {
            "Sid": "AllowRunInstancesWithRestrictions3",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:RequestTag/identifier": "?????"
                }
            }
        },
        {
            "Sid": "AllowRunInstancesWithRestrictions4",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:RequestTag/env": [
                        "sandbox",
                        "dev",
                        "prod"
                    ]
                }
            }
        },
        {
            "Sid": "AllowRunInstances1",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ]
        },
        {
            "Sid": "AllowCreateTagsOnRunInstance",
            "Effect": "Allow",
            "Action": "ec2:CreateTags",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "ec2:CreateAction": "RunInstances"
                }
            }
        }
    ]
}

請注意下列強制值:

  • aws:TagKeys 值會強制檢查 Production 的區分大小寫。
  • ????? 值會強制使用任何五個字元的組合 (忽略前導或結尾空間)。
  • ?* 值強制在值欄位中至少有一個字元,以便 EC2 執行個體無法以空標籤值啟動。

相關資訊

如何建立 IAM 政策以使用標籤控制對 Amazon EC2 資源的存取?

標記您的 Amazon EC2 資源

使用資源標籤控制對 AWS 資源的存取

具有多個金鑰或值的條件的評估邏輯