メニュー
AWS Elastic Beanstalk
開発者ガイド (API Version 2010-12-01)

リソース許可に基づいたポリシーの例

このセクションでは、特定の Elastic Beanstalk にアクセスする Elastic Beanstalk アクションのユーザー許可をコントロールするためのユースケースと、そのユースケースをサポートするサンプルポリシーについて説明します。Elastic Beanstalk リソースのポリシーの詳細については、「カスタムユーザーポリシーの作成」を参照してください。ユーザーおよびグループへのポリシーのアタッチについては、「Using AWS Identity and Access Management」の「Managing IAM Policies」を参照してください。

このユースケースの Example Corp. は小規模コンサルタント会社で、2 つのカスタマー用にアプリケーションを開発しています。開発マネージャーであるジョンは、2 つの Elastic Beanstalk アプリケーション、app1 と app2 の開発を管理しています。ジョンは 2 つのアプリケーションを開発し、テストをいくつか実行します。また、ジョンのみがこの 2 つのアプリケーションに対して本番環境を更新できます。ジョンが app1 および app2 に対して必要とする許可を次に示します。

  • アプリケーション、アプリケーションバージョン、環境、および設定テンプレートを表示する

  • アプリケーションバージョンを作成し、ステージング環境をデプロイする

  • 本番環境を更新する

  • 環境を作成および終了する

テスターであるジルには、アプリケーション、アプリケーションバージョン、環境、および設定テンプレートの 4 つのリソースを表示するためのアクセス許可が必要です。これにより、2 つのアプリケーションを監視およびテストします。ただし、Elastic Beanstalk リソースを変更できてはいけません。

app1 の開発者であるジャックには、app1 のすべてのリソースを表示するためのアクセス許可が必要です。また、app1 のアプリケーションバージョンを作成し、ステージング環境にデプロイする必要もあります。

ジョーは、Example Corp. の AWS アカウントの管理者で、ジョン、ジル、およびジャックの IAM ユーザーを作成し、次のポリシーをそのユーザーにアタッチして、適切な許可を app1 および app2 アプリケーションに付与します。

例 1: app1 および app2 でのジョンの開発、テスト、およびデプロイアクションを許可するポリシー

確認および管理しやすいようにジョンのポリシーを 3 つに分割しました。2 つのアプリケーションでジョンが Elastic Beanstalk アクションを実行するための許可は、このすべてのポリシーによって付与されます。

最初のポリシーでは、Auto Scaling、Amazon S3、Amazon EC2、CloudWatch、Amazon SNS、Elastic Load Balancing、Amazon RDS、および AWS CloudFormation に対するアクションを指定します。Elastic Beanstalk は、環境を作成するときに、これらの追加サービスに依存して基本リソースをプロビジョニングします。

このポリシーは例です。これにより、アプリケーションと環境を管理する際に Elastic Beanstalk が使用する AWS 製品に、広範な許可セットが付与されます。たとえば、ec2:* を使用すると、IAM ユーザーが AWS アカウントで、任意の Amazon EC2 リソースに対して任意のアクションを実行できます。これらの許可は、Elastic Beanstalk で使用するリソースに限定されません。ベストプラクティスとして、職務遂行に必要な許可のみを個人に付与することをお勧めします。

{
   "Version": "2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "ec2:*",
            "ecs:*",
            "ecr:*",
            "elasticloadbalancing:*",
            "autoscaling:*",
            "cloudwatch:*",
            "s3:*",
            "sns:*",
            "cloudformation:*",
            "dynamodb:*",
            "rds:*",
            "sqs:*",
            "logs:*",
            "iam:GetPolicyVersion",
            "iam:GetRole",
            "iam:PassRole",
            "iam:ListRolePolicies",
            "iam:ListAttachedRolePolicies",
            "iam:ListInstanceProfiles",
            "iam:ListRoles",
            "iam:ListServerCertificates",
            "acm:DescribeCertificate",
            "acm:ListCertificates",
            "codebuild:CreateProject",
            "codebuild:DeleteProject",
            "codebuild:BatchGetBuilds",
            "codebuild:StartBuild"
         ],
         "Resource":"*"
      }
   ]
}

