

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

# 执行 IAM 策略
<a name="jobs-cli-execution"></a>

在 EMR Serverless 上提交作业运行时，除了执行角色之外，您还可以指定执行 IAM 策略。作业运行所采用的权限是执行角色中的权限与指定的执行 IAM 策略中的权限的交集。

## 开始使用
<a name="jobs-cli-execution-getting-started"></a>

使用执行 IAM 策略的步骤：

创建一个 `emr-serverless` 应用程序或使用现有应用程序，然后运行以下 aws cli 以启动带有内联 IAM 策略的作业运行：

```
aws emr-serverless start-job-run --region us-west-2 \
      --application-id {{application-id}} \
      --execution-role-arn {{execution-role-arn}} \
      --job-driver {{job-driver-options}} \
      --execution-iam-policy '{"policy": "{{inline-policy}}"}'
```

## CLI 命令示例
<a name="jobs-cli-execution-examples"></a>

如果机器上的 `policy.json` 文件中存储了以下策略：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::my-test-bucket",
        "arn:aws:s3:::my-test-bucket/*"
      ],
      "Sid": "AllowS3Getobject"
    }
  ]
}
```

------

然后，我们可以使用以下 AWS CLI 命令使用此策略启动作业：

```
aws emr-serverless start-job-run --region us-west-2 \
      --application-id {{application-id}} \
      --execution-role-arn {{execution-role-arn}} \
      --job-driver {{job-driver-options}}
      --execution-iam-policy '{
          "policy": '$(jq -c '. | @json' policy.json)'
      }'
```

您也可以同时使用客户托管策略 AWS 和客户托管策略，通过以下方式指定它们 ARNs：

```
aws emr-serverless start-job-run --region us-west-2 \
      --application-id {{application-id}} \
      --execution-role-arn {{execution-role-arn}} \
      --job-driver {{job-driver-options}}
      --execution-iam-policy '{
          "policyArns": [
          "arn:aws:iam::aws:policy/AmazonS3FullAccess",
          "arn:aws:iam::aws:policy/CloudWatchLogsFullAccess"
          ]
    }'
```

也可以在同一个请求 ARNs 中同时指定内联 IAM 策略和托管策略：

```
aws emr-serverless start-job-run --region us-west-2 \
      --application-id {{application-id}} \
      --execution-role-arn {{execution-role-arn}} \
      --job-driver {{job-driver-options}}
      --execution-iam-policy '{
          "policy": '$(jq -c '. | @json' policy.json)',
          "policyArns": [
          "arn:aws:iam::aws:policy/AmazonS3FullAccess",
          "arn:aws:iam::aws:policy/CloudWatchLogsFullAccess"
          ]
      }'
```

## 重要提示
<a name="jobs-cli-execution-important-notes"></a>
+ `execution-role-policy` 的 `policy` 字段最多可包含 2048 个字符。
+ 在 `execution-iam-policy` 的 `policy` 字段中指定的内联 IAM 策略字符串必须符合 json 字符串标准，不能像前面的示例那样对换行符和引号进行转义。
+  ARNs 可以将最多 10 个托管策略的列表指定为 `execution-iam-policy`'s `policyArns` 字段的值。
+ 托管策略 ARNs 必须是有效 AWS 或客户托管策略 ARN 的列表，当指定客户托管策略 ARN 时，该策略必须属于 EMR-S 的同一个 AWS 账户。 JobRun
+ 当同时使用内联 IAM 策略和托管策略时，用于内联策略和托管策略的明文组合不能超过 2,048 个字符。
+ 由此产生的权限 JobRun 是执行角色和指定执行 IAM 策略中的权限的交集。

## 策略交集
<a name="jobs-cli-execution-policy-intersection"></a>

作业运行所采用的权限是执行角色中的权限与指定的执行 IAM 策略中的权限的交集。这意味着必须在两个地方都指定任何所需的许可才能起作用。 JobRun 但是，对于您不打算更新或覆盖的任何权限，可以在内联策略中指定额外一揽子允许语句。

示例

给定以下执行 IAM 角色策略：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "*"
      ],
      "Sid": "AllowS3"
    },
    {
      "Effect": "Allow",
      "Action": [
        "logs:DescribeLogGroups"
      ],
      "Resource": [
        "arn:aws:logs:us-west-2:123456789012:log-group::log-stream"
      ],
      "Sid": "AllowLOGSDescribeloggroups"
    },
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:DescribeTable"
      ],
      "Resource": [
        "arn:aws:dynamodb:*:*:table/MyCompany1table"
      ],
      "Sid": "AllowDYNAMODBDescribetable"
    }
  ]
}
```

------

以及以下内联 IAM 策略：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::my-test-bucket/tenant1",
        "arn:aws:s3:::my-test-bucket/tenant1/*"
      ],
      "Sid": "AllowS3Getobject"
    },
    {
      "Effect": "Allow",
      "Action": [
        "logs:*",
        "dynamodb:*"
      ],
      "Resource": [
        "*"
      ],
      "Sid": "AllowLOGS"
    }
  ]
}
```

------

由此产生的权限 JobRun 为::

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::my-test-bucket/tenant1",
        "arn:aws:s3:::my-test-bucket/tenant1/*"
      ],
      "Sid": "AllowS3Getobject"
    },
    {
      "Effect": "Allow",
      "Action": [
        "logs:DescribeLogGroups"
      ],
      "Resource": [
        "arn:aws:logs:us-west-2:123456789012:log-group::log-stream"
      ],
      "Sid": "AllowLOGSDescribeloggroups"
    },
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:DescribeTable"
      ],
      "Resource": [
        "arn:aws:dynamodb:*:*:table/MyCompany1table"
      ],
      "Sid": "AllowDYNAMODBDescribetable"
    }
  ]
}
```

------