我有一个网络应用程序,用户(通过 Cognito 使用 ID 令牌 JWT 登录)可以从 S3 上传/下载文件。用户应仅访问与其组织相关的 S3 资源。为此,我正在考虑按组织分离 S3 路径:
"arn:aws:s3:::my_bucket/org1"
"arn:aws:s3:::my_bucket/org2"
"arn:aws:s3:::my_bucket/org3"
Question
如何保护 S3 路径(“文件夹”),以便用户只能访问其组织的资源?我做了一些研究,请参阅下面的选项 - 但有更简单的方法吗?这似乎是一个相当常见的用例。谢谢!
我考虑过的选项
编辑:我最初想到使用 JWT 声明(下面#1)。但我逐渐意识到,AWS 更喜欢使用“身份池”来完成此类任务。这是有道理的,因为您可以将不同的 IdP(例如 Auth0)连接到身份池,并使用身份设置策略(身份角色 -> 身份策略)。所以我会尝试一下,然后报告是否有效。
-
使用 JWT 声明的 S3 策略。尚未找到有关使用 JWT 的文档,因此不确定这是否可行。使用 JWT 声明作为 s3 策略中的路径选择器。每个用户都有一个称为“组织”的自定义声明。
User 1 has JWT with claim "organization: organization1"
User 2 has JWT with claim "organization: organization2"
etc.
存储桶策略示例 [1](不确定语法是否正确)
{
"Version": "2012-10-17",
"Statement": [
{
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::mybucket"],
"Condition": {"StringLike": {"s3:prefix": ["${cognito-identity.amazonaws.com:organization}/*"]}} // here
},
{
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::mybucket/${cognito-identity.amazonaws.com:organization}/*"] // here
}
]
}
- 具有身份池的“基于角色的访问控制”功能的 IAM 策略 [0]。
- 在用户池中为每个认知用户分配一个组值。这是他们的组织(例如“organization1”)。
- 将组映射到名为“OrgRole”的 IAM 角色,其 IAM 策略仅允许 s3 访问其组织的路径。
像这样的东西...
User | Cognito Group | IAM Role | IAM Policy S3 resource Mapping
user1 | organization1 | OrgRole | my-bucket/organization1/*
user2 | organization2 | OrgRole | my-bucket/organization1/*
user3 | organization2 | OrgRole | my-bucket/organization2/*
user4 | organization3 | OrgRole | my-bucket/organization3/*
此角色的 IAM 策略示例
"Resource": ["arn:aws:s3:::my_bucket/${current-users-cognito-group}/*"]
缺点:设置复杂,并且根据 [0],每个用户池仅支持 25 个组,无法扩展。这让我认为我的设置不正确。
[0] https://aws.amazon.com/blogs/aws/new-amazon-cognito-groups-and-fine-grained-role-based-access-control-2/ https://aws.amazon.com/blogs/aws/new-amazon-cognito-groups-and-fine-grained-role-based-access-control-2/
[1] https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html
[2] https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/ https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/