リソースに対するアクセス許可に基づいたポリシーの例 - AWS Elastic Beanstalk

リソースに対するアクセス許可に基づいたポリシーの例

このセクションでは、特定の Elastic Beanstalk リソースにアクセスする Elastic Beanstalk アクションに対するユーザーのアクセス許可を制御するユースケースについて説明します。そのユースケースをサポートするサンプルポリシーについて説明します。Elastic Beanstalk リソースのポリシーの詳細については、「カスタムユーザーポリシーの作成」を参照してください。ユーザーおよびグループにポリシーをアタッチする方法については、AWS Identity and Access Management の使用の「IAM ポリシーの管理」を参照してください。

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

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

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

  • 本番環境を更新する

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

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

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

Example Corp. の AWS アカウント管理者である Judy は、John、Jill、および Jack の IAM ユーザーを作成し、次のポリシーをこれらのユーザーにアタッチして、適切なアクセス許可を app1 および app2 アプリケーションに付与します。

例 1: John - app1、app2 の開発マネージャー

確認および管理しやすいように John のポリシーを 3 つに分割しました。2 つのアプリケーションで John が開発、テスト、デプロイの各アクションを実行するための許可は、このすべてのポリシーによって付与されます。

最初のポリシーは、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 リソースに対する John による実行を許可する Elastic Beanstalk アクションを指定します。AllCallsInApplications ステートメントでは、app1 および app2 内のすべてのリソース ("elasticbeanstalk:*" など) に対して実行されるすべての Elastic Beanstalk アクション (elasticbeanstalk:CreateEnvironment など) を許可します。AllCallsOnApplications ステートメントでは、app1 および app2 アプリケーションのリソース ("elasticbeanstalk:*"elasticbeanstalk:DescribeApplications など) に対するすべての Elastic Beanstalk アクション (elasticbeanstalk:UpdateApplication など) を許可します。AllCallsOnSolutionStacks ステートメントでは、ソリューションスタックリソース ("elasticbeanstalk:*" など) に対するすべての Elastic Beanstalk アクション (elasticbeanstalk:ListAvailableSolutionStacks など) を許可します。

{ "Version": "2012-10-17", "Statement":[ { "Sid":"AllCallsInApplications", "Action":[ "elasticbeanstalk:*" ], "Effect":"Allow", "Resource":[ "*" ], "Condition":{ "StringEquals":{ "elasticbeanstalk:InApplication":[ "arn:aws:elasticbeanstalk:us-east-2:123456789012:application/app1", "arn:aws:elasticbeanstalk:us-east-2:123456789012:application/app2" ] } } }, { "Sid":"AllCallsOnApplications", "Action":[ "elasticbeanstalk:*" ], "Effect":"Allow", "Resource":[ "arn:aws:elasticbeanstalk:us-east-2:123456789012:application/app1", "arn:aws:elasticbeanstalk:us-east-2:123456789012:application/app2" ] }, { "Sid":"AllCallsOnSolutionStacks", "Action":[ "elasticbeanstalk:*" ], "Effect":"Allow", "Resource":[ "arn:aws:elasticbeanstalk:us-east-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: Jill - app1、app2 のテスター

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

最初のポリシーでは、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 リソースに対する Jill による実行を許可する Elastic Beanstalk アクションを指定します。AllReadCallsInApplications ステートメントでは、Jill による Describe* アクションと環境情報アクションの呼び出しを許可します。AllReadCallsOnApplications ステートメントでは、Jill に 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-east-2:123456789012:application/app1", "arn:aws:elasticbeanstalk:us-east-2:123456789012:application/app2" ] } } }, { "Sid":"AllReadCallsOnApplications", "Action":[ "elasticbeanstalk:DescribeApplications", "elasticbeanstalk:DescribeEvents" ], "Effect":"Allow", "Resource":[ "arn:aws:elasticbeanstalk:us-east-2:123456789012:application/app1", "arn:aws:elasticbeanstalk:us-east-2:123456789012:application/app2" ] }, { "Sid":"AllReadCallsOnSolutionStacks", "Action":[ "elasticbeanstalk:ListAvailableSolutionStacks", "elasticbeanstalk:DescribeConfigurationOptions", "elasticbeanstalk:ValidateConfigurationSettings" ], "Effect":"Allow", "Resource":[ "arn:aws:elasticbeanstalk:us-east-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: Jack - app1 の開発者

確認および管理しやすいように Jack のポリシーを 3 つに分割しました。app1 リソースで Jack が、テスト、モニタリング、デプロイの各アクションを実行するための許可は、このすべてのポリシーによって付与されます。

最初のポリシーは、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 リソースに対する Jack による実行を許可する 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-east-2:123456789012:application/app1" ] } } }, { "Sid":"AllReadCallsOnApplications", "Action":[ "elasticbeanstalk:DescribeApplications", "elasticbeanstalk:DescribeEvents" ], "Effect":"Allow", "Resource":[ "arn:aws:elasticbeanstalk:us-east-2:123456789012:application/app1" ] }, { "Sid":"UpdateEnvironmentInApplications", "Action":[ "elasticbeanstalk:UpdateEnvironment" ], "Effect":"Allow", "Resource":[ "arn:aws:elasticbeanstalk:us-east-2:123456789012:environment/app1/app1-staging*" ], "Condition":{ "StringEquals":{ "elasticbeanstalk:InApplication":[ "arn:aws:elasticbeanstalk:us-east-2:123456789012:application/app1" ] }, "StringLike":{ "elasticbeanstalk:FromApplicationVersion":[ "arn:aws:elasticbeanstalk:us-east-2:123456789012:applicationversion/app1/*" ] } } }, { "Sid":"AllReadCallsOnSolutionStacks", "Action":[ "elasticbeanstalk:ListAvailableSolutionStacks", "elasticbeanstalk:DescribeConfigurationOptions", "elasticbeanstalk:ValidateConfigurationSettings" ], "Effect":"Allow", "Resource":[ "arn:aws:elasticbeanstalk:us-east-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":[ "*" ] } ] }