如何在 S3 存储桶策略中执行 OR 条件?
How do I do an OR condition in an S3 bucket policy?
我正在研究 S3 存储桶策略。这个想法是明确拒绝对帐户内所有 IAM 用户的访问,明确授予的用户除外。
我找到了一篇博客 post,它解释了如何限制对特定用户的访问。它运作良好。但是,我想扩展语法以包含允许访问的第二个 IAM 用户。这实际上是一个 OR 条件。
但是,我对 JSON 还很陌生,我不知道该怎么做。
以下是限制单个用户访问的策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
],
"Condition": {
"StringNotLike": {
"aws:userId": [
"AIDA<obfuscated id>:*",
"AIDA<obfuscated id>",
"111111111111"
]
}
}
}
]
}
任何人都可以帮我编辑上面的 JSON 以允许 OR 条件,在该条件下我可以指定允许访问的其他用户 ID 吗?
AdvThanksance!
好的,我明白了。
首先,我尝试向 Condition
添加第二个 StringgNotLike
子句,但没有成功。
阅读更多内容后,我意识到 Condition 子句接受多个 key/value 对。事实上,我在问题中展示的原始政策已经做到了。我只需要向已经存在的数组添加更多值。
有效的策略如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::my-private-bucket",
"arn:aws:s3:::my-private-bucket/*"
],
"Condition": {
"StringNotLike": {
"aws:userId": [
"AIDA<obfuscated-id-1>:*",
"AIDA<obfuscated-id-1>",
"AIDA<obfuscated-id-2>:*",
"AIDA<obfuscated-id-2>",
"111111111111"
]
}
}
}
]
}
当我意识到该键已经指定了一个值数组时,我只是将第二个用户 ID 添加到该数组中,效果很好。
我正在研究 S3 存储桶策略。这个想法是明确拒绝对帐户内所有 IAM 用户的访问,明确授予的用户除外。
我找到了一篇博客 post,它解释了如何限制对特定用户的访问。它运作良好。但是,我想扩展语法以包含允许访问的第二个 IAM 用户。这实际上是一个 OR 条件。
但是,我对 JSON 还很陌生,我不知道该怎么做。
以下是限制单个用户访问的策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
],
"Condition": {
"StringNotLike": {
"aws:userId": [
"AIDA<obfuscated id>:*",
"AIDA<obfuscated id>",
"111111111111"
]
}
}
}
]
}
任何人都可以帮我编辑上面的 JSON 以允许 OR 条件,在该条件下我可以指定允许访问的其他用户 ID 吗?
AdvThanksance!
好的,我明白了。
首先,我尝试向 Condition
添加第二个 StringgNotLike
子句,但没有成功。
阅读更多内容后,我意识到 Condition 子句接受多个 key/value 对。事实上,我在问题中展示的原始政策已经做到了。我只需要向已经存在的数组添加更多值。
有效的策略如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::my-private-bucket",
"arn:aws:s3:::my-private-bucket/*"
],
"Condition": {
"StringNotLike": {
"aws:userId": [
"AIDA<obfuscated-id-1>:*",
"AIDA<obfuscated-id-1>",
"AIDA<obfuscated-id-2>:*",
"AIDA<obfuscated-id-2>",
"111111111111"
]
}
}
}
]
}
当我意识到该键已经指定了一个值数组时,我只是将第二个用户 ID 添加到该数组中,效果很好。