

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 根據資源許可的範例政策
<a name="AWSHowTo.iam.example.resource"></a>

本節將逐步介紹一個使用案例，此案例針對存取特定 Elastic Beanstalk 資源的 Elastic Beanstalk 動作，控制使用者的許可。我們將逐步介紹支援該使用案例的範例政策。如需 Elastic Beanstalk 資源政策的詳細資訊，請參閱[建立自訂使用者政策](AWSHowTo.iam.managed-policies.md#AWSHowTo.iam.policies)。如需將政策連接到使用者和群組的相關資訊，請參閱《使用 AWS Identity and Access Management》**中的[管理 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingPolicies.html)。

在我們的使用案例中，Example Corp. (範例公司) 是一家小型的顧問公司，針對兩種不同的客戶開發應用程式。John 是開發經理，負責監督兩種 Elastic Beanstalk 應用程式 (應用程式 1 和應用程式 2) 的開發。John 負責開發和針對兩種應用程式進行一些測試，而且只有他可以更新兩個應用程式的正式生產環境。下列是他所需的應用程式 1 和應用程式 2 的許可：
+ 檢視應用程式、應用程式版本、環境和組態範本
+ 建立應用程式版本，並將這些版本部署到預備環境
+ 更新正式生產環境
+ 建立和終止環境

Jill 是一位測試人員，需要存取許可來檢視下列資源，以監控和測試兩種應用程式：應用程式、應用程式版本、環境和組態範本。但是，她不應具有變更任何 Elastic Beanstalk 資源的許可。

Jack 是應用程式 1 的開發人員，需要存取許可來檢視應用程式 1 的所有資源，也需要建立應用程式 1 的應用程式版本，並將這些版本部署到預備環境。

Judy 是 Example Corp. AWS 帳戶的管理員。 她為 John、Jill 和 Jack 建立了 IAM 使用者，並將下列政策連接到這些使用者，以授予適當的許可給應用程式 1 和應用程式 2。

## 範例 1：John - 應用程式 1、應用程式 2 的開發經理
<a name="AWSHowTo.iam.policies.john"></a>

我們已將 John 的政策細分為三項不同的政策，讓這些政策更易於閱讀和管理。這些政策共同授予了 John 所需的許可，使其能對這兩個應用程式執行開發、測試和部署動作。

第一個政策指定 Auto Scaling、Amazon S3、Amazon EC2、CloudWatch、Amazon SNS、Elastic Load Balancing、Amazon RDS 和 CloudFormation的動作。Elastic Beanstalk 就是靠著這些額外服務在建立環境時佈建基礎資源。

請注意，本政策為範例。它為 Elastic Beanstalk 用來管理應用程式和環境 AWS 的產品提供廣泛的許可。例如， `ec2:*` 允許 IAM 使用者對 AWS 帳戶中的任何 Amazon EC2 資源執行任何動作。這些許可不限於您搭配 Elastic Beanstalk 使用的資源。以最佳實務而言，您應僅授予個人執行其職責所需的許可。

------
#### [ JSON ]

****  

```
{
   "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:ListRolePolicies",
   "iam:ListAttachedRolePolicies",
   "iam:ListInstanceProfiles",
   "iam:ListRoles",
   "iam:ListServerCertificates",
   "acm:DescribeCertificate",
   "acm:ListCertificates",
   "codebuild:CreateProject",
   "codebuild:DeleteProject",
   "codebuild:BatchGetBuilds",
   "codebuild:StartBuild"
   ],
   "Resource": "*"
   },
   {
   "Effect": "Allow",
   "Action": [
   "iam:PassRole"
   ],
   "Resource": "arn:aws:iam::111122223333:role/MyRole"
   }
   ]
   }
```

------

第二個政策指定針對應用程式 1 和應用程式 2 的資源，John 能夠執行的 Elastic Beanstalk 動作。`AllCallsInApplications` 陳述式針對應用程式 1 和應用程式 2 內的所有資源 (例如 `elasticbeanstalk:CreateEnvironment`)，允許所有能夠執行的 Elastic Beanstalk 動作 (`"elasticbeanstalk:*"`)。`AllCallsOnApplications` 陳述式針對應用程式 1 和應用程式 2 的資源 (例如 `elasticbeanstalk:DescribeApplications`、`elasticbeanstalk:UpdateApplication` 等)，允許所有能夠執行的 Elastic Beanstalk 動作 (`"elasticbeanstalk:*"`)。`AllCallsOnSolutionStacks` 陳述式針對解決方案堆疊的資源 (例如 `elasticbeanstalk:ListAvailableSolutionStacks`)，允許所有能夠執行的 Elastic Beanstalk 動作 (`"elasticbeanstalk:*"`)。

------
#### [ JSON ]

****  

```
{
   "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 動作。`AllNonResourceCalls` 陳述式允許了 `elasticbeanstalk:CheckDNSAvailability` 動作的執行，這項動作是呼叫 `elasticbeanstalk:CreateEnvironment` 和其他動作所必需。此陳述式也允許了 `elasticbeanstalk:CreateStorageLocation` 動作的執行，這項動作是 `elasticbeanstalk:CreateApplication`、`elasticbeanstalk:CreateEnvironment` 和其他動作所必需。

------
#### [ JSON ]

****  

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

------

## 範例 2：Jill - 應用程式 1、應用程式 2 的測試人員
<a name="AWSHowTo.iam.policies.jill"></a>

我們已將 Jill 的政策細分為三項不同的政策，讓這些政策更易於閱讀和管理。這些政策共同授予了 Jill 所需的許可，使其能對兩種應用程式執行測試和監控動作。

第一個政策會指定 Auto Scaling、Amazon S3`Describe*``List*`、Amazon EC2、CloudWatch、Amazon SNS、Elastic Load Balancing、Amazon RDS 和 CloudFormation （適用於非舊版容器類型） `Get*`上的 、 和 動作，以便 Elastic Beanstalk 動作能夠擷取應用程式 1 和應用程式 2 基礎資源的相關資訊。

------
#### [ JSON ]

****  

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

------

第二個政策指定針對應用程式 1 與應用程式 2 的資源，Jill 能夠執行的 Elastic Beanstalk 動作。`AllReadCallsInApplications` 陳述式允許 Jill 呼叫 `Describe*` 動作和環境資訊動作。`AllReadCallsOnApplications` 陳述式允許 Jill 針對應用程式 1 與應用程式 2 的應用程式資源，呼叫 `DescribeApplications` 與 `DescribeEvents` 動作。`AllReadCallsOnSolutionStacks` 允許針對解決方案堆疊資源 (`ListAvailableSolutionStacks`、`DescribeConfigurationOptions` 和 `ValidateConfigurationSettings`)，執行相關的檢視動作。

------
#### [ JSON ]

****  

```
{
   "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 動作。`AllNonResourceCalls` 陳述式允許了 `elasticbeanstalk:CheckDNSAvailability` 動作的執行，這項動作是呼叫某些檢視動作所必需。

------
#### [ JSON ]

****  

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

------

## 範例 3：Jack - 應用程式 1 的開發人員
<a name="AWSHowTo.iam.policies.jack"></a>

我們已將 Jack 的政策細分為三項不同的政策，讓這些政策更易於閱讀和管理。這些政策共同授予了 Jack 所需的許可，使其能對 應用程式 1 資源執行開發、測試和部署動作。

第一個政策指定 Auto Scaling、Amazon S3、Amazon EC2、CloudWatch、Amazon SNS、Elastic Load Balancing、Amazon RDS 和 CloudFormation （適用於非舊版容器類型） 上的動作，以便 Elastic Beanstalk 動作能夠檢視和使用應用程式 1 的基礎資源。如需支援的非舊式容器類型的清單，請參閱 [為何部分平台版本標記為舊版？](using-features.migration.md#using-features.migration.why)

請注意，本政策為範例。它為 Elastic Beanstalk 用來管理應用程式和環境 AWS 的產品提供廣泛的許可。例如， `ec2:*` 允許 IAM 使用者對 AWS 帳戶中的任何 Amazon EC2 資源執行任何動作。這些許可不限於您搭配 Elastic Beanstalk 使用的資源。以最佳實務而言，您應僅授予個人執行其職責所需的許可。

------
#### [ JSON ]

****  

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

------

第二個政策指定針對應用程式 1 的資源，Jack 能夠執行的 Elastic Beanstalk 動作。

------
#### [ JSON ]

****  

```
{
   "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"
               ]
            },
            "ArnLike":{
               "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 動作。`AllNonResourceCalls` 陳述式允許了 `elasticbeanstalk:CheckDNSAvailability` 動作的執行，這項動作是呼叫 `elasticbeanstalk:CreateEnvironment` 和其他動作所必需。此陳述式也允許了 `elasticbeanstalk:CreateStorageLocation` 動作的執行，這項動作是 `elasticbeanstalk:CreateEnvironment` 和其他動作所必需。

------
#### [ JSON ]

****  

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

------