리소스 권한에 기반한 정책 예제 - AWS Elastic Beanstalk

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

리소스 권한에 기반한 정책 예제

이 단원에서는 특정 Elastic Beanstalk 리소스에 액세스하는 Elastic Beanstalk 작업에 대한 사용자 권한을 제어하는 사용 사례를 안내합니다. 사용 사례를 지원하는 샘플 정책을 살펴봅니다. Elastic Beanstalk 리소스 정책에 대한 자세한 내용은 맞춤형 사용자 지정 정책 생성 단원을 참조하세요. 정책을 사용자 및 그룹에 연결하는 방법에 대한 자세한 내용은 AWS Identity and Access Management 사용IAM 정책 관리를 참조하세요.

이 사용 사례에서 Example Corp.는 두 고객을 위한 애플리케이션을 개발하는 소규모 컨설팅 회사입니다. John은 두 Elastic Beanstalk 애플리케이션인 app1과 app2의 개발을 감독하는 개발 관리자입니다. John은 두 애플리케이션에 대한 개발 및 테스트를 수행하며, 두 애플리케이션의 프로덕션 환경만 업데이트할 수 있습니다. 다음은 그가 app1과 app2에 필요한 권한입니다.

  • 애플리케이션, 애플리케이션 버전, 환경, 구성 템플릿 보기

  • 애플리케이션 버전을 생성하고 이를 스테이징 환경에 배포

  • 프로덕션 환경 업데이트

  • 환경 생성 및 종료

Jill은 두 애플리케이션을 모니터링하고 테스트하기 위해 애플리케이션, 애플리케이션 버전, 환경, 구성 템플릿을 볼 수 있는 권한이 필요한 테스터입니다. 하지만 이 테스터는 어떠한 Elastic Beanstalk 리소스도 변경할 수 없어야 합니다.

Jack은 app1의 모든 리소스를 볼 수 있는 권한이 필요한 app1의 개발자로, app1의 애플리케이션 버전을 생성하여 이를 스테이징 환경에 배포해야 합니다.

Judy는 예시 기업 AWS 계정의 관리자입니다. Judy는 John, Jill, Jack의 IAM 사용자를 생성했고 이들 사용자에게 app1과 app2 애플리케이션에 대한 적절한 권한을 부여하는 다음 정책을 연결합니다.

예제 1: John – app1, app2 개발 관리자

읽고 관리하기 더 쉽도록 John의 정책을 세 개의 정책으로 나누었습니다. John에게 두 애플리케이션에서 개발, 테스트 및 배포 작업을 수행하는 데 필요한 권한을 부여합니다.

첫 번째 정책은 Auto Scaling, Amazon S3, Amazon EC2, CloudWatch, Amazon SNS, Elastic Load Balancing, Amazon RDS 및 AWS CloudFormation에 대한 작업을 지정합니다. Elastic Beanstalk는 환경을 생성할 때 이러한 추가 서비스를 사용하여 기본 리소스를 프로비저닝합니다.

이 정책은 예입니다. Elastic Beanstalk가 애플리케이션과 환경을 관리하는 데 사용하는 AWS 제품에 대한 광범위한 권한을 부여합니다. 예를 들어, IAM 사용자는 ec2:*을(를) 사용하여 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":"*" } ] }

