Json 如何在S3存储桶策略中执行OR条件?
我正在制定S3桶策略。其思想是明确拒绝访问帐户中的所有IAM用户,但明确授予的用户除外 我发现了一篇解释如何限制特定用户访问的博客文章。它工作得很好。但是,我想扩展语法以包括第二个IAM用户,该用户将被允许访问。实际上,这是一个或条件 但是,我对JSON非常陌生,我不知道该怎么做 以下是限制单个用户访问的策略:Json 如何在S3存储桶策略中执行OR条件?,json,amazon-web-services,amazon-iam,Json,Amazon Web Services,Amazon Iam,我正在制定S3桶策略。其思想是明确拒绝访问帐户中的所有IAM用户,但明确授予的用户除外 我发现了一篇解释如何限制特定用户访问的博客文章。它工作得很好。但是,我想扩展语法以包括第二个IAM用户,该用户将被允许访问。实际上,这是一个或条件 但是,我对JSON非常陌生,我不知道该怎么做 以下是限制单个用户访问的策略: { "Version": "2012-10-17", "Statement": [ { "Effect": "Deny",
{
"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"
]
}
}
}
]
}
{
“版本”:“2012-10-17”,
“声明”:[
{
“效果”:“拒绝”,
“委托人”:“*”,
“行动”:“s3:*”,
“资源”:[
“arn:aws:s3:::我的桶”,
“arn:aws:s3:::我的桶/*”
],
“条件”:{
“StringNotLike”:{
“aws:userId”:[
“艾达:”,
“艾达”,
"111111111111"
]
}
}
}
]
}
有人能帮我编辑上面的JSON,允许我指定一个允许访问的附加用户ID的条件吗
谢谢你 您不需要创建此拒绝规则,因为除非有明确的允许规则,否则所有请求都被拒绝 要授权多个IAM用户,可以将其列为数组元素。因此,您可以按如下方式编写bucket策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowAllS3ActionsForSpecificIAMUsers",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::<account-number-without-hyphens>:user/<username1>",
"arn:aws:iam::<account-number-without-hyphens>:user/<username2>"
]
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
]
}
]
}
{
“版本”:“2012-10-17”,
“声明”:[
{
“Sid”:“AllowlS3ActionsforSpecificiaMusers”,
“效果”:“允许”,
“委托人”:{
“AWS”:[
“阿恩:aws:iam::。好的,我想出来了
首先,我尝试将第二个StringgNotLike
子句添加到条件中,但没有成功
在做了更多的阅读之后,我意识到Condition子句接受多个键/值对。事实上,我在问题中展示的原始策略已经做到了这一点。我只需要向已经存在的数组中添加更多的值
有效的策略如下所示:
{
"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"
]
}
}
}
]
}
{
“版本”:“2012-10-17”,
“声明”:[
{
“效果”:“拒绝”,
“委托人”:“*”,
“行动”:“s3:*”,
“资源”:[
“arn:aws:s3:::我的私人桶”,
“arn:aws:s3:::我的私人桶/*”
],
“条件”:{
“StringNotLike”:{
“aws:userId”:[
“艾达:”,
“艾达”,
“艾达:”,
“艾达”,
"111111111111"
]
}
}
}
]
}
当我意识到密钥已经指定了一个值数组时,我只是将第二个用户id添加到数组中,效果很好。Hi Khalid,谢谢你的回复。默认情况下,帐户中的所有用户(具有S3访问权限)有权访问所有bucket。我有一个bucket,该bucket只能由特定IAM用户访问。因此,该策略说,如果用户名不是(StringNotLike)特定用户,则拒绝。这是有效的。问题是,如何将用户添加到允许列表中?我从这里得到了这个想法:这并没有回答所述的问题。