AWS SDK GetBucketPolicy returns 与 S3 中的架构不同 JSON
AWS SDK GetBucketPolicy returns different JSON schema than what is in S3
以下是我使用 :
生成的策略 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" tap "AWS"其实就是一个数组。但在 API 响应中,它作为一个对象嵌入到 "Principal" 中。
仅当列表中添加了一个 ARN 时才会发生这种情况。如果至少有 2 个元素,则 API 以 "AWS" 对象的数组响应。
这种不一致有什么原因吗?
当使用任何库转换为 JSON 时,是否期望客户端使用对象类型检查来处理此问题?
这不是 Principal
独有的。每当您尝试使用策略中的一项创建数组时,都会发生同样的事情。查看您的政策中的 Action
。
您已定义:
"Action": [
"s3:GetObject"
],
但结果是
"Action": "s3:GetObject"
当您提交放置策略请求时,这会在 AWS 内部发生,每个具有一个值的数组将仅替换为该值。至于为什么,我猜是AWS想把policy的size最小化。
至于Console视图和你看到的不一致,有none,你需要做的就是刷新选项卡以查看新格式的策略。这只是因为您正在提交未格式化的策略,并且您的选项卡不会自动刷新为实际存储在 AWS 后端的值。
是的,如果您通过 CLI/SDK 获取策略并将其转换为 JSON,那么您需要了解这一点并相应地进行处理。
以下是我使用 :
生成的策略 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" tap "AWS"其实就是一个数组。但在 API 响应中,它作为一个对象嵌入到 "Principal" 中。
仅当列表中添加了一个 ARN 时才会发生这种情况。如果至少有 2 个元素,则 API 以 "AWS" 对象的数组响应。
这种不一致有什么原因吗? 当使用任何库转换为 JSON 时,是否期望客户端使用对象类型检查来处理此问题?
这不是 Principal
独有的。每当您尝试使用策略中的一项创建数组时,都会发生同样的事情。查看您的政策中的 Action
。
您已定义:
"Action": [
"s3:GetObject"
],
但结果是
"Action": "s3:GetObject"
当您提交放置策略请求时,这会在 AWS 内部发生,每个具有一个值的数组将仅替换为该值。至于为什么,我猜是AWS想把policy的size最小化。
至于Console视图和你看到的不一致,有none,你需要做的就是刷新选项卡以查看新格式的策略。这只是因为您正在提交未格式化的策略,并且您的选项卡不会自动刷新为实际存储在 AWS 后端的值。
是的,如果您通过 CLI/SDK 获取策略并将其转换为 JSON,那么您需要了解这一点并相应地进行处理。