【问题标题】:Assumed IAM Role is not authorized to perform: states:GetActivityTask on resource: arn:aws:states::012345678910:role/假定的 IAM 角色无权执行:states:GetActivityTask on resource:arn:aws:states::012345678910:role/
【发布时间】:2017-11-17 02:26:02
【问题描述】:

我有一个 Cloudformation 堆栈,例如,

---
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
  MyFavoriteActivity:
     Type: "AWS::StepFunctions::Activity"
     Properties:
       Name: "my-special-name"

  ActivityAccessRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              AWS:
                Fn::Sub: "arn:aws:iam::${AWS::AccountId}:user/my-special-user"
            Action:
              - sts:AssumeRole
      Policies:
        - PolicyName: "Activity_Role_Policy"
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: Allow
                Action:
                  - states:GetActivityTask
                Resource: { Ref: "MyFavoriteActivity" }

使用 Boto3,我尝试使用我的 ActivityAccessRole 中的键调用 get_activity_task

sfn_client = boto3.client('stepfunctions', **assumed_role_keys)
task = sfn_client.get_activity_task(
    activityArn='arn:aws:states:us-west-2:012345678910:activity:My-favorite-activity',
    workerName='my-worker'
)

但我得到一个错误,

An error occurred (AccessDeniedException) when calling the GetActivityTask operation:
User: arn:aws:sts::012345678910:assumed-role/some-prefix-ActivityAccessRole-some-hash/AssumeRoleSession1
is not authorized to perform: states:GetActivityTask on resource: arn:aws:states::012345678910:role/arn:aws:states:us-west-2:012345678910:activity:My-favorite-activity

我看到的问题是我从未创建过arn:aws:states::012345678910:role/arn:aws:states:us-west-2:012345678910:activity:My-favorite-activity(注意前缀)!

如何修复我的 CF 模板以提供适当的权限?

【问题讨论】:

  • 您究竟是如何配置“来自我的ActivityAccessRole 的密钥”的?这些钥匙是从哪里来的?它们不在堆栈中。
  • @kichik 类似于this。我不认为这是问题所在,因为如果您查看错误,它表明我正在使用假定的角色User: arn:...:AssumedRoleSession1。但我很可能是错的。
  • 使用Resource: "*"是否有效?
  • 我是这样做的:在您的角色“AssumeRolePolicyDocument”中,信任帐户而不是用户(即:信任根)。然后允许用户承担这个角色,使用附加到用户的策略,或者更好的是附加到包含该用户的组。
  • @kichik 有点像。一段时间后引发连接超时,但我也没有任何任务要完成。所以我实际上希望

标签: amazon-web-services amazon-cloudformation amazon-iam aws-step-functions


【解决方案1】:

这个问题非常愚蠢(或天才且文档记录不充分)。我需要改变我的角色,

  ActivityAccessRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              AWS:
                Fn::Sub: "arn:aws:iam::${AWS::AccountId}:user/frp-api-user"
            Action:
              - sts:AssumeRole
      Policies:
        - PolicyName: "Activity_Role_Policy"
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: Allow
                Action:
                  - states:GetActivityTask
                Resource:
                  - Fn::Sub: "arn:aws:states::${AWS::AccountId}:role/${MyFavoriteActivity}"
                  - { Ref: "MyFavoriteActivity" }

你应该注意最后两行的地方。出于某种原因需要添加这两种资源。真正的和从真空中弹出的那个。

【讨论】:

    猜你喜欢
    • 2020-07-10
    • 1970-01-01
    • 2021-02-12
    • 2021-08-29
    • 2017-01-29
    • 1970-01-01
    • 2021-09-11
    • 2020-07-19
    • 1970-01-01
    相关资源
    最近更新 更多