2 番目のポリシーでは、app1 および app2 リソースでのジョンによる実行を許可する Elastic Beanstalk アクションを指定します。AllCallsInApplications ステートメントでは、app1 および app2 内のすべてのリソースで実行されるすべての Elastic Beanstalk アクション("elasticbeanstalk:*")を許可します(elasticbeanstalk:CreateEnvironment など)。AllCallsOnApplications ステートメントでは、app1 および app2 アプリケーションリソース上のすべての Elastic Beanstalk アクション("elasticbeanstalk:*")を許可します(elasticbeanstalk:DescribeApplicationselasticbeanstalk:UpdateApplication など)。AllCallsOnSolutionStacks ステートメントでは、ソリューションスタックリソースのすべての Elastic Beanstalk アクション("elasticbeanstalk:*")を許可します(elasticbeanstalk:ListAvailableSolutionStacks など)。

{
   "Version": "2012-10-17",
   "Statement":[
      {
         "Sid":"AllCallsInApplications",
         "Action":[
            "elasticbeanstalk:*"
         ],
         "Effect":"Allow",
         "Resource":[
            "*"
         ],
         "Condition":{
            "StringEquals":{
               "elasticbeanstalk:InApplication":[
                  "arn:aws:elasticbeanstalk:us-west-2:123456789012:application/app1",
                  "arn:aws:elasticbeanstalk:us-west-2:123456789012:application/app2"
               ]
            }
         }
      },
      {
         "Sid":"AllCallsOnApplications",
         "Action":[
            "elasticbeanstalk:*"
         ],
         "Effect":"Allow",
         "Resource":[
            "arn:aws:elasticbeanstalk:us-west-2:123456789012:application/app1",
            "arn:aws:elasticbeanstalk:us-west-2:123456789012:application/app2"
         ]
      },
      {
         "Sid":"AllCallsOnSolutionStacks",
         "Action":[
            "elasticbeanstalk:*"
         ],
         "Effect":"Allow",
         "Resource":[
            "arn:aws:elasticbeanstalk:us-west-2::solutionstack/*"
         ]
      }
   ]
}

3 番目のポリシーは、2 番目のポリシーが Elastic Beanstalk アクションを完了するために許可が必要な Elastic Beanstalk アクションを指定します。AllNonResourceCalls ステートメントでは elasticbeanstalk:CheckDNSAvailability アクションを許可します。このアクションは、elasticbeanstalk:CreateEnvironment などのアクションを呼び出すときに必要です。また、elasticbeanstalk:CreateStorageLocation アクションも許可します。このアクションは、elasticbeanstalk:CreateApplicationelasticbeanstalk:CreateEnvironment などのアクションに必要です。

{
   "Version": "2012-10-17",
   "Statement":[
      {
         "Sid":"AllNonResourceCalls",
         "Action":[
            "elasticbeanstalk:CheckDNSAvailability",
            "elasticbeanstalk:CreateStorageLocation"
         ],
         "Effect":"Allow",
         "Resource":[
            "*"
         ]
      }
   ]
}

例 2: ジルによる app1 および app2 のテストと監視を許可するポリシー

確認および管理しやすいようにジルのポリシーを 3 つに分割しました。2 つのアプリケーションでジルが Elastic Beanstalk アクションを実行するための許可は、このすべてのポリシーによって付与されます。

最初のポリシーでは、Auto Scaling、Amazon S3、Amazon EC2、CloudWatch、Amazon SNS、Elastic Load Balancing、Amazon RDS、および AWS CloudFormation(レガシーではないコンテナタイプの場合)での Describe*List*、および Get* アクションを指定します。これにより、Elastic Beanstalk アクションが、app1 および app2 アプリケーションの基本リソースの関連情報を取得できます。

{
   "Version": "2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "ec2:Describe*",
            "elasticloadbalancing:Describe*",
            "autoscaling:Describe*",
            "cloudwatch:Describe*",
            "cloudwatch:List*",
            "cloudwatch:Get*",
            "s3:Get*",
            "s3:List*",
            "sns:Get*",
            "sns:List*",
            "rds:Describe*",
            "cloudformation:Describe*",
        	"cloudformation:Get*",
        	"cloudformation:List*",
        	"cloudformation:Validate*",
        	"cloudformation:Estimate*"
         ],
         "Resource":"*"
      }
   ]
}

