【问题标题】:Why does S3 bucket ARN not contain AWS account number?为什么 S3 存储桶 ARN 不包含 AWS 帐号?
【发布时间】:2018-12-05 21:58:31
【问题描述】:

与其他 AWS 服务、s3 资源不同,ARN 不包含 AWS 帐号。
少数示例 ARN 是:

  • -- Elastic Beanstalk 应用程序版本 --
    arn:aws:elasticbeanstalk:us-east-1:123456789012:environment/My 应用程序/我的环境

  • -- IAM 用户名--
    arn:aws:iam::123456789012:user/大卫

  • -- 用于标记的 Amazon RDS 实例 --
    arn:aws:rds:eu-west-1:123456789012:db:mysql-db

另一方面,s3 存储桶 ARN 看起来像:

  • arn:aws:s3:::my_corporate_bucket/exampleobject.png

【问题讨论】:

    标签: amazon-web-services amazon-s3


    【解决方案1】:

    S3 存储桶 ARN 不需要帐号或区域,因为存储桶名称在所有账户/区域中都是唯一的。

    【讨论】:

    • 正确。对此进行扩展... 由于存储桶名称是唯一的,AWS 可以使用存储桶名称来确定区域和账户。这与 Amazon SQS 等其他服务不同,后者可以在不同账户甚至不同区域的同一账户中使用相同的队列名称。
    • 虽然没有必要,但是否可以获得包含帐户的完整 ARN?
    • @MelissaGuo 我不认为有任何办法,但如果你试图限制访问,例如管理用户权限,您可以执行 arn:aws:s3:::bucket_name/developers/${aws:username}/ 之类的操作并使用 Cognito/IAM。有一些示例here,但我想这取决于您的用例。
    • @RobertoNovelo,如果我想编写一个策略来授予对特定账户中所有 s3 存储桶的访问权限,但我不想授予对所有账户中所有 s3 存储桶的访问权限,该怎么办?即,我想要类似:"Resource": "arn:aws:s3::<accountid>:*" 而不是:"Resource":"arn:aws:s3:::*"
    【解决方案2】:

    但是,这样做的问题在于,无法编写仅限制对我帐户中的存储桶执行操作的策略。风险是我帐户中的某些用户可能会通过将数据推送到另一个帐户的存储桶来泄漏数据。

    【讨论】:

    • 使用 IAM 条件允许我将 * 的范围限制为单个账户中的存储桶。 “条件”:{“StringLike”:{“s3​​:ResourceAccount”:“999999999999”}}
    【解决方案3】:

    问题是“为什么 S3 存储桶 ARN 不包含 AWS 帐号?”答案是因为 S3 是第一个推出的 AWS 服务,从那时起许多事情都发生了变化。 S3 尚未设法在存储桶名称中实施 ARN。我们不知道为什么会这样。可能是它在技术上具有挑战性,或者只是服务团队没有优先考虑它。

    验证正在上传的存储桶对象是否属于您以避免数据意外泄漏到其他人的存储桶的一种方法是使用最近发布的存储桶所有者条件:

    https://aws.amazon.com/about-aws/whats-new/2020/09/amazon-s3-bucket-owner-condition-helps-validate-correct-bucket-ownership https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-owner-condition.html

    另一种方法(如果支持)是使用 S3 接入点:https://aws.amazon.com/s3/features/access-points/

    【讨论】:

      猜你喜欢
      • 2017-05-06
      • 2021-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-13
      相关资源
      最近更新 更多