

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

# 用于与 Apache Ranger 本地集成的 IAM 角色
<a name="emr-ranger-iam"></a>

Amazon EMR 和 Apache Ranger 之间的集成依赖于您在启动集群之前应创建的三个关键角色：
+ 适用于 Amazon EMR 的自定义 Amazon EC2 实例配置文件。
+ Apache Ranger 引擎的 IAM 角色
+ 其他 AWS 服务的 IAM 角色

此部分概览了这些角色以及需要为每个 IAM 角色提供的策略。有关创建这些角色的信息，请参阅[设置 Ranger Admin 服务器，以便与 Amazon EMR 集成](emr-ranger-admin.md)。

# Amazon EMR 的 EC2 实例配置文件
<a name="emr-ranger-iam-ec2"></a>

Amazon EMR 使用 IAM 服务角色代表您执行操作以预置和管理集群。集群 EC2 实例的服务角色（又称为 Amazon EMR 的 EC2 实例配置文件）是一种特殊类型的服务角色，在启动时分配给集群中的每个 EC2 实例。

要定义 EMR 集群与 Amazon S3 数据以及受 Apache Ranger 和其他 AWS 服务保护的 Hive 元数据仓交互的权限，请定义一个自定义 EC2 实例配置文件来代替启动集群时使用。`EMR_EC2_DefaultRole`

有关更多信息，请参阅[集群 EC2 实例（EC2 实例配置文件）的服务角色](emr-iam-role-for-ec2.md)和[使用 Amazon EMR 自定义 IAM 角色](emr-iam-roles-custom.md)。

您需要将以下语句添加到 Amazon EMR 的默认 EC2 实例配置文件中，以便能够标记会话并访问存储 TLS AWS Secrets Manager 证书的。

```
    {
      "Sid": "AllowAssumeOfRolesAndTagging",
      "Effect": "Allow",
      "Action": ["sts:TagSession", "sts:AssumeRole"],
      "Resource": [
        "arn:aws:iam::<AWS_ACCOUNT_ID>:role/<RANGER_ENGINE-PLUGIN_DATA_ACCESS_ROLE_NAME>",
        "arn:aws:iam::<AWS_ACCOUNT_ID>:role/<RANGER_USER_ACCESS_ROLE_NAME>"
      ]
    },
    {
        "Sid": "AllowSecretsRetrieval",
        "Effect": "Allow",
        "Action": "secretsmanager:GetSecretValue",
        "Resource": [
            "arn:aws:secretsmanager:<REGION>:<AWS_ACCOUNT_ID>:secret:<PLUGIN_TLS_SECRET_NAME>*",
            "arn:aws:secretsmanager:<REGION>:<AWS_ACCOUNT_ID>:secret:<ADMIN_RANGER_SERVER_TLS_SECRET_NAME>*"
        ]
    }
```

**注意**  
对于 Secrets Manager 权限，不要忘记密钥名称末尾的通配符（“\$1”），否则您的请求将失败。通配符用于密钥版本。

**注意**  
将 AWS Secrets Manager 策略的范围限制为仅提供所需的证书。

# Apache Raner 的 IAM 角色
<a name="emr-ranger-iam-ranger"></a>

此角色为可信执行引擎（例如 Apache Hive 和 Amazon EMR 记录服务器）提供凭证以访问 Amazon S3 数据。如果您使用 S3 SSE-KMS，则仅使用此角色访问 Amazon S3 数据，包括任何 KMS 密钥。

此角色必须使用以下示例中所述的最低策略创建。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "CloudwatchLogsPermissions",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:logs:*:123456789012:log-group:CLOUDWATCH_LOG_GROUP_NAME_IN_SECURITY_CONFIGURATION:*"
      ]
    },
    {
      "Sid": "BucketPermissionsInS3Buckets",
      "Action": [
        "s3:CreateBucket",
        "s3:DeleteBucket",
        "s3:ListAllMyBuckets",
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket1",
        "arn:aws:s3:::amzn-s3-demo-bucket2"
      ]
    },
    {
      "Sid": "ObjectPermissionsInS3Objects",
      "Action": [
        "s3:GetObject",
        "s3:DeleteObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket1/*",
        "arn:aws:s3:::amzn-s3-demo-bucket2/*"
      ]
    }
  ]
}
```

------

**重要**  
必须包含 CloudWatch 日志资源末尾的星号 “\$1”，以提供写入日志流的权限。

**注意**  
如果您使用 EMRFS 一致性视图或 S3-SSE 加密，请添加对 DynamoDB 表和 KMS 密钥的权限，以便执行引擎可以与这些引擎交互。

Apache Ranger 的 IAM 角色由 EC2 实例配置文件角色代入。使用以下示例创建一个信任策略，允许 EC2 实例配置文件角色代入 Apache Ranger 的 IAM 角色。

```
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<AWS_ACCOUNT_ID>:role/<EC2 INSTANCE PROFILE ROLE NAME eg. EMR_EC2_DefaultRole>"
      },
      "Action": ["sts:AssumeRole", "sts:TagSession"]
    }
```

# Amazon EMR 集 AWS 成的其他服务的 IAM 角色
<a name="emr-ranger-iam-other-AWS"></a>

如果需要，此角色为不受信任的执行引擎用户提供与 AWS 服务进行交互的凭证。不要使用此 IAM 角色来允许访问 Amazon S3 数据，除非它是所有用户都应该可以访问的数据。

此角色将由 EC2 实例配置文件角色代入。使用以下示例创建一个信任策略，允许 EC2 实例配置文件角色代入 Apache Ranger 的 IAM 角色。

```
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<AWS_ACCOUNT_ID>:role/<EC2 INSTANCE PROFILE ROLE NAME eg. EMR_EC2_DefaultRole>"
      },
      "Action": ["sts:AssumeRole", "sts:TagSession"]
    }
```

# 验证您对 Amazon EMR 与 Apache Ranger 集成的权限
<a name="emr-ranger-iam-validate"></a>

请参阅[Apache Ranger 疑难解答](emr-ranger-troubleshooting.md)了解有关验证权限的说明。