如何将对 AWS S3 存储桶的访问限制为仅限特定角色?



在我的 AWS 项目中,我有一个 lambda 函数,由 API Gateway 中的 API 调用,用于获取 S3 存储桶中的文件。

我尝试尽可能保护我的 S3 存储桶,在阅读了本文和本文后,以下是我在 CloudFormation 模板中所做的工作:

  • 在 API 的 IAM 角色的策略中:
- Effect: 'Allow'
Action:
- "s3:GetObject"
Resource: 'arn:aws:s3:::exampleS3Bucket/*'
  • 在我的 S3 存储桶的策略中:
- Effect: "Deny"
Action:
- "s3:*"
Principal: "*"
Resource:
- 'arn:aws:s3:::exampleS3Bucket'
- 'arn:aws:s3:::exampleS3Bucket/*'
Condition:
StringNotLike:
aws:userId:
- "<API_IAM_ROLE_ID>"

根据文档,您可以通过调用以下 AWS CLI 命令来检索API_IAM_ROLE_IDaws iam get-role --role-name <YOUR_IAM_ROLE>

但我面临两个问题:

  • 它不起作用,我仍然有一个Access Denied错误
  • 即使它有效,它看起来也不是一个干净的解决方案,特别是如果我想处理多个环境(开发、暂存、生产......

编辑

我还尝试了以下 S3 存储桶策略:

- Effect: "Deny"
Action:
- "s3:*"
NotPrincipal:
AWS:
- "arn:aws:iam::123456789012:root"
- "arn:aws:iam::123456789012:role/my-api-role"
Resource:
- 'arn:aws:s3:::exampleS3Bucket'
- 'arn:aws:s3:::exampleS3Bucket/*'

但是当我调用我的 API 时,它会调用调用 S3 的 lambda。GetObject((,我仍然有一个"拒绝访问"异常。

我该如何解决这个问题?

谢谢。

拒绝访问特定存储桶可能很棘手。

例如,管理员可能能够修改角色和存储桶策略,以便他们能够重新获得对存储桶的访问权限。

一种常见做法是将敏感信息放入不同 AWS 账户的存储桶中,然后仅向"主"账户中的特定用户提供对存储桶的访问权限。这样,默认设置是主帐户中没有人具有访问权限。它还简化了权限的设计,因为无需应用Deny策略。

例如,存储敏感的 HR 信息的位置,其中只有少数用户应有权访问数据。

这就是我最近的做法。

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::MyExampleBucket",
"arn:aws:s3:::MyExampleBucket/*"
],
"Condition": {
"StringNotLike": {
"aws:userId": [
"AROAEXAMPLEID:*",
"ACCOUNT NUMBER"
]
}
}
}
]
}

这就是它的工作原理。

  • 允许:用户的 IAM 策略允许访问 S3 存储桶
  • 拒绝:存储桶策略用于拒绝除角色的用户 ID 之外的所有用户的访问。

要获取角色的用户 ID,请执行以下操作:

aws iam get-role --role-name ROLE-NAME

参考: https://aws.amazon.com/blogs/security/how-to-restrict-amazon-s3-bucket-access-to-a-specific-iam-role/

相关内容

  • 没有找到相关文章

最新更新