

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

# 使用 MemoryDB 的服务相关角色
<a name="using-service-linked-roles"></a>

MemoryDB 使用 AWS Identity and Access Management (IAM) [服务相关](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)角色。服务相关角色是一种独特的 IAM 角色，直接链接到 AWS 服务，例如 MemoryDB。MemoryDB 服务相关角色由 MemoryDB 预定义。它们包含该服务代表您的集群调用 AWS 服务所需的一切权限。

使用服务相关角色时，您不必手动添加必要的权限，所以您可以更轻松地设置 MemoryDB。这些角色已存在于您的 AWS 账户中，但已关联到 MemoryDB 用例并具有预定义的权限。只有 MemoryDB 可以代入这些角色，并且只有这些角色可以使用预定义的权限策略。只有先删除角色的相关资源，才能删除角色。这将保护您的 MemoryDB 资源，因为您不会无意中删除访问资源的必要权限。

有关支持服务相关角色的其他服务的信息，请参阅[使用 IAM 的AWS 服务](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)并查找**服务相关角色**列中显示为**是**的服务。选择**是**和链接，查看该服务的服务关联角色文档。

**Contents**
+ [服务相关角色权限](#service-linked-role-permissions)
+ [创建服务相关角色（IAM）](#create-service-linked-role-iam)
  + [使用 IAM 控制台](#create-service-linked-role-iam-console)
  + [使用 IAM CLI](#create-service-linked-role-iam-cli)
  + [使用 IAM API](#create-service-linked-role-iam-api)
+ [编辑服务相关角色描述](#edit-service-linked-role)
  + [使用 IAM 控制台](#edit-service-linked-role-iam-console)
  + [使用 IAM CLI](#edit-service-linked-role-iam-cli)
  + [使用 IAM API](#edit-service-linked-role-iam-api)
+ [删除 MemoryDB 的服务相关角色](#delete-service-linked-role)
  + [清除服务相关角色](#service-linked-role-review-before-delete)
  + [删除服务相关角色（IAM 控制台）](#delete-service-linked-role-iam-console)
  + [删除服务相关角色（IAM CLI）](#delete-service-linked-role-iam-cli)
  + [删除服务相关角色（IAM API）](#delete-service-linked-role-iam-api)

## MemoryDB 的服务相关角色权限
<a name="service-linked-role-permissions"></a>

MemoryDB 使用名为 **AWSServiceRoleForMemoryDB** 的服务相关角色 — 此策略允许 MemoryDB 在必要时代表您管理管理集群的 AWS 资源。

 AWSServiceRoleForMemory数据库服务相关角色权限策略允许 MemoryDB 对指定资源完成以下操作：

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

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"ec2:CreateTags"
			],
			"Resource": "arn:aws-cn:ec2:*:*:network-interface/*",
			"Condition": {
				"StringEquals": {
					"ec2:CreateAction": "CreateNetworkInterface"
				},
				"ForAllValues:StringEquals": {
					"aws:TagKeys": [
						"AmazonMemoryDBManaged"
					]
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"ec2:CreateNetworkInterface"
			],
			"Resource": [
				"arn:aws-cn:ec2:*:*:network-interface/*",
				"arn:aws-cn:ec2:*:*:subnet/*",
				"arn:aws-cn:ec2:*:*:security-group/*"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"ec2:DeleteNetworkInterface",
				"ec2:ModifyNetworkInterfaceAttribute"
			],
			"Resource": "arn:aws-cn:ec2:*:*:network-interface/*",
			"Condition": {
				"StringEquals": {
					"ec2:ResourceTag/AmazonMemoryDBManaged": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"ec2:DeleteNetworkInterface",
				"ec2:ModifyNetworkInterfaceAttribute"
			],
			"Resource": "arn:aws-cn:ec2:*:*:security-group/*"
		},
		{
			"Effect": "Allow",
			"Action": [
				"ec2:DescribeSecurityGroups",
				"ec2:DescribeNetworkInterfaces",
				"ec2:DescribeAvailabilityZones",
				"ec2:DescribeSubnets",
				"ec2:DescribeVpcs"
			],
			"Resource": "*"
		},
		{
			"Effect": "Allow",
			"Action": [
				"cloudwatch:PutMetricData"
			],
			"Resource": "*",
			"Condition": {
				"StringEquals": {
					"cloudwatch:namespace": "AWS/MemoryDB"
				}
			}
		}
	]
}
```

------

有关更多信息，请参阅 [AWS 托管策略：内存 DBService RolePolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-memorydbServiceRolePolicy)。

**允许 IAM 实体创建 AWSServiceRoleForMemory数据库服务相关角色**

向该 IAM 实体的权限中添加以下策略声明：

```
{
    "Effect": "Allow",
    "Action": [
        "iam:CreateServiceLinkedRole",
        "iam:PutRolePolicy"
    ],
    "Resource": "arn:aws:iam::*:role/aws-service-role/memorydb.amazonaws.com/AWSServiceRoleForMemoryDB*",
    "Condition": {"StringLike": {"iam:AWS ServiceName": "memorydb.amazonaws.com"}}
}
```

**允许 IAM 实体删除 AWSServiceRoleForMemory数据库服务相关角色**

向该 IAM 实体的权限中添加以下策略声明：

```
{
    "Effect": "Allow",
    "Action": [
        "iam:DeleteServiceLinkedRole",
        "iam:GetServiceLinkedRoleDeletionStatus"
    ],
    "Resource": "arn:aws:iam::*:role/aws-service-role/memorydb.amazonaws.com/AWSServiceRoleForMemoryDB*",
    "Condition": {"StringLike": {"iam:AWS ServiceName": "memorydb.amazonaws.com"}}
}
```

或者，您可以使用 AWS 托管策略来提供对 MemoryDB 的完全访问权限。

## 创建服务相关角色（IAM）
<a name="create-service-linked-role-iam"></a>

您可以使用 IAM 控制台、CLI 或 API 创建服务相关角色。

### 创建服务相关角色（IAM 控制台）
<a name="create-service-linked-role-iam-console"></a>

您可使用 IAM 控制台创建服务相关角色。

**创建服务相关角色（控制台）**

1. 登录 AWS 管理控制台 并打开 IAM 控制台，网址为[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在 IAM 控制台的左侧导航窗格中，选择 **Roles**。然后选择**创建新角色**。

1. 在 **Select type of trusted entity（选择受信任实体的类型）**下，选择 **AWS Service（亚马逊云科技服务）**。

1. 在**或选择一个服务以查看其用例**中，选择 **MemoryDB**。

1. 选择**下一步: 权限**。

1. 在 **策略名称**下，请注意此角色需要 `MemoryDBServiceRolePolicy`。选择 **Next:Tags（下一步: 标签）**。

1. 请注意，服务相关角色不支持标签。选择**下一步: 审核**。

1. （可选）对于 **Role description**，编辑新服务相关角色的描述。

1. 检查角色，然后选择**创建角色**。

### 创建服务相关角色（IAM CLI）
<a name="create-service-linked-role-iam-cli"></a>

您可以使用中的 IAM 操作 AWS Command Line Interface 来创建服务相关角色。此角色可以包括服务代入角色时所需的信任策略和内联策略。

**创建服务相关角色（CLI）**

使用以下操作：

```
$ aws iam [create-service-linked-role](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceLinkedRole.html) --aws-service-name memorydb.amazonaws.com
```

### 创建服务相关角色（IAM API）
<a name="create-service-linked-role-iam-api"></a>

您可以使用 IAM API 创建服务相关角色。此角色可以包括服务代入角色时所需的信任策略和内联策略。

**创建服务相关角色（API）**

使用 [CreateServiceLinkedRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceLinkedRole.html) API 调用。在请求中，指定 `memorydb.amazonaws.com` 的服务名称。

## 编辑 MemoryDB 的服务相关角色的描述
<a name="edit-service-linked-role"></a>

MemoryDB 不允许您编辑 AWSServiceRoleForMemory数据库服务相关角色。创建服务关联角色后，您将无法更改角色的名称，因为可能有多种实体引用该角色。但是可以使用 IAM 编辑角色描述。

### 编辑服务相关角色描述（IAM 控制台）
<a name="edit-service-linked-role-iam-console"></a>

您可以使用 IAM 控制台编辑服务相关角色的描述。

**编辑服务相关角色的描述（控制台）**

1. 在 IAM 控制台的左侧导航窗格中，选择 **Roles**。

1. 以下代码示例显示如何将 IAM 策略附加到用户。

1. 在 **Role description** 的最右侧，选择 **Edit**。

1. 在框中输入新描述，然后选择 **Save（保存）**。

### 编辑服务相关角色描述（IAM CLI）
<a name="edit-service-linked-role-iam-cli"></a>

您可以使用中的 IAM 操作 AWS Command Line Interface 来编辑与服务相关的角色描述。

**更改服务相关角色的描述（CLI）**

1. （可选）要查看角色的当前描述，请使用 for AWS CLI IAM 操作`[get-role](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetRole.html)`。  
**Example**  

   ```
   $ aws iam [get-role](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetRole.html) --role-name AWSServiceRoleForMemoryDB
   ```

   通过 CLI 操作使用角色名称（并非 ARN）指向角色。例如，如果一个角色的 ARN 为 `arn:aws:iam::123456789012:role/myrole`，则应将角色称为 **myrole**。

1. 要更新服务相关角色的描述，请使用 for I AWS CLI AM 操作`[update-role-description](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateRoleDescription.html)`。

   对于 Linux、macOS 或 Unix：

   ```
   $ aws iam [update-role-description](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateRoleDescription.html) \
       --role-name AWSServiceRoleForMemoryDB \
       --description "new description"
   ```

   对于 Windows：

   ```
   $ aws iam [update-role-description](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateRoleDescription.html) ^
       --role-name AWSServiceRoleForMemoryDB ^
       --description "new description"
   ```

### 编辑服务相关角色描述（IAM API）
<a name="edit-service-linked-role-iam-api"></a>

您可以使用 IAM API 编辑服务相关角色描述。

**更改服务相关角色的描述（API）**

1. （可选）要查看角色的当前描述，请使用 IAM API 操作 [GetRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetRole.html)。  
**Example**  

   ```
   https://iam.amazonaws.com/
      ?Action=[GetRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetRole.html)
      &RoleName=AWSServiceRoleForMemoryDB
      &Version=2010-05-08
      &AUTHPARAMS
   ```

1. 要更新角色的描述，请使用 IAM API 操作 [UpdateRoleDescription](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateRoleDescription.html)。  
**Example**  

   ```
   https://iam.amazonaws.com/
      ?Action=[UpdateRoleDescription](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateRoleDescription.html)
      &RoleName=AWSServiceRoleForMemoryDB
      &Version=2010-05-08
      &Description="New description"
   ```

## 删除 MemoryDB 的服务相关角色
<a name="delete-service-linked-role"></a>

如果不再需要使用某个需要服务关联角色的功能或服务，我们建议您删除该角色。这样就没有未被主动监控或维护的未使用实体。但是，您必须先清除您的服务相关角色，然后才能将其删除。

MemoryDB 不会删除您的服务相关角色。

### 清除服务相关角色
<a name="service-linked-role-review-before-delete"></a>

您必须先确认该角色没有与之关联的资源（集群），然后才能使用 IAM 删除服务相关角色。

**在 IAM 控制台中检查服务相关角色是否具有活动会话**

1. 登录 AWS 管理控制台 并打开 IAM 控制台，网址为[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在 IAM 控制台的左侧导航窗格中，选择 **Roles**。然后选择 AWSServiceRoleForMemory数据库角色的名称（不是复选框）。

1. 在所选角色的 **Summary** 页面上，选择 **Access Advisor** 选项卡。

1. 在**访问顾问**选项卡查看服务相关角色的近期活动。

**删除需要数据库的 MemoryDB 资源（ AWSServiceRoleForMemory控制台）**
+ 要删除集群，请参阅以下内容：
  + [使用 AWS 管理控制台](getting-started.md#clusters.deleteclusters.viewdetails)
  + [使用 AWS CLI](getting-started.md#clusters.delete.cli)
  + [使用 MemoryDB API](getting-started.md#clusters.delete.api)

### 删除服务相关角色（IAM 控制台）
<a name="delete-service-linked-role-iam-console"></a>

您可以使用 IAM 控制台删除服务相关角色。

**删除服务相关角色 (控制台)**

1. 登录 AWS 管理控制台 并打开 IAM 控制台，网址为[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在 IAM 控制台的左侧导航窗格中，选择 **Roles**。然后，选中要删除的角色名称旁边的复选框，而不是名称或行本身。

1. 对于页面顶部的**角色操作**，请选择**删除角色**。

1. 在确认页面中，查看上次访问服务的数据，该数据显示了每个选定角色上次访问 AWS 服务的时间。这样可帮助您确认角色当前是否处于活动状态。如果要继续，请选择 **Yes, Delete ** 以提交服务相关角色进行删除。

1. 监视 IAM 控制台通知，以监控服务相关角色的删除进度。由于 IAM 服务相关角色删除是异步的，因此，在您提交角色进行删除后，删除任务可能成功，也可能失败。如果任务失败，您可以从通知中选择 **View details** 或 **View Resources** 以了解删除失败的原因。

### 删除服务相关角色（IAM CLI）
<a name="delete-service-linked-role-iam-cli"></a>

您可以使用中的 IAM 操作 AWS Command Line Interface 来删除服务相关角色。

**删除服务相关角色（CLI）**

1. 如果您不知道要删除的服务相关角色的名称，请输入以下命令。此命令列出了您账户中的角色及其 Amazon 资源名称 (ARNs)。

   ```
   $ aws iam [get-role](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetRole.html) --role-name role-name
   ```

   通过 CLI 操作使用角色名称（并非 ARN）指向角色。例如，如果某个角色具有 ARN `arn:aws:iam::123456789012:role/myrole`，则将该角色称为 **myrole**。

1. 如果服务相关角色正被使用或具有关联的资源，则无法删除它，因此您必须提交删除请求。如果不满足这些条件，该请求可能会被拒绝。您必须从响应中捕获 `deletion-task-id` 以检查删除任务的状态。输入以下命令以提交服务相关角色的删除请求。

   ```
   $ aws iam [delete-service-linked-role](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteServiceLinkedRole.html) --role-name role-name
   ```

1. 输入以下命令以检查删除任务的状态。

   ```
   $ aws iam [get-service-linked-role-deletion-status](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServiceLinkedRoleDeletionStatus.html) --deletion-task-id deletion-task-id
   ```

   删除任务的状态可能是 `NOT_STARTED`、`IN_PROGRESS`、`SUCCEEDED` 或 `FAILED`。如果删除失败，则调用会返回失败的原因，以便您进行问题排查。

### 删除服务相关角色（IAM API）
<a name="delete-service-linked-role-iam-api"></a>

您可以使用 IAM API 删除服务相关角色。

**删除服务相关角色（API）**

1. 要提交服务相关角色的删除请求，请调用 [DeleteServiceLinkedRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteServiceLinkedRole.html)。在请求中，指定角色名称。

   如果服务相关角色正被使用或具有关联的资源，则无法删除它，因此您必须提交删除请求。如果不满足这些条件，该请求可能会被拒绝。您必须从响应中捕获 `DeletionTaskId` 以检查删除任务的状态。

1. 要检查删除的状态，请调用 [GetServiceLinkedRoleDeletionStatus](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServiceLinkedRoleDeletionStatus.html)。在请求中，指定 `DeletionTaskId`。

   删除任务的状态可能是 `NOT_STARTED`、`IN_PROGRESS`、`SUCCEEDED` 或 `FAILED`。如果删除失败，则调用会返回失败的原因，以便您进行问题排查。