

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# AWS Batch IAM 策略、角色和权限
<a name="IAM_policies"></a>

默认情况下，用户无权创建或修改 AWS Batch 资源，也无权使用 AWS Batch API、 AWS Batch 控制台或 AWS CLI。要允许用户执行这些操作，请创建 IAM policy，授予用户使用特定资源和 API 操作的权限。然后，将这些策略附加到需要这些权限的用户或组。

在将策略附加到一个用户或一组用户时，它会授权或拒绝用户对指定资源执行指定任务。有关更多信息，请参阅 *IAM 用户指南*中的[权限与策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/PermissionsAndPolicies.html)。有关管理和创建自定义 IAM policy 的更多信息，请参阅[管理 IAM policy](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingPolicies.html)。

AWS Batch 代表你给他 AWS 服务 人打电话。因此， AWS Batch 必须使用您的凭据进行身份验证。更具体地说，通过创建提供这些权限的 IAM 角色和策略 AWS Batch 进行身份验证。然后，它会在您创建它们时将角色与您的计算环境相关联。有关更多信息[Amazon ECS 实例角色](instance_IAM_role.md)，请参阅 [IAM *用户指南*中的 IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-toplevel.html)[、使用服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html)和[创建角色向 AWS 服务委派权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

**Topics**
+ [IAM 策略结构](iam-policy-structure.md)
+ [资源：策略示例 AWS Batch](ExamplePolicies_BATCH.md)
+ [资源： AWS Batch 托管策略](batch_managed_policies.md)

# IAM 策略结构
<a name="iam-policy-structure"></a>

以下主题说明 IAM policy 的结构。

**Topics**
+ [策略语法](#policy-syntax)
+ [适用于 API 的操作 AWS Batch](#UsingWithbatch_Actions)
+ [的亚马逊资源名称 AWS Batch](#batch_ARN_Format)
+ [确认用户是否具有所需权限](#check-required-permissions)

## 策略语法
<a name="policy-syntax"></a>

IAM 策略是包含一个或多个语句的 JSON 文档。每个语句的结构如下。

```
{
  "Statement":[{
    "Effect":"effect",
    "Action":"action",
    "Resource":"arn",
    "Condition":{
      "condition":{
    "key":"value"
    }
      }
    }
  ]
}
```

组成语句的四个主要元素如下：
+ **Effect：**此 *effect* 可以是 `Allow` 或 `Deny`。默认情况下 用户没有使用资源和 API 操作的权限。因此，所有请求都将被拒绝。显式允许将覆盖默认规则。显式拒绝将覆盖任何允许。
+ **Action**：*action* 是对其授予或拒绝权限的特定 API 操作。有关如何指定*操作*的说明，请参阅 [适用于 API 的操作 AWS Batch](#UsingWithbatch_Actions)。
+ **Resource**：受操作影响的资源。有些 AWS Batch API 操作允许您在策略中包括该操作可以创建或修改的特定资源。要在语句中指定资源，您可使用其 Amazon 资源名称 (ARN)。有关更多信息，请参阅[API 操作支持的资源级权限 AWS Batch](batch-supported-iam-actions-resources.md)和[的亚马逊资源名称 AWS Batch](#batch_ARN_Format)。如果 AWS Batch API 操作当前不支持资源级权限，请添加通配符 (\$1)，以指定所有资源都可能受到该操作的影响。
+ **条件**：条件是可选的。它们可以用于控制策略生效的时间。

有关的 IAM 策略声明的示例 AWS Batch，请参阅[资源：策略示例 AWS Batch](ExamplePolicies_BATCH.md)。

## 适用于 API 的操作 AWS Batch
<a name="UsingWithbatch_Actions"></a>

在 IAM 策略语句中，您可以从支持 IAM 的任何服务中指定任何 API 操作。对于 AWS Batch，请使用以下前缀和 API 操作的名称：`batch:`（例如，`batch:SubmitJob`和`batch:CreateComputeEnvironment`）。

要在单个语句中指定多项操作，请使用逗号将它们隔开。

```
"Action": ["batch:action1", "batch:action2"]
```

您也可以使用通配符 (\$1) 指定多项操作。例如，您可以指定名称以单词“Describe”开头的所有操作。

```
"Action": "batch:Describe*"
```

要指定所有 AWS Batch API 操作，请添加通配符 (\$1)。

```
"Action": "batch:*"
```

有关 AWS Batch 操作列表，请参阅 *AWS Batch API 参考*中的[操作](https://docs.aws.amazon.com/batch/latest/APIReference/API_Operations.html)。

## 的亚马逊资源名称 AWS Batch
<a name="batch_ARN_Format"></a>

每个 IAM 政策声明都适用于您使用其 Amazon 资源名称 (ARNs) 指定的资源。

Amazon 资源名称（ARN）具有以下通用语法：

```
arn:aws:[service]:[region]:[account]:resourceType/resourcePath
```

*service*  
服务 (例如，`batch`)。

*region*  
代表 AWS 区域 资源（例如，`us-east-2`）。

*account*  
不带连字符的 AWS 账户 ID（例如，`123456789012`）。

*resourceType*  
资源类型 (例如，`compute-environment`)。

*resourcePath*  
识别资源的路径。您可以在路径中使用通配符 (\$1)。

AWS Batch API 操作目前支持对多个 API 操作的资源级权限。有关更多信息，请参阅 [API 操作支持的资源级权限 AWS Batch](batch-supported-iam-actions-resources.md)。要指定所有资源，或者如果特定 API 操作不支持 ARNs，请在`Resource`元素中添加通配符 (\$1)。

```
"Resource": "*"
```

## 确认用户是否具有所需权限
<a name="check-required-permissions"></a>

在实施 IAM policy 之前，请确保为用户授予使用其所需的特定 API 操作和资源的权限。

为此，首先创建一个用于测试目的的用户，然后将 IAM policy 附加到该测试用户。然后，以测试用户身份提出请求。您可以在控制台中提出测试请求，也可以使用 AWS CLI提出测试请求。

**注意**  
您也可以使用 [IAM Policy Simulator](https://policysim.aws.amazon.com/home/index.jsp?#) 测试您的策略。有关策略模拟器的更多信息，请参阅 *IAM 用户指南*中的[使用 IAM Policy Simulator](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies_testing-policies.html)。

如果策略未向用户授予您所期望的权限，或者策略过度宽松，可以根据需要调整策略。重新测试，直到获得预期的结果。

**重要**  
在其生效之前，它需要几分钟时间将策略更改为适合状态。因此，我们建议您在测试策略更新前，等候至少五分钟的时间。

如果身份验证检查失败，该请求将返回一个带有诊断信息的代码消息。您可以使用 `DecodeAuthorizationMessage` 操作对消息进行解码。有关更多信息，请参阅[DecodeAuthorizationMessage](https://docs.aws.amazon.com/STS/latest/APIReference/API_DecodeAuthorizationMessage.html)《*AWS Security Token Service API 参考*》和《*AWS CLI 命令参考*》[decode-authorization-message](https://docs.aws.amazon.com/cli/latest/reference/sts/decode-authorization-message.html)中的。

# 资源：策略示例 AWS Batch
<a name="ExamplePolicies_BATCH"></a>

可以创建特定的 IAM policy 来限制您账户中的用户有权访问的调用和资源。然后，您可以将这些策略附加到用户。

在将策略附加到一个用户或一组用户时，它会授权或拒绝用户使用指定资源执行指定任务。有关更多信息，请参阅 *IAM 用户指南*中的[权限与策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/PermissionsAndPolicies.html)。有关如何管理和创建自定义 IAM policy 的说明，请参阅[管理 IAM policy](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingPolicies.html)。

以下示例显示了您可用于控制用户对于 AWS Batch权限的策略语句。

**Topics**
+ [只读访问权限](iam-example-read-only.md)
+ [资源：限制用户、映像、权限、角色](iam-example-job-def.md)
+ [限制作业提交](iam-example-restrict-job-submission.md)
+ [限于作业队列](iam-example-restrict-job-queue.md)
+ [当所有条件都匹配字符串时拒绝操作](iam-example-job-def-deny-all-image-logdriver.md)
+ [资源：当所有条件键都匹配字符串时拒绝操作](iam-example-job-def-deny-any-image-logdriver.md)
+ [使用 `batch:ShareIdentifier` 条件键](iam-example-share-identifier.md)
+ [使用管理 SageMaker AI 资源 AWS Batch](iam-example-full-access-service-environment.md)
+ [通过资源标签限制作业提交](iam-example-restrict-job-submission-by-tags.md)

# 资源：的只读访问权限 AWS Batch
<a name="iam-example-read-only"></a>

以下策略授予用户使用名称以`Describe`和开头的所有 AWS Batch API 操作的权限`List`。

除非另一条语句授予权限，否则用户无权对资源执行任何操作。默认情况下，他们被拒绝使用 API 操作的权限。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "batch:Describe*",
                "batch:List*",
                "batch:Get*"
            ],
            "Resource": "*"
        }
    ]
}
```

------

# 资源：限制为 POSIX 用户、Docker 映像、权限级别和作业提交角色
<a name="iam-example-job-def"></a>

以下策略允许 POSIX 用户管理自己的一组受限作业定义。

使用第一和第二条语句注册和取消注册名称前缀为的任何作业定义名称。*JobDefA\$1*

第一个语句还使用条件上下文键来限制作业定义的 `containerProperties` 中的 POSIX 用户、特权状态和容器映像值。有关更多信息，请参阅《AWS Batch API Reference》**中的 [RegisterJobDefinition](https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html)。在此示例中，只有当 POSIX 用户设置为 `nobody` 时，才能注册作业定义。特权标志设置为 `false`。最后，在 Amazon ECR 存储库中将映像设置为 `myImage`。

**重要**  
Docker 将 `user` 参数解析为该用户在容器映像中的 `uid`。在大多数情况下，可以在容器映像中的 `/etc/passwd` 文件中找到它。可以通过在作业定义和任何关联的 IAM policy 中使用直接 `uid` 值来避免此名称解析。 AWS Batch API 和 `batch:User` IAM 条件键都支持数字值。

第三个语句限制用户仅将特定角色传递给作业定义。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "batch:RegisterJobDefinition"
            ],
            "Resource": [
                "arn:aws:batch:us-east-2:999999999999:job-definition/JobDefA_*"
            ],
            "Condition": {
                "StringEquals": {
                    "batch:User": [
                        "nobody"
                    ],
                    "batch:Image": [
                        "999999999999.dkr.ecr.us-east-2.amazonaws.com/myImage"
                    ]
                },
                "Bool": {
                    "batch:Privileged": "false"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "batch:DeregisterJobDefinition"
            ],
            "Resource": [
                "arn:aws:batch:us-east-2:999999999999:job-definition/JobDefA_*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::999999999999:role/MyBatchJobRole"
            ]
        }
    ]
}
```

------

# 资源：限于作业提交的作业定义前缀
<a name="iam-example-restrict-job-submission"></a>

使用以下策略向任何作业定义名称以开头的作业队列提交作业*JobDefA*。

**重要**  
在限定作业提交的资源级访问时，必须同时提供作业队列和作业定义资源类型。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "batch:SubmitJob"
            ],
            "Resource": [
                "arn:aws:batch:us-east-2:111122223333:job-definition/JobDefA_*",
                "arn:aws:batch:us-east-2:111122223333:job-queue/*"
            ]
        }
    ]
}
```

------

# 资源：限于作业队列
<a name="iam-example-restrict-job-queue"></a>

以下策略允许用户将作业提交到名为 **queue1** 的特定作业队列，该队列具有任何作业定义名称。

**重要**  
在限定作业提交的资源级访问时，必须同时提供作业队列和作业定义资源类型。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "batch:SubmitJob"
            ],
            "Resource": [
                "arn:aws:batch:us-east-2:888888888888:job-definition/*",
                "arn:aws:batch:us-east-2:888888888888:job-queue/queue1"
            ]
        }
    ]
}
```

------

# 当所有条件都匹配字符串时拒绝操作
<a name="iam-example-job-def-deny-all-image-logdriver"></a>

当`batch:Image`（容器映像 ID）条件密钥均为 “” 且（容器日志驱动程序）条件键均*string1*为 “” 时，以下策略将`batch:LogDriver`拒绝访问 [https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html)API 操作*string2*。” AWS Batch 评估每个容器上的条件键。当作业跨越多个容器（例如多节点平行作业）时，容器可能会有不同的配置。如果在一个语句中评估多个条件键，则使用 `AND` 逻辑将它们组合在一起。因此，如果多个条件键中的任何一个与容器不匹配，则该 `Deny` 效果不会应用于该容器。相反，同一作业中的不同容器可能会被拒绝。

有关条件密钥的列表 AWS Batch，请参阅《*服务授权参考*》 AWS Batch中的[条件密钥](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsbatch.html#awsbatch-policy-keys)。除 `batch:ShareIdentifier` 外，所有 `batch` 条件键都可以用这种方式使用。`batch:ShareIdentifier` 条件键是为作业定义的，而不是为作业定义定义的。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "batch:RegisterJobDefinition"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Deny",
      "Action": "batch:RegisterJobDefinition",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "batch:Image": "string1",
          "batch:LogDriver": "string2"
        }
      }
    }
  ]
}
```

------

# 资源：当所有条件键都匹配字符串时拒绝操作
<a name="iam-example-job-def-deny-any-image-logdriver"></a>

当`batch:Image`（容器映像 ID）条件键为 “” 或（容器日志驱动程序）条件键为 *string1* “” 时，以下策略拒绝访问 [https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html)API 操作*string2*。” `batch:LogDriver` 当作业跨越多个容器（例如多节点 parallel 作业）时，容器可能会有不同的配置。如果在一个语句中评估多个条件键，则使用 `AND` 逻辑将它们组合在一起。因此，如果多个条件键中的任何一个与容器不匹配，则该 `Deny` 效果不会应用于该容器。相反，同一作业中的不同容器可能会被拒绝。

有关条件密钥的列表 AWS Batch，请参阅《*服务授权参考*》 AWS Batch中的[条件密钥](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsbatch.html#awsbatch-policy-keys)。除 `batch:ShareIdentifier` 外，所有 `batch` 条件键都可以用这种方式使用。（`batch:ShareIdentifier` 条件键是为作业定义的，而不是为作业定义定义的。）

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "batch:RegisterJobDefinition"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Deny",
      "Action": [
        "batch:RegisterJobDefinition"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringEquals": {
          "batch:Image": [
            "string1"
          ]
        }
      }
    },
    {
      "Effect": "Deny",
      "Action": [
        "batch:RegisterJobDefinition"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringEquals": {
          "batch:LogDriver": [
            "string2"
          ]
        }
      }
    }
  ]
}
```

