【问题标题】:AWS SDK GetBucketPolicy returns different JSON schema than what is in S3AWS SDK GetBucketPolicy 返回的 JSON 架构与 S3 中的不同
【发布时间】:2019-07-27 05:38:32
【问题描述】:

以下是我使用生成的 Policy json:

    {
    "Id": "Policy1564102281945",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "S1001",
            "Action": [
                "s3:GetObject"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::<>/*",
            "Principal": {
                **"AWS": [
                    "arn:aws:iam::<>:root"
                ]**
            }
        }
    ]
}

但是,当我使用适用于 C# 的 AWS 开发工具包并调用以下 API 时

client.GetBucketPolicy(bucketName)

我得到以下 Json 响应。

    {
    "Version": "2012-10-17",
    "Id": "Policy1564102281945",
    "Statement": [{
            "Sid": "S1001",
            "Effect": "Allow",
            "Principal": {
                **"AWS": "arn:aws:iam::185160002363:root"**
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::mcafee-mvision-epo-dev-girish-cda/*"
        }
    ]
}

注意“AWS”对象的 JSON 模式。在 S3 的“Bucket Policy”中点击“AWS”实际上是一个数组。但在 API 响应中,它作为对象嵌入“主体”中。

仅当列表中添加了一个 ARN 时才会发生这种情况。如果至少有 2 个元素,则 API 会以“AWS”对象的数组进行响应。

这种不一致有什么原因吗? 当使用任何库转换为 JSON 时,是否期望客户端使用对象类型检查来处理此问题?

【问题讨论】:

    标签: c# amazon-web-services aws-sdk amazon-iam


    【解决方案1】:

    这不是 Principal 独有的。每当您尝试使用策略中的一项创建数组时,都会发生同样的事情。查看您的政策中的Action

    你已经定义了:

    "Action": [
        "s3:GetObject"
    ],
    

    但结果是

    "Action": "s3:GetObject"
    

    当您提交 put 策略请求时,这会在 AWS 端内部发生,每个具有一个值的数组都将替换为该值。至于为什么,我猜 AWS 想尽量减少策略的大小。

    Console 视图和你看到的不一致,没有,你需要做的就是刷新标签看到新格式化的策略。这只是因为您提交的是未格式化的策略,并且您的选项卡不会使用实际存储在 AWS 后端的值自动刷新。

    是的,如果您通过 CLI/SDK 获取策略并将其转换为 JSON,那么您需要了解这一点并进行相应的处理。

    【讨论】:

      猜你喜欢
      • 2014-12-06
      • 2021-08-09
      • 1970-01-01
      • 2018-11-27
      • 2015-05-16
      • 2019-03-16
      • 2021-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多