使用无服务器框架在AWS的跨学会角色中使用外部ID



这是一个问题:我需要在AWS帐户中使用lambda函数A(在root AWS帐户A中(将一些数据写入AWS帐户B中的DynamoDB表(在Root AWS中(帐户b(。所有项目中的所有项目都使用Node.js中的无服务器框架。

我知道我需要在lambda函数中使用跨元角色来做到这一点。由于无服务器使用类似于云形式模板的许多内容的模板。然后,我对如何使用跨帐户角色进行了一些研究,这是AWS文档https://docs.aws.aws.amazon.com/zh_cn/iam/latest/userguide/ID_ROLES_CREATE_FOR-USER_FOR-USER_EXTERNENID.HTML.HTML

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Principal": {"AWS": "Example Corp's AWS Account ID"},
    "Condition": {"StringEquals": {"sts:ExternalId": "12345"}}
  }
}

这是此类任务的样本IAM规范。无服务器中的YAML模板在我的项目中看起来像这样:

    - Effect: Allow
      Principal: 
        AWS: 'AWS Account B External ID'
      Action:
        - sts:AssumeRole
      Resource:
        - '*'    

但是,当我尝试部署无服务器模板时:我有这样的错误:

发生错误:iamrolelambdaexecution-策略文档不应指定委托人。(服务:AmazonIdentityManagement;状态代码:400;错误代码:MalformedPolecyDocument;请求ID:XXXX-XXXX-XXXX-XXXX-XXXX-XXXX(。

我想知道根据需求指定模板的正确方法。感谢任何种类的帮助

您可以通过创建AWS::IAM:Role资源来使用外部ID允许假定角色。下面的示例可以访问S3存储桶,但是方法是相同的。

ExternalS3AccessRole:
  Type: AWS::IAM::Role
  Properties:
    RoleName: SomeRoleName
    AssumeRolePolicyDocument:
      Version: '2012-10-17'
      Statement:
        - Effect: Allow
          Action: sts:AssumeRole
          Principal:
            AWS: "Example Corp's AWS Account ID"
          Condition:
            StringEquals:
              'sts:ExternalId': "12345"
    Policies:
      - PolicyName: ExternalS3AccessPolicy
        PolicyDocument:
          Version: '2012-10-17'
          Statement:
            - Effect: Allow
              Action:
                - s3:Get*
                - s3:List*
              Resource:
                - "arn:aws:s3:::<BUCKET_NAME>/*"
            - Effect: Allow
              Action:
                - s3:Get*
                - s3:List*
              Resource:
                - "arn:aws:s3:::<BUCKET_NAME>"

相关内容

  • 没有找到相关文章

最新更新