IAM使用分布式地图状态的策略 - AWS Step Functions

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

IAM使用分布式地图状态的策略

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

重要

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

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

当您在工作流中包含分布式地图状态时,Step Functions 需要相应的权限才能允许状态机角色调用分布式地图状态StartExecutionAPI操作。

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

注意

确保将 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的IAM策略示例

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

以下IAM策略示例向您的状态机角色授予分布式地图状态所需的最低权限。redriving

注意

确保将 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 数据集所需的最低权限。

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

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

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

以下示例显示了授予访问名为CSV的文件的最低权限的IAM策略ratings.csv

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

以下示例显示了授予访问 Amazon S3 库存报告的最低权限的IAM策略。

{ "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策略示例授予将子工作流程执行结果写入名为的文件夹所需的最低权限 csvJobs 使用PutObjectAPI操作在 Amazon S3 存储桶中。

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

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

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

以下IAM策略示例向用于加密您的 Amazon S3 存储桶的密钥授予对kms:Encrypt、和kms:GenerateDataKey操作的权限。kms:Decrypt

{ "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" ] } }

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

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