【问题标题】:AWS Elastic Beanstalk - protecting the production env from accidental deploymentsAWS Elastic Beanstalk - 保护生产环境免受意外部署
【发布时间】:2019-08-24 21:10:06
【问题描述】:

我正在寻找有关管理 AWS Elastic Beanstalk 应用程序的最佳实践的建议。

我有一个具有 2 个不同环境的应用程序,我将其称为 proddev。我想允许所有协作者部署到 dev env 并将 prod 部署到仅限一个用户。

最好的方法是什么?

【问题讨论】:

    标签: amazon-web-services web-deployment amazon-elastic-beanstalk


    【解决方案1】:

    ElasticBeanstalk 与 IAM 紧密集成。

    允许或拒绝用户对特定资源的特定操作可以通过将正确的策略附加到所承担的角色来实现。

    The ElasticBeanstalk docs 有一个特定部分解释 EB 中的 IAM 权限,页面上的最后一个示例实际上就是您要查找的内容。根据您的需要修改显示的策略,并将其附加到您希望拒绝访问生产环境的用户或用户组。

    您的政策将如下所示:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Deny",
          "Action": [
            "elasticbeanstalk:CreateApplication",
            "elasticbeanstalk:DeleteApplication"
          ],
          "Resource": [
            "*"
          ]
        },
        {
          "Effect": "Deny",
          "Action": [
            "elasticbeanstalk:CreateApplicationVersion",
            "elasticbeanstalk:CreateConfigurationTemplate",
            "elasticbeanstalk:CreateEnvironment",
            "elasticbeanstalk:DeleteApplicationVersion",
            "elasticbeanstalk:DeleteConfigurationTemplate",
            "elasticbeanstalk:DeleteEnvironmentConfiguration",
            "elasticbeanstalk:DescribeApplicationVersions",
            "elasticbeanstalk:DescribeConfigurationOptions",
            "elasticbeanstalk:DescribeConfigurationSettings",
            "elasticbeanstalk:DescribeEnvironmentResources",
            "elasticbeanstalk:DescribeEnvironments",
            "elasticbeanstalk:DescribeEvents",
            "elasticbeanstalk:DeleteEnvironmentConfiguration",
            "elasticbeanstalk:RebuildEnvironment",
            "elasticbeanstalk:RequestEnvironmentInfo",
            "elasticbeanstalk:RestartAppServer",
            "elasticbeanstalk:RetrieveEnvironmentInfo",
            "elasticbeanstalk:SwapEnvironmentCNAMEs",
            "elasticbeanstalk:TerminateEnvironment",
            "elasticbeanstalk:UpdateApplicationVersion",
            "elasticbeanstalk:UpdateConfigurationTemplate",
            "elasticbeanstalk:UpdateEnvironment",
            "elasticbeanstalk:RetrieveEnvironmentInfo",
            "elasticbeanstalk:ValidateConfigurationSettings"
          ],
          "Resource": [
            "arn:aws:elasticbeanstalk:us-east-1:123456789012:environment/Test/Test-env-prod"
          ]
        }
      ]
    }
    

    上述政策将阻止任何附加此政策的用户创建或删除任何应用程序,并进一步拒绝用户完成对所列资源 ARN 的任何所列操作;名为Test 的应用程序和名为Test-env-prod 的环境。

    要限制对特定环境的访问,您可以使用此策略并修改 ARN 的 region (us-east-1)、account-number (123456789012)、app-name(测试)和 environment-name(测试-env-prod),以满足您的特定需求。

    您可以找到 ElasticBeanstalk 资源 ARN 格式列表here

    【讨论】:

    • 感谢您的回答。我遇到过这个文档,我正在寻找一种方法来限制对特定环境的访问,但该页面仅解释了对应用程序级别的访问限制。您是否知道限制对应用程序中 env 的访问的方法,或者我应该只使用开发环境创建一个不同的应用程序?
    • 我已经更新了我的答案。您只需将正确的 ARN 应用于策略中的资源。我给出了一个我测试过的示例 ARN 格式;如果您修改它以使您的应用程序生产环境 ARN 用户将无权访问该环境中的任何这些操作;如果他们正在查看控制台,他们甚至不会看到它。
    猜你喜欢
    • 2018-06-01
    • 2015-09-20
    • 2015-10-23
    • 2016-07-18
    • 1970-01-01
    • 2015-07-05
    • 2020-11-23
    • 2020-08-02
    • 2014-12-25
    相关资源
    最近更新 更多