------

# 资源：使用 `batch:ShareIdentifier` 条件键
<a name="iam-example-share-identifier"></a>

使用以下策略将使用 `jobDefA` 作业定义的作业提交到具有 `lowCpu` 份额标识符的 `jobqueue1` 作业队列。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "batch:SubmitJob"
      ],
      "Resource": [
        "arn:aws:batch:us-east-2:555555555555:job-definition/JobDefA",
        "arn:aws:batch:us-east-2:555555555555:job-queue/jobqueue1"
      ],
      "Condition": {
        "StringEquals": {
          "batch:ShareIdentifier": [
            "lowCpu"
          ]
        }
      }
    }
  ]
}
```

------

# 使用管理 SageMaker AI 资源 AWS Batch
<a name="iam-example-full-access-service-environment"></a>

此策略 AWS Batch 允许管理 SageMaker AI 资源。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "batch:*"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreateServiceLinkedRole"
            ],
            "Resource": "arn:aws:iam::*:role/*AWSServiceRoleForAWSBatchWithSagemaker",
            "Condition": {
                 "StringEquals": {
                     "iam:AWSServiceName": "sagemaker-queuing.batch.amazonaws.com"
                 }
             }
         },
         {
             "Effect": "Allow",
             "Action": "iam:PassRole",
             "Resource": "*",
             "Condition": {
                 "StringEquals": {
                     "iam:PassedToService": [
                         "sagemaker.amazonaws.com"
                      ]
                  }
              }
          }
    ]
}
```

