2015-10-09 38 views
7

Próbowałem dowiedzieć się, jakie uprawnienia muszę ustawić, aby pozwolić programistom na wdrażanie eb, logi eb i eb ssh w określonym środowisku EB. Chcę ustawić tak, aby wszyscy programiści mogli wdrażać i debugować nasze środowisko programistyczne, ale tylko jeden może wdrożyć i debugować wzorzec.Elastic Beanstalk Uprawnienia IAM programisty

Chcę go również zablokować tak, aby nie mógł wpływać na inne instancje EC2, instancje RDS, segmenty S3, moduły równoważenia obciążenia i tak dalej.

Czy ktoś zdołał opracować dla tego zasadę IAM (lub dwa ...)?

Odpowiedz

7

Elastic Beanstalk komponuje wiele usług AWS. Trzeba dać wszystkie specyficzne uprawnienia do zasobów AWS te są wykorzystywane przez Elastic Beanstalk do odczytu i aktualizacji środowiska, w tym:

  • CloudFormation
  • EC2
  • Auto Scaling Grupa
  • Elastic równoważenia obciążenia
  • CloudWatch
  • S3
  • SNS
  • RDS
  • SQS
  • Elastic Beanstalk

To wszystko wymaga polityka, aby umożliwić IAM dostępu użytkownika, aktualizacja, wdrażać i ssh do Elastic Beanstalk:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Sid": "ElasticBeanstalkReadOnlyAccess", 
     "Effect": "Allow", 
     "Action": [ 
     "elasticbeanstalk:Check*", 
     "elasticbeanstalk:Describe*", 
     "elasticbeanstalk:List*", 
     "elasticbeanstalk:RequestEnvironmentInfo", 
     "elasticbeanstalk:RetrieveEnvironmentInfo", 
     "ec2:Describe*", 
     "elasticloadbalancing:Describe*", 
     "autoscaling:Describe*", 
     "cloudwatch:Describe*", 
     "cloudwatch:List*", 
     "cloudwatch:Get*", 
     "s3:Get*", 
     "s3:List*", 
     "sns:Get*", 
     "sns:List*", 
     "cloudformation:Describe*", 
     "cloudformation:Get*", 
     "cloudformation:List*", 
     "cloudformation:Validate*", 
     "cloudformation:Estimate*", 
     "rds:Describe*", 
     "sqs:Get*", 
     "sqs:List*" 
     ], 
     "Resource": "*" 
    }, 
    { 
     "Sid": "ElasticBeanstalkDeployAccess", 
     "Effect": "Allow", 
     "Action": [ 
     "autoscaling:SuspendProcesses", 
     "autoscaling:ResumeProcesses", 
     "autoscaling:UpdateAutoScalingGroup", 
     "cloudformation:UpdateStack", 
     "ec2:AuthorizeSecurityGroupIngress", 
     "ec2:RevokeSecurityGroupIngress", 
     "elasticloadbalancing:RegisterInstancesWithLoadBalancer", 
     "elasticbeanstalk:CreateStorageLocation", 
     "elasticbeanstalk:CreateApplicationVersion", 
     "elasticbeanstalk:CreateConfigurationTemplate", 
     "elasticbeanstalk:UpdateApplicationVersion", 
     "elasticbeanstalk:UpdateConfigurationTemplate", 
     "elasticbeanstalk:UpdateEnvironment", 
     "elasticbeanstalk:ValidateConfigurationSettings", 
     "s3:PutObject", 
     "s3:DeleteObject", 
     "s3:PutObjectAcl" 
     ], 
     "Resource": [ 
     "*" 
     ] 
    } 
    ] 
} 

Powyższa polityka jest umożliwienie użytkownikom IAM do tylko do odczytu i tylko do wdrażania tylko dostęp do dowolnej elastycznej szypułki i powiązanych usług.

