【问题标题】:Understanding IAM policies了解 IAM 政策
【发布时间】:2019-05-16 09:08:22
【问题描述】:

我最近在使用 Code-Build 时遇到了带有 IAM 策略的 problem。我正在尝试了解以下 2 个策略之间的区别,并检查使用第 2 版而不是第 1 版是否存在任何安全隐患。

版本 1 不工作,所以我决定使用版本 2。但是为什么版本 2 可以工作,为什么版本 1 不工作?

版本 1 仅提供对 CodePipeline 资源的访问权限,并允许读取和写入 S3 存储桶对象。

但是版本 2 允许访问所有 S3 存储桶,不是吗?这会被视为安全漏洞吗?

版本 1

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Resource": [
                "arn:aws:logs:ap-southeast-1:682905754632:log-group:/aws/codebuild/Backend-API-Build",
                "arn:aws:logs:ap-southeast-1:682905754632:log-group:/aws/codebuild/Backend-API-Build:*"
            ],
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ]
        },
        {
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::codepipeline-ap-southeast-1-*"
            ],
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:GetObjectVersion"
            ]
        }
    ]
}

第 2 版

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Resource": [
                "arn:aws:logs:ap-southeast-1:682905754632:log-group:/aws/codebuild/Backend-API-Build",
                "arn:aws:logs:ap-southeast-1:682905754632:log-group:/aws/codebuild/Backend-API-Build:*"
            ],
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ]
        },
        {
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::codepipeline-ap-southeast-1-*"
            ],
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:GetObjectVersion"
            ]
        },
{
  "Sid": "S3AccessPolicy",
  "Effect": "Allow",
  "Action": [
    "s3:CreateBucket",
    "s3:GetObject",
    "s3:List*",
    "s3:PutObject"
  ],
  "Resource": "*"
  }
    ]
}

【问题讨论】:

  • 是的,这条规则太宽松了。系统可能只需要对存储桶的ListObjects 权限即可获取对象列表。您可以尝试将其添加到版本 1 (Action: s3:ListsObjects) 中,看看是否有帮助。

标签: amazon-web-services amazon-s3 amazon-iam


【解决方案1】:

我通过授予对特定 S3 存储桶的受限访问权限来复制该场景。

第 1 块:允许所需的 Amazon S3 控制台权限在这里,我已授权 CodePipeline 列出 AWS 账户中的所有存储桶。

块 2:允许在根文件夹中列出对象我的 S3 存储桶名称是“aws-codestar-us-east-1-493865049436-larvel-test-pipe”

但我很惊讶,因为当我按照从创建 CodePipeline 到从同一管道控制台本身创建构建的步骤时,我得到了与您的版本 1 相同的策略并且它也执行了。但是,作为下一步,我按照以下策略对 S3 中的存储桶授予了特定权限,并且它已经奏效。因此,在您的版本二中,您可以将权限限制为仅特定于以下示例策略中所述的存储桶,而不是授予对资源的所有权限

{
   "Version": "2012-10-17",
   "Statement": [
    {
        "Effect": "Allow",
        "Resource": [
            "arn:aws:logs:us-east-1:493865049436:log-group:/aws/codebuild/larvel-test1",
            "arn:aws:logs:us-east-1:493865049436:log-group:/aws/codebuild/larvel-test1:*"
        ],
        "Action": [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents"
        ]
    },
    {
        "Effect": "Allow",
        "Resource": [
            "arn:aws:s3:::codepipeline-us-east-1-*"
        ],
        "Action": [
            "s3:PutObject",
            "s3:GetObject",
            "s3:GetObjectVersion"
        ]
    },
    {
        "Effect": "Allow",
        "Resource": [
            "arn:aws:s3:::aws-codestar-us-east-1-493865049436-larvel-test-pipe/*" 
        ],
        "Action": [
            "s3:PutObject",
            "s3:GetObject",
            "s3:GetObjectVersion"
        ]
    }
]
}

【讨论】:

  • 谢谢 Yash。让我今天晚些时候试试这个,然后会回到我得到的结果:)
猜你喜欢
  • 1970-01-01
  • 2020-05-24
  • 2020-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-04
相关资源
最近更新 更多