Kanji
・云架构工程师 / 自由职业 ・1993年出生 ・爱媛县出身 / 现居东京都涩谷区 ・5年 AWS 实战经验 个人资料详情
目录
设计 IAM 权限的主要挑战之一是确定如何严格地应用最小权限原则。
作为最佳实践,建议仅向 IAM 用户和 IAM 角色授予必要的最低权限。
但是,限制IAM用户和角色的权限可能会增加系统管理员的操作负担。
因此, 提前评估与授予的IAM权限相关的业务风险并在可接受的风险范围内授予权限非常重要。
除了 IAM 权限控制之外,使用 AWS Organizations 的 SCP(服务控制策略)可以帮助减轻 IAM 权限设计的负担。
正确划分AWS账户也很重要。通过划分AWS账户,即使IAM权限被不当授予,影响也可以受到限制。
您可以使用三种类型的策略来授予 IAM 权限:
内联政策
AWS 托管策略
客户管理政策
其中,“AWS 托管策略”由 AWS 提供,并在 AWS 正确评估权限后提供。通过使用这些策略,您可以授予每个 AWS 服务的写入和读取权限。
基本上,建议使用AWS托管策略。但是,由于 AWS 托管策略可能会授予过多的权限,因此请考虑使用“客户托管策略”或“内联策略”来根据需要进一步限制权限。
例如,在以下模式中,考虑使用“客户管理策略”或“内联策略”来限制权限。
要使用 AWS 托管策略授予 KMS 密钥的管理权限,您可以使用 AWS 托管策略“AWSKeyManagementServicePowerUser”。
参考: AWSKeyManagementServicePowerUser - AWS 托管策略
但是,使用此策略将为 KMS 密钥授予强大的权限,例如创建或删除密钥以及更改 IAM 策略。
因此, 考虑使用 IAM 策略仅授予特定 KMS 密钥的权限。
例如,以下 IAM 策略授予解密使用具有特定标签的 KMS 密钥加密的数据的权限:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/System": "SystemA" } } } ] }
授予 AWS 资源(例如 Lambda 或 Step Functions)的执行权限时,您将授予执行这些资源时所行使的权限。
如果执行这些资源会带来业务风险,请考虑使用 IAM 策略限制执行权限。
例如,通过使用以下 IAM 策略,您可以授予执行遵循特定命名约定的 Lambda 函数的权限。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:ap-northeast-1:123456789012:function:SystemA-*" ] } ] }
当您需要在外部账户中代入 IAM 角色时,您可以使用 IAM 策略授予 AssumeRole 权限。
无法使用 AWS 托管策略授予此权限,因此您必须使用自定义 IAM 策略来授予权限。
例如,以下 IAM 策略授予担任特定 IAM 角色的权限。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": [ "arn:aws:iam::123456789012:role/SystemA-*" ] } ] }
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::systema-bucket", "arn:aws:s3:::systema-bucket/*" ] } ] }