Jeśli chcesz ograniczyć dostęp użytkowników do konkretnych zasobów AWS, musisz określić ARN i warunki samodzielnie. Na przykład:

  • Ogranicz zasoby S3 do czegoś podobnego do arn:aws:s3:::elasticbeanstalk-us-east-1-123456789012/* (Wiadro S3 z Fasolą Szparagową).
  • EC2 z tagiem zasobów jako warunkowym (np .: elasticbeanstalk:environment-name).
  • Możesz również określić region AWS w ARN.
+0

Dzięki. Udało mi się to zrozumieć za pomocą różnych aplikacji. Cóż za połowę moich punktów za nagrodę! – Gustaf

0

Oto jak z niego korzystać. To nie było doskonałe, ale masz kilka pomysłów na to, jak możesz z niego korzystać. Jest oczywiście więcej do zawężenia tego, ale w tej chwili jest to dla mnie wystarczające.

Pierwsza sekcja, z której naprawdę nie mogą wyrządzić żadnej szkody, pozwoliła im na razie mieć pełny dostęp do nich. (Powinienem zrobić S3 bardziej ziarnisto)

Potrzebowałem elastycznego ładowania: DeregisterInstancesFromLoadBalancer, więc dodałem, że ten zespół może go używać tylko w Europie. Teraz jest dobrze, bo są tam tylko.

Trzecia i czwarta sekcja dotyczy moich dwóch aplikacji Elastic Beanstalk, do których powinny mieć dostęp.

{ 
    "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*", 
       "cloudformation:Describe*", 
       "cloudformation:Get*", 
       "cloudformation:List*", 
       "cloudformation:Validate*", 
       "cloudformation:Estimate*", 
       "rds:Describe*", 
       "elasticbeanstalk:CreateStorageLocation", 
       "sqs:Get*", 
       "sqs:List*", 
       "autoscaling:SuspendProcesses", 
       "autoscaling:ResumeProcesses", 
       "autoscaling:UpdateAutoScalingGroup", 
       "autoscaling:DescribeAutoScalingGroups", 
       "cloudformation:UpdateStack", 
       "cloudformation:DescribeStacks", 
       "ec2:AuthorizeSecurityGroupIngress", 
       "ec2:RevokeSecurityGroupIngress", 
       "s3:PutObject", 
       "s3:DeleteObject", 
       "s3:PutObjectAcl" 
      ], 
      "Resource": [ 
       "*" 
      ] 
     }, 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "elasticloadbalancing:RegisterInstancesWithLoadBalancer", 
       "elasticloadbalancing:DeregisterInstancesFromLoadBalancer" 
      ], 
      "Resource": [ 
       "arn:aws:elasticloadbalancing:eu-west-1:12345678910:loadbalancer/*" 
      ] 
     }, 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "elasticbeanstalk:Check*", 
       "elasticbeanstalk:Describe*", 
       "elasticbeanstalk:List*", 
       "elasticbeanstalk:RequestEnvironmentInfo", 
       "elasticbeanstalk:RetrieveEnvironmentInfo", 
       "elasticbeanstalk:CreateApplicationVersion", 
       "elasticbeanstalk:CreateConfigurationTemplate", 
       "elasticbeanstalk:UpdateApplicationVersion", 
       "elasticbeanstalk:UpdateConfigurationTemplate", 
       "elasticbeanstalk:UpdateEnvironment", 
       "elasticbeanstalk:DescribeEnvironmentResources", 
       "elasticbeanstalk:ValidateConfigurationSettings" 
      ], 
      "Resource": [ 
       "*" 
      ], 
      "Condition": { 
       "StringEquals": { 
        "elasticbeanstalk:InApplication": [ 
         "arn:aws:elasticbeanstalk:eu-west-1:12345678910:application/My App" 
        ] 
       } 
      } 
     }, 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "elasticbeanstalk:Check*", 
       "elasticbeanstalk:Describe*", 
       "elasticbeanstalk:List*", 
       "elasticbeanstalk:RequestEnvironmentInfo", 
       "elasticbeanstalk:RetrieveEnvironmentInfo", 
       "elasticbeanstalk:CreateApplicationVersion", 
       "elasticbeanstalk:CreateConfigurationTemplate", 
       "elasticbeanstalk:UpdateApplicationVersion", 
       "elasticbeanstalk:UpdateConfigurationTemplate", 
       "elasticbeanstalk:UpdateEnvironment", 
       "elasticbeanstalk:DescribeEnvironmentResources", 
       "elasticbeanstalk:ValidateConfigurationSettings" 
      ], 
      "Resource": [ 
       "*" 
      ], 
      "Condition": { 
       "StringEquals": { 
        "elasticbeanstalk:InApplication": [ 
         "arn:aws:elasticbeanstalk:eu-west-1:12345678910:application/My Second App" 
        ] 
       } 
      } 
     } 
    ] 
}