使用分布式 Map 状态的 IAM 策略 - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用分布式 Map 状态的 IAM 策略

当您使用 Step Functions 控制台创建工作流时,Step Functions 可以根据工作流定义中的资源自动生成 IAM 策略。这些策略包括允许状态机角色调用分布式 Map 状态StartExecution API 操作所需的最低权限。这些策略还包括 Step Functions 访问 Amazon 资源(例如 Amazon S3 存储桶和对象以及 Lambda 函数)所需的最低权限。我们建议在您的 IAM 策略中仅包含这些必需的权限。例如,如果您的工作流包含分布式模式下的 Map 状态,则将策略范围缩小到包含您的数据集的特定 Amazon S3 存储桶和文件夹。

重要

如果您在分布式 Map 状态 输入中指定了 Amazon S3 存储桶和对象或前缀,并将参考路径指向现有键值对,请务必更新工作流程的 IAM 策略。将策略范围缩小到运行时该路径解析到的存储桶和对象名称。

运行分布式 Map 状态的 IAM 策略示例

当您在工作流中包含分布式 Map 状态 时,Step Functions 需要适当的权限才能允许状态机角色为分布式 Map 状态 调用 StartExecution API 操作。

以下 IAM 策略示例授予您的状态机角色运行分布式 Map 状态 所需的最低权限。

注意

确保将 stateMachineName 替换为使用分布式 Map 状态 的状态机的名称。例如,arn:aws:states:us-east-2:123456789012:stateMachine:mystateMachine

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "states:StartExecution" ], "Resource": [ "arn:aws:states:region:accountID:stateMachine:stateMachineName" ] }, { "Effect": "Allow", "Action": [ "states:DescribeExecution", "states:StopExecution" ], "Resource": "arn:aws:states:region:accountID:execution:stateMachineName:*" } ] }

redriving分布式 Map 的 IAM 策略示例

您可以通过redriving父工作流,重新启动未成功的子工作流执行。redriven父工作流会redrives所有未成功的状态,包括分布式 Map。确保您的执行角色具有允许其在父工作流上调用 RedriveExecution API 操作所需的最低权限。

下面的 IAM 策略示例授予状态机角色redriving分布式 Map 状态 所需的最低权限。

注意

确保将 stateMachineName 替换为使用分布式 Map 状态 的状态机的名称。例如,arn:aws:states:us-east-2:123456789012:stateMachine:mystateMachine

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "states:RedriveExecution" ], "Resource": "arn:aws:states:us-east-2:123456789012:execution:myStateMachine/myMapRunLabel:*" } ] }

从 Amazon S3 数据集读取数据的 IAM 策略示例

以下 IAM 策略示例授予使用 ListObjectsV2GetObjectAPI 操作访问您的 Amazon S3 数据集所需的最低权限。

例 Amazon S3 对象作为数据集的 IAM 策略

以下示例显示了一个 IAM 策略,该策略可授予访问名为 myBucket 的 Amazon S3 存储桶的 processImages 中组织的对象的最低权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::myBucket" ], "Condition": { "StringLike": { "s3:prefix": [ "processImages" ] } } } ] }
例 将 CSV 文件作为数据集的 IAM 政策

以下示例显示一个 IAM 策略,该策略授予可授予访问名为 ratings.csv 的 CSV 文件的最低权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::myBucket/csvDataset/ratings.csv" ] } ] }
例 Amazon S3 清单作为数据集的 IAM 策略

以下示例显示了一个 IAM 策略,可授予访问 Amazon S3 清单报告的最低权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::destination-prefix/source-bucket/config-ID/YYYY-MM-DDTHH-MMZ/manifest.json", "arn:aws:s3:::destination-prefix/source-bucket/config-ID/data/*" ] } ] }

将数据写入 Amazon S3 存储桶的 IAM 策略示例

下面的 IAM 策略示例授予使用 PutObject API 操作将子工作流执行结果写入 Amazon S3 存储桶中名为 csvJobs 的文件夹所需的最低权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload" ], "Resource": [ "arn:aws:s3:::resultBucket/csvJobs/*" ] } ] }

Amazon KMS key 加密的 Amazon S3 存储桶的 IAM 权限

分布式 Map 状态 使用多部份内容上传将子工作流执行结果写入 Amazon S3 存储桶。如果使用 Amazon Key Management Service (Amazon KMS) 密钥对存储桶进行加密,则还必须在 IAM 策略中包含对密钥执行 kms:Decryptkms:Encryptkms:GenerateDataKey 操作的权限。这些权限是必需的,因为 Amazon S3 必须在完成分段上传之前解密并读取加密的文件段中的数据。

下面的 IAM 策略示例对用于加密 Amazon S3 存储桶的密钥的 kms:Decryptkms:Encryptkms:GenerateDataKey 操作授予了权限。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey" ], "Resource": [ "arn:aws:kms:us-east-1:123456789012:key/111aa2bb-333c-4d44-5555-a111bb2c33dd" ] } }

有关更多信息,请参阅 Amazon 知识中心 中的用 Amazon KMS key 加密将大型文件上传到 Amazon S3

如果您的 IAM 用户或角色与 Amazon Web Services 账户 相同KMS key,则您必须对密钥策略拥有这些权限。如果您的 IAM 用户或角色属于与 KMS key 不同的账户,您必须在密钥政策和 IAM 用户或角色中具有这些权限。