【问题标题】:Use External Id in cross-account role of AWS using Serverless Framework使用无服务器框架在 AWS 的跨账户角色中使用外部 ID
【发布时间】:2019-11-06 10:15:58
【问题描述】:

问题出在这里:我需要使用 AWS 账户 A(根 AWS 账户 A)中的 Lambda 函数将一些数据写入 AWS 账户 B(根 AWS 账户 B)中的 DynamoDB 表。所有项目都是用 Node.js 中的无服务器框架编写的。

我知道我需要在 Lambda 函数中使用跨账户角色来执行此操作。由于 Serverless 使用的模板与 cloudformation 模板有很多相似之处。然后我对如何使用跨账户角色做了一些研究,这里是AWS文档https://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/id_roles_create_for-user_externalid.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 规范。 serverless 中的 yaml 模板在我的项目中是这样的:

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

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

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

我想知道根据需求指定模板的正确方法是什么。 感谢任何形式的帮助

【问题讨论】:

    标签: amazon-web-services amazon-iam serverless-framework serverless aws-serverless


    【解决方案1】:

    您可以通过创建 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>"
    

    【讨论】:

      猜你喜欢
      • 2019-05-01
      • 2022-09-24
      • 2021-02-01
      • 2017-03-16
      • 2020-04-03
      • 2020-01-01
      • 2021-12-04
      • 1970-01-01
      • 2016-11-02
      相关资源
      最近更新 更多