------

# 资源：通过作业定义和作业队列上的资源标签限制作业提交
<a name="iam-example-restrict-job-submission-by-tags"></a>

只有在作业队列都有标签`Environment=dev`且作业定义都有标签时，才使用以下策略提交作业`Project=calc`。此策略演示了如何在提交作业期间使用资源标签来控制对 AWS Batch 资源的访问权限。

**重要**  
使用评估作业定义资源标签的策略提交作业时，必须使用作业定义修订格式（`job-definition:revision`）提交作业。如果您在未指定修订版本的情况下提交作业，则不会评估作业定义标签，这可能会绕过您预期的访问控制。资源 ARN 中的`*:*`模式强制要求提交内容必须包含修订版，从而确保标签策略始终得到有效应用。

此策略使用两个单独的语句，因为它对不同的资源类型应用不同的标签条件。在限定作业提交的资源级访问时，必须同时提供作业队列和作业定义资源类型。

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "batch:SubmitJob",
      "Resource": "arn:aws:batch:*:*:job-queue/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Environment": "dev"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": "batch:SubmitJob",
      "Resource": "arn:aws:batch:*:*:job-definition/*:*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Project": "calc"
        }
      }
    }
  ]
}
```

# 资源： AWS Batch 托管策略
<a name="batch_managed_policies"></a>

AWS Batch 提供了可以附加到用户的托管策略。此政策提供使用 AWS Batch 资源和 API 操作的权限。您可以直接应用此策略，也可以以它为起点创建自己的策略。有关这些策略中提到的每个 API 操作的更多信息，请参阅 *AWS Batch API 参考* 中的 [操作](https://docs.aws.amazon.com/batch/latest/APIReference/API_Operations.html)。

## AWSBatchFullAccess
<a name="AWSBatchFullAccess"></a>

此策略允许管理员具有完全访问权限 AWS Batch。

要查看策略的 JSON，请参阅[https://docs.aws.amazon.com/aws-managed-policy/latest/reference/about-managed-policy-reference.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/about-managed-policy-reference.html)[AWSBatchFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSBatchFullAccess.html)中的。