

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

# 在 Amazon Bedrock 中为 Amazon Bedrock 流创建服务角色
<a name="flows-permissions"></a>

要在 Amazon Bedrock 中创建和管理流，您必须使用具有本页所列必要权限的服务角色。您可以使用 Amazon Bedrock 在控制台中自动为您创建的服务角色，也可以使用您自己自定义的服务角色。

**注意**  
如果您使用 Amazon Bedrock 在控制台中自动为您创建的服务角色，那么如果您向工作流中添加节点并保存工作流，它就会动态附加权限。但是，如果您删除节点，相关权限不会被删除，因此您必须删除不再需要的权限。要管理为您创建的角色的权限，请按照《IAM 用户指南》中[修改角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_modify.html)中的步骤操作。

要为 Amazon Bedrock Flows 创建自定义服务角色，请按照创建角色中的步骤[创建 IAM 角色以向AWS服务委派权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。然后将以下权限附加到此角色。
+ 信任策略
+ 以下基于身份的权限：
  + 对流将使用的 Amazon Bedrock 基础模型的访问权限。将流中使用的每个模型添加到 `Resource` 列表。
  + 如果您使用预置吞吐量调用模型，则需要拥有访问和调用预置模型的权限。将流中使用的每个模型添加到 `Resource` 列表。
  + 如果您调用自定义模型，则需要拥有访问和调用自定义模型的权限。将流中使用的每个模型添加到 `Resource` 列表。
  + 基于您添加到工作流中的节点的权限：
    + 如果您包含使用提示管理器中的提示的提示节点，则需要拥有访问提示的权限。将流中使用的每个提示添加到 `Resource` 列表。
    + 如果您包含知识库节点，则需要拥有查询知识库的权限。将流中查询的每个知识库添加到 `Resource` 列表。
    + 如果您包含代理节点，则需要拥有调用代理别名的权限。将流中调用的每个代理添加到 `Resource` 列表。
    + 如果您包含 S3 检索节点，则需要拥有访问要从中检索数据的 Amazon S3 存储桶的权限。将要从中检索数据的每个存储桶添加到 `Resource` 列表。
    + 如果您包含 S3 存储节点，则需要拥有对存储输出数据的 Amazon S3 存储桶的写入权限。将要写入数据的每个存储桶添加到 `Resource` 列表。
    + 如果您为知识库节点或提示节点包含护栏，则需要在流中应用护栏的权限。将流中使用的每个护栏添加到 `Resource` 列表。
    + 如果您添加了 Lambda 节点，则需要调用 Lambda 函数的权限。将需要调用的每个 Lambda 函数添加到 `Resource` 列表。
    + 如果您添加了 Amazon Lex 节点，则需要使用 Amazon Lex 机器人的权限。将需要使用的每个机器人别名添加到 `Resource` 列表。
    + 如果您加密了在流中调用的任何资源，则需要拥有解密密钥的权限。将每个密钥添加到 `Resource` 列表中。
+ 如果您加密了流，则还需要将密钥策略附加到用于加密流的 KMS 密钥。

**注意**  
最近实施了以下变更：  
以前，AWS LambdaAmazon Lex 资源是使用 Amazon Bedrock 服务主体调用的。对于在 2024-11-22 之后创建的流程，这种行为正在发生变化，Amazon Bedrock Flows 服务角色将用于调用和 Amazon AWS Lambda Lex 资源。如果您在 2024 年 11 月 22 日之前创建了任何使用这两种资源的流程，则应使用和 Amazon AWS Lambda Lex 权限更新您的 Amazon Bedrock Flows 服务角色。
以前，提示管理器资源是使用 `bedrock:GetPrompt` 操作呈现的。对于在 2024 年 11 月 22 日之后创建的流，此行为将发生变化，届时将使用 `bedrock:RenderPrompt` 操作来呈现提示资源。如果您在 2024 年 11 月 22 日之前创建了使用提示资源的流，则应使用 `bedrock:RenderPrompt` 权限更新您的 Amazon Bedrock 流服务角色。
如果您使用了 Amazon Bedrock 在控制台中自动为您创建的服务角色，当您保存流时，Amazon Bedrock 会动态附加连接的权限。

**Topics**
+ [

## 信任关系
](#flows-permissions-trust)
+ [

## 工作流服务角色的基于身份的权限。
](#flows-permissions-identity)

## 信任关系
<a name="flows-permissions-trust"></a>

将以下信任策略附加到流执行角色，以允许 Amazon Bedrock 担任此角色并管理流。根据需要*values*更换。该策略在 `Condition` 字段中包含了可选的条件键（参阅 [Amazon Bedrock 的条件键](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrock.html#amazonbedrock-policy-keys)和 [AWS 全局条件上下文键](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrock.html#amazonbedrock-policy-keys)），建议您将其作为最佳安全实践使用。

**注意**  
作为最佳实践，请在创建流程 ID 后将其替换为流程 ID。*\$1*

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "FlowsTrustBedrock",
            "Effect": "Allow",
            "Principal": {
                "Service": "bedrock.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "123456789012"
                },
                "ArnLike": {
                    "AWS:SourceArn": "arn:aws:bedrock:us-east-1:123456789012:flow/*"
                }
            }
        }
    ]
}
```

------

## 工作流服务角色的基于身份的权限。
<a name="flows-permissions-identity"></a>

附加以下策略以为服务角色提供权限，并*values*根据需要进行替换。策略包含以下语句。如果某个语句不适用于您的应用场景，可以省略。该策略在 `Condition` 字段中包含了可选的条件键（参阅 [Amazon Bedrock 的条件键](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrock.html#amazonbedrock-policy-keys)和 [AWS 全局条件上下文键](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrock.html#amazonbedrock-policy-keys)），建议您将其作为最佳安全实践使用。
+ 对流将使用的 Amazon Bedrock 基础模型的访问权限。将流中使用的每个模型添加到 `Resource` 列表。
+ 如果您使用预置吞吐量调用模型，则需要拥有访问和调用预置模型的权限。将流中使用的每个模型添加到 `Resource` 列表。
+ 如果您调用自定义模型，则需要拥有访问和调用自定义模型的权限。将流中使用的每个模型添加到 `Resource` 列表。
+ 基于您添加到工作流中的节点的权限：
  + 如果您包含使用提示管理器中的提示的提示节点，则需要拥有访问提示的权限。将流中使用的每个提示添加到 `Resource` 列表。
  + 如果您包含知识库节点，则需要拥有查询知识库的权限。将流中查询的每个知识库添加到 `Resource` 列表。
  + 如果您包含代理节点，则需要拥有调用代理别名的权限。将流中调用的每个代理添加到 `Resource` 列表。
  + 如果您包含 S3 检索节点，则需要拥有访问要从中检索数据的 Amazon S3 存储桶的权限。将要从中检索数据的每个存储桶添加到 `Resource` 列表。
  + 如果您包含 S3 存储节点，则需要拥有对存储输出数据的 Amazon S3 存储桶的写入权限。将要写入数据的每个存储桶添加到 `Resource` 列表。
  + 如果您为知识库节点或提示节点包含护栏，则需要在流中应用护栏的权限。将流中使用的每个护栏添加到 `Resource` 列表。
  + 如果您添加了 Lambda 节点，则需要调用 Lambda 函数的权限。将需要调用的每个 Lambda 函数添加到 `Resource` 列表。
  + 如果您添加了 Amazon Lex 节点，则需要使用 Amazon Lex 机器人的权限。将需要使用的每个机器人别名添加到 `Resource` 列表。
  + 如果您加密了在流中调用的任何资源，则需要拥有解密密钥的权限。将每个密钥添加到 `Resource` 列表中。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "InvokeModel",
            "Effect": "Allow",
            "Action": [
                "bedrock:InvokeModel"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1::foundation-model/ModelId"
            ]
        },
        {
            "Sid": "InvokeProvisionedThroughput",
            "Effect": "Allow",
            "Action": [
                "bedrock:InvokeModel",
                "bedrock:GetProvisionedModelThroughput"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1:123456789012:provisioned-model/ModelId"
            ]
        },
        {
            "Sid": "InvokeCustomModel",
            "Effect": "Allow",
            "Action": [
                "bedrock:InvokeModel",
                "bedrock:GetCustomModel"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1:123456789012:custom-model/ModelId"
            ]
        },
        {
            "Sid": "UsePromptFromPromptManagement",
            "Effect": "Allow",
            "Action": [
                "bedrock:RenderPrompt"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1:123456789012:prompt/PromptId"
            ]
        },
        {
            "Sid": "QueryKnowledgeBase",
            "Effect": "Allow",
            "Action": [
                "bedrock:Retrieve"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1:123456789012:knowledge-base/KnowledgeBaseId"
            ]
        },
        {
            "Sid": "InvokeAgent",
            "Effect": "Allow",
            "Action": [
                "bedrock:InvokeAgent"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1:123456789012:agent-alias/AgentId/AgentAliasId"
            ]
        },
        {
            "Sid": "AccessS3Bucket",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "123456789012"
                }
            }
        },
        {
            "Sid": "WriteToS3Bucket",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket",
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "123456789012"
                }
            }
        },
        {
            "Sid": "GuardrailPermissions",
            "Effect": "Allow",
            "Action": [
                "bedrock:ApplyGuardrail"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1:123456789012:guardrail/GuardrailId"
            ]
        },
        {
            "Sid": "LambdaPermissions",
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "arn:aws:lambda:us-east-1:123456789012:function:FunctionId"
            ]
        },
        {
            "Sid": "AmazonLexPermissions",
            "Effect": "Allow",
            "Action": [
                "lex:RecognizeUtterance"
            ],
            "Resource": [ 
                "arn:aws:lex:us-east-1:123456789012:bot-alias/BotId/BotAliasId"
            ]
        },
        {
            "Sid": "KMSPermissions",
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:123456789012:key/KeyId"
            ],
             "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "123456789012"
                }
            }
        }
    ]
}
```

------