2 番目のポリシーでは、app1 および app2 リソースでのジルによる実行を許可する Elastic Beanstalk アクションを指定します。AllReadCallsInApplications ステートメントでは、ジルによる Describe* アクションと環境情報アクションの呼び出しを許可します。AllReadCallsOnApplications ステートメントでは、app1 および app2 アプリケーションリソースでのジルによる DescribeApplications および DescribeEvents アクションの呼び出しを許可します。AllReadCallsOnSolutionStacks ステートメントでは、ソリューションスタックリソースに関連するアクション(ListAvailableSolutionStacksDescribeConfigurationOptions、および ValidateConfigurationSettings)の表示を許可します。

{
   "Version": "2012-10-17",
   "Statement":[
      {
         "Sid":"AllReadCallsInApplications",
         "Action":[
            "elasticbeanstalk:Describe*",
            "elasticbeanstalk:RequestEnvironmentInfo",
            "elasticbeanstalk:RetrieveEnvironmentInfo"
         ],
         "Effect":"Allow",
         "Resource":[
            "*"
         ],
         "Condition":{
            "StringEquals":{
               "elasticbeanstalk:InApplication":[
                  "arn:aws:elasticbeanstalk:us-west-2:123456789012:application/app1",
                  "arn:aws:elasticbeanstalk:us-west-2:123456789012:application/app2"
               ]
            }
         }
      },
      {
         "Sid":"AllReadCallsOnApplications",
         "Action":[
            "elasticbeanstalk:DescribeApplications",
            "elasticbeanstalk:DescribeEvents"
         ],
         "Effect":"Allow",
         "Resource":[
            "arn:aws:elasticbeanstalk:us-west-2:123456789012:application/app1",
            "arn:aws:elasticbeanstalk:us-west-2:123456789012:application/app2"
         ]
      },
      {
         "Sid":"AllReadCallsOnSolutionStacks",
         "Action":[
            "elasticbeanstalk:ListAvailableSolutionStacks",
            "elasticbeanstalk:DescribeConfigurationOptions",
            "elasticbeanstalk:ValidateConfigurationSettings"
         ],
         "Effect":"Allow",
         "Resource":[
            "arn:aws:elasticbeanstalk:us-west-2::solutionstack/*"
         ]
      }
   ]
}

3 番目のポリシーは、2 番目のポリシーが Elastic Beanstalk アクションを完了するために許可が必要な Elastic Beanstalk アクションを指定します。AllNonResourceCalls ステートメントでは elasticbeanstalk:CheckDNSAvailability アクションを許可します。このアクションは、一部の表示アクションに必要です。

{
   "Version": "2012-10-17",
   "Statement":[
      {
         "Sid":"AllNonResourceCalls",
         "Action":[
            "elasticbeanstalk:CheckDNSAvailability"
         ],
         "Effect":"Allow",
         "Resource":[
            "*"
         ]
      }
   ]
}

例 3: ジャックによる app1 へのアクセスとアプリケーションバージョンのテスト、開始、作成、およびステージング環境へのデプロイを許可するポリシー

確認および管理しやすいようにジャックのポリシーを 3 つに分割しました。app1 リソースでジャックが Elastic Beanstalk アクションを実行するための許可は、このすべてのポリシーによって付与されます。

最初のポリシーでは、Auto Scaling、Amazon S3、Amazon EC2、CloudWatch、Amazon SNS、Elastic Load Balancing、Amazon RDS、および AWS CloudFormation(レガシーではないコンテナタイプの場合)でのアクションを指定します。これにより、Elastic Beanstalk アクションが、app1 の基本リソースを表示して操作できます。サポートされているレガシーではないコンテナタイプのリストについては、「いくつかのコンテナタイプがレガシーとマークされている理由」を参照してください。

