【问题标题】:Aws STS assume role for calling API GatewayAws STS 承担调用 API 网关的角色
【发布时间】:2021-12-29 19:44:43
【问题描述】:

我正在尝试使用 StsClient 假设角色(php aws sdk 3)调用 api 网关路由。一切正常,除了我不知道如何不在角色策略中“硬编码”sts 用户的会话 ARN。 这是我的无服务器代码:

Resources:
  ApiGatewayPolicy:
    Type: AWS::IAM::Policy
    Properties:
      PolicyName: my-policy-apigateway
      PolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Action:
              - execute-api:Invoke
            Resource:
              Fn::Join: [ "", [ "arn:aws:execute-api:", { "Ref": "AWS::Region" }, ':', { "Ref": "AWS::AccountId" }, ':', { "Ref": "ApiGatewayRestApi" }, '/*/GET/routeName/*/*/*' ] ]
            Effect: Allow
      Roles:
        - Ref: IamRoleApiGatewayExecution

和 STS 政策(使用 STS 而不是 IAM 用户的 ARN):

Resources:
  IamRoleApiGatewayExecution:
    Type: 'AWS::IAM::Role'
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              AWS:
                Fn::Join: [ "", [ "arn:aws:sts::", { "Ref": "AWS::AccountId" }, ':assumed-role/YYYYYYYYYYYYY/XXXXXXXXXXXXXXXXXXXXXXXXXXX' ] ]
            Action: sts:AssumeRole

我确实使用 php aws sdk(另一个项目)调用路由:

        $stsClient = new StsClient([
            'region' => 'eu-west-1',
            'version' => 'latest',
        ]);
        $ARN = "arn:aws:iam::.........:role/dating-crop-dev-IamRoleApiGatewayExecution-..........";

        $sessionName = uniqid('api-gateway-access-');
        $result = $stsClient->assumeRole([
            'RoleArn' => $ARN,
            'RoleSessionName' => $sessionName,
        ]);
........

正如我所说,一切正常,除了我不知道如何使 XXXXXXXXXXXXXXXXXXXXXXXXXXX 动态化,否则我必须在几个小时后更新它(最坏的做法:))。 感谢您的任何建议。

【问题讨论】:

    标签: php amazon-web-services aws-serverless aws-php-sdk


    【解决方案1】:

    我已通过在角色策略中将 sts 用户 ARN 替换为 IAM 角色 ARN 来解决此问题。所以

                Principal:
                  AWS:
                    Fn::Join: [ "", [ "arn:aws:sts::", { "Ref": "AWS::AccountId" }, ':assumed-role/YYYYYYYYYYYYY/XXXXXXXXXXXXXXXXXXXXXXXXXXX' ] ]
    

    变成:

                Principal:
                  Service: apigateway.amazonaws.com
                  AWS:
                    Fn::Join: [ "", [ "arn:aws:iam::", { "Ref": "AWS::AccountId" }, ':role/myRoleName' ] ]
    
    

    而且效果很好。

    【讨论】:

      猜你喜欢
      • 2021-10-10
      • 1970-01-01
      • 2020-04-29
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多