Proficiency

AWS IAM 權限架構分享

前言

AWS 針對 IAM 建議採用最小權限原則(Least Privilege Principle)控管所有使用者,不過實行上複雜且缺乏彈性。

此文章分享可使用之權限架構,除了便於劃分權限,也更容易管理,更新權限配置也更簡單。

權限架構圖

Image

權限配置說明及 IAM Policy 設定

因 AWS 帳號內可能會存放不同系統,各系統由不同單位及人員主責維運,故權限方面也要針對專案部分規劃權限配置。

總管理員

開放所有權限,可綁定 AWS 管理的 IAM Policy AdministratorAccess

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*"
        }
    ]
}

總內容管理員

開放除 IAM、Organization、Account 之外所有權限,可綁定 AWS 管理的 IAM Policy PowerUserAccess

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "NotAction": [
                "iam:*",
                "organizations:*",
                "account:*"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreateServiceLinkedRole",
                "iam:DeleteServiceLinkedRole",
                "iam:ListRoles",
                "organizations:DescribeOrganization",
                "account:ListRegions",
                "account:GetAccountInformation"
            ],
            "Resource": "*"
        }
    ]
}

總檢視者

可使用 AWS 管理的 IAM Policy ReadOnlyAccess,由於權限內容過長,暫不列下。

專案內容管理員

依照系統有使用到的服務,編列進權限設定中,先給予查看的權限,若服務內項目(Ex:某台 EC2)的 Tag 有符合 Policy 指定的 Key-Value,則可以進行編輯的操作。

通常使用到的服務為 EC2、RDS、WAF、Load Balancer…等

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:Describe*",
                "rds:Describe*",
                "cloudwatch:*",
                "waf:List*",
                "waf:Get*",
                "wafv2:List*",
                "wafv2:Get*",
                "elasticloadbalancing:Describe*"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/[Your-Key-Name]": "[Your-Value-Name]"
                }
            }
        }
    ]
}

專案檢視者

依照系統有使用到的服務,編列進權限設定中,並給予查看的權限。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:Describe*",
                "rds:Describe*",
                "cloudwatch:Describe*",
                "cloudwatch:GenerateQuery",
                "cloudwatch:Get*",
                "cloudwatch:List*",
                "waf:List*",
                "waf:Get*",
                "wafv2:List*",
                "wafv2:Get*",
                "elasticloadbalancing:Describe*"
            ],
            "Resource": "*"
        }
    ]
}

AWS 服務使用(不分使用者群組)

此為 AWS 服務(Ex:EC2)需進行 AWS 環境操作時,需給予的權限,也就是 IAM Role。

因為不像 IAM User 數量多且複雜,依照最小權限原則(Least Privilege Principle)安排權限即可。

一般使用者(不分使用者群組)

特殊需求之 IAM User,給予所需權限,不包含在群組權限內

AWS IAM Policy 權限配置上的缺陷

有關 Describe 的權限不能限制資源(Resource)的範圍,只要限制範圍,AWS 會直接判定對此服務沒有觀看權限,所以完全看不到內容。

所以上述設定的權限,某一系統的負責人,是可以看到同一 AWS 帳號其他系統的內容,不過其實影響也不大,因為沒有權限對其他系統做修改。

IAM Policy 說明

AWS 針對權限的部分,有著一套運作邏輯,牽連到許多技術知識,若有興趣,可參考 AWS IAM 官方介紹,對權限的部分有詳細的介紹。

How IAM works

IAM JSON policy elements reference

結語

以上分享 IAM 權限設定的架構,適合應用在企業雲端環境,單一 AWS 帳號有多個系統運行或開發。

可參考此架構管理 IAM User,簡單且易操作,節省管理時間。

希望這篇文章能啟發您更進一步的學習和研究,感謝您耐心閱讀。如果您有任何相關問題或想要討論,請隨時寄信給我,我們一起來探討吧!