このポリシーは例です。これにより、アプリケーションと環境を管理する際に Elastic Beanstalk が使用する AWS 製品に、広範な許可セットが付与されます。たとえば、ec2:* を使用すると、IAM ユーザーが AWS アカウントで、任意の Amazon EC2 リソースに対して任意のアクションを実行できます。これらの許可は、Elastic Beanstalk で使用するリソースに限定されません。ベストプラクティスとして、職務遂行に必要な許可のみを個人に付与することをお勧めします。

{
   "Version": "2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "ec2:*",
            "elasticloadbalancing:*",
            "autoscaling:*",
            "cloudwatch:*",
            "s3:*",
            "sns:*",
            "rds:*",
            "cloudformation:*"
         ],
         "Resource":"*"
      }
   ]
}

2 番目のポリシーでは、app1 リソースでのジャックによる実行を許可する Elastic Beanstalk アクションを指定します。

{
   "Version": "2012-10-17",
   "Statement":[
      {
         "Sid":"AllReadCallsAndAllVersionCallsInApplications",
         "Action":[
            "elasticbeanstalk:Describe*",
            "elasticbeanstalk:RequestEnvironmentInfo",
            "elasticbeanstalk:RetrieveEnvironmentInfo",
            "elasticbeanstalk:CreateApplicationVersion",
            "elasticbeanstalk:DeleteApplicationVersion",
            "elasticbeanstalk:UpdateApplicationVersion"
         ],
         "Effect":"Allow",
         "Resource":[
            "*"
         ],
         "Condition":{
            "StringEquals":{
               "elasticbeanstalk:InApplication":[
                  "arn:aws:elasticbeanstalk:us-west-2:123456789012:application/app1"
               ]
            }
         }
      },
      {
         "Sid":"AllReadCallsOnApplications",
         "Action":[
            "elasticbeanstalk:DescribeApplications",
            "elasticbeanstalk:DescribeEvents"
         ],
         "Effect":"Allow",
         "Resource":[
            "arn:aws:elasticbeanstalk:us-west-2:123456789012:application/app1"
         ]
      },
      {
         "Sid":"UpdateEnvironmentInApplications",
         "Action":[
            "elasticbeanstalk:UpdateEnvironment"
         ],
         "Effect":"Allow",
         "Resource":[
            "arn:aws:elasticbeanstalk:us-west-2:123456789012:environment/app1/app1-staging*"
         ],
         "Condition":{
            "StringEquals":{
               "elasticbeanstalk:InApplication":[
                  "arn:aws:elasticbeanstalk:us-west-2:123456789012:application/app1"
               ]
            },
            "StringLike":{
               "elasticbeanstalk:FromApplicationVersion":[
                  "arn:aws:elasticbeanstalk:us-west-2:123456789012:applicationversion/app1/*"
               ]
            }
         }
      },
      {
         "Sid":"AllReadCallsOnSolutionStacks",
         "Action":[
            "elasticbeanstalk:ListAvailableSolutionStacks",
            "elasticbeanstalk:DescribeConfigurationOptions",
            "elasticbeanstalk:ValidateConfigurationSettings"
         ],
         "Effect":"Allow",
         "Resource":[
            "arn:aws:elasticbeanstalk:us-west-2::solutionstack/*"
         ]
      }
   ]
}

3 番目のポリシーは、2 番目のポリシーが Elastic Beanstalk アクションを完了するために許可が必要な Elastic Beanstalk アクションを指定します。AllNonResourceCalls ステートメントでは elasticbeanstalk:CheckDNSAvailability アクションを許可します。このアクションは、elasticbeanstalk:CreateEnvironment などのアクションを呼び出すときに必要です。また、elasticbeanstalk:CreateStorageLocation アクションも許可します。このアクションは、elasticbeanstalk:CreateEnvironment などのアクションに必要です。

{
   "Version": "2012-10-17",
   "Statement":[
      {
         "Sid":"AllNonResourceCalls",
         "Action":[
            "elasticbeanstalk:CheckDNSAvailability",
            "elasticbeanstalk:CreateStorageLocation"
         ],
         "Effect":"Allow",
         "Resource":[
            "*"
         ]
      }
   ]
}