如何为 ECS 任务分配 IAM 角色
Posted
技术标签:
【中文标题】如何为 ECS 任务分配 IAM 角色【英文标题】:How to assign IAM Role for ECS Task 【发布时间】:2018-02-25 17:13:56 【问题描述】:可以为 ECS 任务分配 IAM 角色,以便与 AWS API 进行通信,而无需将用户凭证传递给任务。 这适用于 AWS CLI 和 SDK。 here 有相当不错的文档,但我找不到涵盖所有细节的合适示例,我将创建一个自我回答问题,以免其他人感到痛苦。
【问题讨论】:
【参考方案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?以上是关于如何为 ECS 任务分配 IAM 角色的主要内容,如果未能解决你的问题,请参考以下文章