두 번째 정책은 John이 app1과 app2 리소스에 대해 수행할 수 있는 Elastic Beanstalk 작업을 지정합니다. AllCallsInApplications 문은 app1과 app2 내의 모든 리소스에 대해 수행되는 모든 Elastic Beanstalk 작업("elasticbeanstalk:*")을 허용합니다(예: elasticbeanstalk:CreateEnvironment). AllCallsOnApplications 문은 app1과 app2 애플리케이션 리소스에 대한 모든 Elastic Beanstalk 작업("elasticbeanstalk:*")을 허용합니다(예: elasticbeanstalk:DescribeApplications, elasticbeanstalk: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-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/*" ] } ] }

세 번째 정책은 두 번째 정책이 해당 Elastic Beanstalk 작업을 완료하기 위해 권한이 필요한 Elastic Beanstalk 작업을 지정합니다. AllNonResourceCalls 문은 elasticbeanstalk:CheckDNSAvailability 및 기타 작업을 호출하는 데 필요한 elasticbeanstalk:CreateEnvironment 작업을 허용합니다. 또한 elasticbeanstalk:CreateStorageLocation, elasticbeanstalk:CreateApplication 및 기타 작업에 필요한 elasticbeanstalk:CreateEnvironment 작업도 허용합니다.

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

예제 2: Jill – app1, app2 테스터

읽고 관리하기 더 쉽도록 Jill의 정책을 세 개의 정책으로 나누었습니다. Jill에게 두 애플리케이션에서 테스트 및 모니터링 작업을 수행하는 데 필요한 권한을 부여합니다.

첫 번째 정책은 Elastic Beanstalk 작업이 app1과 app2 애플리케이션의 기본 리소스에 대한 관련 정보를 검색할 수 있도록 Auto Scaling, Amazon S3, Amazon EC2, CloudWatch, Amazon SNS, Elastic Load Balancing, Amazon RDS 및 AWS CloudFormation에 대한 Describe*, List*Get* 작업을 지정합니다(레거시가 아닌 컨테이너 유형의 경우).

{ "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":"*" } ] }

두 번째 정책은 Jill이 app1과 app2 리소스에 대해 수행할 수 있는 Elastic Beanstalk 작업을 지정합니다. AllReadCallsInApplications 문은 그녀가 Describe* 작업 및 환경 정보 작업을 호출할 수 있도록 허용합니다. AllReadCallsOnApplications 문은 그녀가 app1과 app2 애플리케이션 리소스에 대해 DescribeApplicationsDescribeEvents 작업을 호출할 수 있도록 허용합니다. AllReadCallsOnSolutionStacks 문은 솔루션 스택 리소스(ListAvailableSolutionStacks, DescribeConfigurationOptions, 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/*" ] } ] }

세 번째 정책은 두 번째 정책이 해당 Elastic Beanstalk 작업을 완료하기 위해 권한이 필요한 Elastic Beanstalk 작업을 지정합니다. AllNonResourceCalls 문은 일부 보기 작업에 필요한 elasticbeanstalk:CheckDNSAvailability 작업을 허용합니다.

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

예제 3: Jack – app1 개발자

읽고 관리하기 더 쉽도록 Jack의 정책을 세 개의 정책으로 나누었습니다. Jack에게 app1 리소스에 대한 테스트, 모니터링 및 배포 작업을 수행하는 데 필요한 권한을 부여합니다.

첫 번째 정책은 Elastic Beanstalk 작업이 app1의 기본 리소스를 보고 작업할 수 있도록 Auto Scaling, Amazon S3, Amazon EC2, CloudWatch, Amazon SNS, Elastic Load Balancing, Amazon RDS 및 AWS CloudFormation에 대한 작업을 지정합니다(레거시가 아닌 컨테이너 유형의 경우). 레거시가 아닌 지원 컨테이너 유형 목록은 일부 플랫폼 버전이 레거시로 표시되는 이유는 무엇입니까? 단원을 참조하십시오.

이 정책은 예입니다. Elastic Beanstalk가 애플리케이션과 환경을 관리하는 데 사용하는 AWS 제품에 대한 광범위한 권한을 부여합니다. 예를 들어, IAM 사용자는 ec2:*을(를) 사용하여 AWS 계정의 모든 Amazon EC2 리소스에 대해 모든 작업을 수행할 수 있습니다. 이 권한은 Elastic Beanstalk에서 사용하는 리소스에 국한되지 않습니다. 모범 사례대로 하려면, 개별 사용자에게 각자의 업무를 수행하는 데 필요한 권한만 부여해야 합니다.

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

두 번째 정책은 Jack이 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-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/*" ] } ] }

세 번째 정책은 두 번째 정책이 해당 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":[ "*" ] } ] }