【问题标题】:How to assign IAM Role for ECS Task如何为 ECS 任务分配 IAM 角色
【发布时间】:2018-02-25 17:13:56
【问题描述】:

可以为 ECS 任务分配 IAM 角色,以便与 AWS API 进行通信,而无需将用户凭证传递给任务。 这适用于 AWS CLI 和 SDK。 here 有相当不错的文档,但我找不到涵盖所有细节的合适示例,我将创建一个自我回答问题,以免其他人感到痛苦。

【问题讨论】:

    标签: amazon-web-services aws-sdk amazon-iam amazon-cloudwatch amazon-ecs


    【解决方案1】:

    我创建了一个Git repo with the full example。重要的一点是:

    • 使用 AssumeRolePolicyDocument 创建 IAM 角色定义。
    • 将 IAM 角色分配给任务。
    • 使用 AWS JS 开发工具包。

      IAMRole:
      Type: AWS::IAM::Role
      Properties:
          RoleName: !Sub role-task-${AWS::StackName} # Doesn't matter too much but let's make it nice anyway
          Path: / # No idea about this one but / seems to work
          # This is the funky stuff.. don't try to understand just copy-paste. Source: http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_IAM_role.html
          AssumeRolePolicyDocument: |
              {
                  "Statement": [{
                      "Effect": "Allow",
                      "Principal": { "Service": [ "ecs-tasks.amazonaws.com" ]},
                      "Action": [ "sts:AssumeRole" ]
                  }]
              }
          Policies:
              - PolicyName: !Sub ecs-task-${AWS::StackName}
                # You can add any actions here you want your container to be allowed to execute.
                PolicyDocument:
                  {
                      "Version": "2012-10-17",
                      "Statement": [{
                              "Effect": "Allow",
                              "Action": [
                                  "cloudwatch:PutMetricData" # more actions if needed
                              ],
                              "Resource": "*"
                      }]
                  }
      

    AWS 开发工具包的初始化。 AWS 开发工具包将自动检测容器是否有权访问角色凭证并自行初始化。除了创建 API 对象之外,您无需进行任何初始化。

     var AWS = require('aws-sdk');
    
     var cw = new AWS.CloudWatch();
     var s3 = new AWS.S3();
    

    【讨论】:

    • 您不需要手动获取凭据或使用这些凭据初始化 SDK;所有 SDK(在引入该功能之后)都应该自动执行此操作。查看here 了解最低 SDK 版本。
    • 那么初始化代码会是什么样子?只是new AWS.Config()?我试图在不手动获取凭据的情况下让它工作,但我没有管理。
    • 我不熟悉用于 JavaScript 的 SDK,但看起来默认的凭据提供程序链是正确的:github.com/aws/aws-sdk-js/blob/…
    • 所以解决方案是您根本不应该乱用 AWS.Config。你现在可以检查它是否正确@SamuelKarp?
    猜你喜欢
    • 2021-04-19
    • 2019-05-10
    • 1970-01-01
    • 2018-11-05
    • 2019-11-26
    • 2016-06-08
    • 1970-01-01
    • 2020-12-05
    • 2021-01-22
    相关资源
    最近更新 更多