如何管理 100 个 AWS IAM 角色?
How to manage 100s of AWS IAM Roles?
我们有 3 个存储桶和许多文件夹。
目前有 3 个角色来管理这些存储桶,因此可以维持访问级别。
客户希望限制只提供对某些特定文件夹的访问权限。
如果我们为特定文件夹创建多个角色,我们最终会得到 100 个不同的角色。
Hashi Corp Vault 将使用这些 IAM 角色来提供访问权限。
是否有更好的方法来管理和扩展 AWS IAM 角色?
是否有关于如何管理多个角色的指南?
您可以在 IAM 策略中使用前缀来控制 IAM 角色或 IAM 用户。
这里有一篇关于 S3 存储桶上的 IAM 用户级别权限的精彩文章:https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/
但总而言之,如果您想获得用户级别的权限,您最终将为每个用户拥有一个 IAM 实体。政策将如下所示
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AllowGroupToSeeBucketListInTheConsole",
"Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::*"]
},
{
"Sid": "AllowRootAndHomeListingOfCompanyBucket",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::my-company"],
"Condition":{"StringEquals":{"s3:prefix":["","home/"],"s3:delimiter":["/"]}}
},
{
"Sid": "AllowListingOfUserFolder",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::my-company"],
"Condition":{"StringLike":{"s3:prefix":
[
"home/${aws:username}/*"
"home/${aws:username}"
]
}
}
},
{
"Sid": "AllowAllS3ActionsInUserFolder",
"Action":["s3:*"],
"Effect":"Allow",
"Resource": ["arn:aws:s3:::my-company/home/${aws:username}/*"]
}
]
}
对于角色,您将遵循类似的模式,但是您不需要那么多的 IAM 角色,因为许多用户可能属于类似的角色,因此可以共享。
{
"Version":"2012-10-17",
"Statement": [
...
{
"Sid": "AllowAllS3ActionsInUserFolder",
"Action":["s3:*"],
"Effect":"Allow",
"Resource": [
"arn:aws:s3:::my-folder-1/${aws:username}/*",
"arn:aws:s3:::my-folder-2/${aws:username}/*"
]
}
...
]
}
请记住,在 IAM 策略中,您可以为每个语句和多个语句(allow
或 deny
列出多个资源(文件夹)和操作(文件操作,如创建、列出等...)关于资源操作组合)。
我们有 3 个存储桶和许多文件夹。
目前有 3 个角色来管理这些存储桶,因此可以维持访问级别。
客户希望限制只提供对某些特定文件夹的访问权限。
如果我们为特定文件夹创建多个角色,我们最终会得到 100 个不同的角色。
Hashi Corp Vault 将使用这些 IAM 角色来提供访问权限。
是否有更好的方法来管理和扩展 AWS IAM 角色?
是否有关于如何管理多个角色的指南?
您可以在 IAM 策略中使用前缀来控制 IAM 角色或 IAM 用户。
这里有一篇关于 S3 存储桶上的 IAM 用户级别权限的精彩文章:https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/
但总而言之,如果您想获得用户级别的权限,您最终将为每个用户拥有一个 IAM 实体。政策将如下所示
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AllowGroupToSeeBucketListInTheConsole",
"Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::*"]
},
{
"Sid": "AllowRootAndHomeListingOfCompanyBucket",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::my-company"],
"Condition":{"StringEquals":{"s3:prefix":["","home/"],"s3:delimiter":["/"]}}
},
{
"Sid": "AllowListingOfUserFolder",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::my-company"],
"Condition":{"StringLike":{"s3:prefix":
[
"home/${aws:username}/*"
"home/${aws:username}"
]
}
}
},
{
"Sid": "AllowAllS3ActionsInUserFolder",
"Action":["s3:*"],
"Effect":"Allow",
"Resource": ["arn:aws:s3:::my-company/home/${aws:username}/*"]
}
]
}
对于角色,您将遵循类似的模式,但是您不需要那么多的 IAM 角色,因为许多用户可能属于类似的角色,因此可以共享。
{
"Version":"2012-10-17",
"Statement": [
...
{
"Sid": "AllowAllS3ActionsInUserFolder",
"Action":["s3:*"],
"Effect":"Allow",
"Resource": [
"arn:aws:s3:::my-folder-1/${aws:username}/*",
"arn:aws:s3:::my-folder-2/${aws:username}/*"
]
}
...
]
}
请记住,在 IAM 策略中,您可以为每个语句和多个语句(allow
或 deny
列出多个资源(文件夹)和操作(文件操作,如创建、列出等...)关于资源操作组合)。