Предполагаемая роль IAM не авторизована для выполнения: states:GetActivityTask на ресурсе: arn:aws:states::012345678910: роль /
У меня есть стек 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, я пытаюсь позвонить get_activity_task
используя ключи от моего ActivityAccessRole
,
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, чтобы дать соответствующие разрешения?
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" }
Где вы должны отметить последние две строки. По какой-то причине нужно добавить оба ресурса. Настоящий и тот, который выскочил из вакуума.