Elastic Beanstalk のユーザーやアプリケーションの IAM アクセス許可を制限する方法を教えてください。

最終更新日: 2020 年 5 月 18 日

新しい Elastic Beanstalk 環境を作成するにあたり、AWS Elastic Beanstalk のユーザーやアプリケーションの AWS Identity and Access Management (IAM) アクセス許可を制限したいと考えています。

簡単な説明

IAM ポリシーを使用して、IAM ユーザーまたはロールのアクセス許可を制限できます。このポリシーでは、1 つの環境またはアプリケーションへのアクセスを制限できます。

以下のいずれかのセクションの手順を完了してください。

  • IAM アクセスを 1 つの環境またはアプリケーションのみに制限する
  • IAM アクセスを Elastic Beanstalk サービスのみに制限する

注意: IAM ポリシーを組み合わせて 1 つのアプリケーションへのアクセスを制限する方法の例については、「管理ポリシーに基づくポリシーの例」または「リソースに対するアクセス許可に基づいたポリシーの例」を参照してください。

解決方法

IAM アクセスを 1 つの環境またはアプリケーションのみに制限する

Elastic Beanstalk 環境またはアプリケーションへのアクセスを制限するIAM ポリシーを作成します。

以下の点を考慮してください。

  • Elastic Beanstalk では、アプリケーションの構造がコンポーネント (環境、バージョン、環境設定など) のコレクションであるため、アプリケーションへのアクセス許可を直接制限することはできません。ただし、アクション、リソース、条件キーを使用して、より詳細なレベルでアクセス許可を制限できます。
  • IAM ポリシーは、基盤となるリソースを保護する方法としては効果的ではありません。たとえば、適切な IAM ポリシーを使用して、ユーザーが Elastic Beanstalk API を操作する方法を制限できます。しかし、Elastic Beanstalk アクセス許可を持つユーザーが、Elastic Beanstalk とは無関係の他の AWS サービスでリソースを作成できないようにすることはできません。
  • Elastic Beanstalk が統合するリソースの中には、リソースレベルのアクセス許可をサポートしていないものがあります。詳細については、「IAM と連携する AWS のサービス」をご参照ください。

以下に示すのは、2 つの Elastic Beanstalk アプリケーション (App1App2) へのフルアクセスを許可する IAM ポリシーの例です。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "elasticbeanstalk:UpdateApplicationVersion",
                "elasticbeanstalk:CreateApplicationVersion",
                "elasticbeanstalk:DeleteApplicationVersion"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "elasticbeanstalk:InApplication": ["arn:aws:elasticbeanstalk:us-east-2:123456789012:application/My App1", "arn:aws:elasticbeanstalk:us-east-2:123456789012:application/My App2"]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "elasticbeanstalk:DescribeAccountAttributes",
                "elasticbeanstalk:AbortEnvironmentUpdate",
                "elasticbeanstalk:TerminateEnvironment",
                "rds:*",
                "elasticbeanstalk:ValidateConfigurationSettings",
                "elasticbeanstalk:CheckDNSAvailability",
                "autoscaling:*",
                "elasticbeanstalk:RequestEnvironmentInfo",
                "elasticbeanstalk:RebuildEnvironment",
                "elasticbeanstalk:DescribeInstancesHealth",
                "elasticbeanstalk:DescribeEnvironmentHealth",
                "sns:*",
                "elasticbeanstalk:RestartAppServer",
                "s3:*",
                "cloudformation:*",
                "elasticloadbalancing:*",
                "elasticbeanstalk:CreateStorageLocation",
                "elasticbeanstalk:DescribeEnvironmentManagedActions",
                "elasticbeanstalk:SwapEnvironmentCNAMEs",
                "elasticbeanstalk:DescribeConfigurationOptions",
                "elasticbeanstalk:ApplyEnvironmentManagedAction",
                "cloudwatch:*",
                "elasticbeanstalk:CreateEnvironment",
                "elasticbeanstalk:List*",
                "elasticbeanstalk:DeleteEnvironmentConfiguration",
                "elasticbeanstalk:UpdateEnvironment",
                "ec2:*",
                "elasticbeanstalk:RetrieveEnvironmentInfo",
                "elasticbeanstalk:DescribeConfigurationSettings",
                "sqs:*",
                "dynamodb:CreateTable",
                "dynamodb:DescribeTable"
            ],
            "Resource": "*"
        },
        {
           "Effect": "Allow",
           "Action": [
               "iam:*"
           ],
           "Resource": [
               "arn:aws:iam::123456789012:role/aws-elasticbeanstalk-ec2-role",
               "arn:aws:iam::123456789012:role/aws-elasticbeanstalk-service-role",
               "arn:aws:iam::123456789012:instance-profile/aws-elasticbeanstalk-ec2-role"
           ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "elasticbeanstalk:DescribeEvents",
                "elasticbeanstalk:DescribeApplications",
                "elasticbeanstalk:AddTags",
                "elasticbeanstalk:ListPlatformVersions"
            ],
            "Resource": ["arn:aws:elasticbeanstalk:us-east-2:123456789012:application/My App1", "arn:aws:elasticbeanstalk:us-east-2:123456789012:application/My App2"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "elasticbeanstalk:AddTags",
                "elasticbeanstalk:Describe*"
            ],
            "Resource": [
                "arn:aws:elasticbeanstalk:*::platform/*",
                "arn:aws:elasticbeanstalk:*:*:environment/*/*",
                "arn:aws:elasticbeanstalk:*:*:application/*",
                "arn:aws:elasticbeanstalk:*::solutionstack/*",
                "arn:aws:elasticbeanstalk:*:*:applicationversion/*/*",
                "arn:aws:elasticbeanstalk:*:*:configurationtemplate/*/*"
            ],
            "Condition": {
                "StringEquals": {
                    "elasticbeanstalk:InApplication": ["arn:aws:elasticbeanstalk:us-east-2:123456789012:application/My App1", "arn:aws:elasticbeanstalk:us-east-2:123456789012:application/My App2"]
                }
            }
        }
    ]
}

重要: デフォルトの Elastic Beanstalk サービスロールとインスタンスプロファイルを使用していない場合は、独自のカスタムサービスロールとインスタンスプロファイルを使用して前述の IAM ポリシーを更新してください。

Elastic Beanstalk アプリケーションへのアクセスを制限する方法の詳細については、「Elastic Beanstalk アクションのリソースと条件」を参照してください。

IAM アクセスを Elastic Beanstalk サービスのみに制限する

重要: 次の手順は、新しい Elastic Beanstalk 環境またはアプリケーションにのみ適用されます。

  1. Elastic Beanstalk 環境またはアプリケーション用に、別の AWS アカウントを作成します。
  2. AWS Organizations を使用して、別のアカウントをメインの AWS アカウントに接続します。

この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合