- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我通过 AWS 控制台手动运行 ECS Fargate 任务,AWS 会很好地自动创建 ECS task execution IAM role对我来说,我什至可以在 CloudFormation 模板中引用它,例如:
ExecutionRoleArn: !Sub "arn:aws:iam::${AWS::AccountId}:role/ecsTaskExecutionRole"
此角色使用 AWS 托管的 AmazonECSTaskExecutionRolePolicy
。上述文档解释了如何通过控制台或 CLI 创建此角色。基本上,您创建此角色(或让 AWS 为您创建)一次,然后您可以在 CloudFormation 模板中永远引用它。 AWS 自动创建的 ecsTaskExecutionRole 不引用任何 AWS 区域,如果通过控制台或 CLI 创建,文档也没有提及有关该角色的区域注意事项的任何内容。
但我不想手动创建 ecsTaskExecutionRole
。如果我创建一个新的 AWS 帐户,我想简单地部署一个新的 CloudFormation 堆栈,而不必担心我必须先进入并手动配置某些内容。 (毕竟,这就是 CloudFormation 的核心存在理由!)AWS 没有告诉我如何做,但在阅读 AWS::IAM::Role
的文档后我相信这很简单,如下所示。 (文档指出,通过 CloudFormation 创建角色需要我在某处指定 CAPABILITY_IAM
,例如使用 CLI,但这似乎并不困难。)
EcsTaskExecutionRole:
Type: AWS::IAM::Role
DeletionPolicy: Retain
Properties:
Description: AWS managed policy role for executing tasks on ECS.
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service:
- ecs-tasks.amazonaws.com
Action:
- sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
RoleName: ecsTaskExecutionRole
请注意,我设置了 deletion policy到保留
。这样,我的所有 CloudFormation 模板都可以根据需要创建一次角色,就像我通过控制台运行 ECS Fargate 任务时 AWS 本身所做的那样,然后将其保留在那里。
但是在文档中我读到了这个不祥的警告:
Naming an IAM resource can cause an unrecoverable error if you reuse the same template in multiple Regions. To prevent this, we recommend using
Fn::Join
andAWS::Region
to create a Region-specific name, as in the following example:{"Fn::Join": ["", [{"Ref": "AWS::Region"}, {"Ref": "MyResourceName"}]]}
.
documentation for CAPABILITY_NAMED_IAM
同样说:
If your template contains custom named IAM resources, don't create multiple stacks reusing the same template. IAM resources must be globally unique within your account. If you use the same template to create multiple stacks in different Regions, your stacks might share the same IAM resources, rather than each having a unique one. Shared resources among stacks can have unintended consequences from which you can't recover. For example, if you delete or update shared IAM resources in one stack, you will unintentionally modify the resources of other stacks.
但是 AWS 创建的 ecsTaskExecutionRole 不指示任何区域,我认为我通过 CloudFormation 创建的这个角色将与该角色相同。有什么问题吗?
我的解释是,这种可怕的语言只是在说(尽管不是那么清楚),我应该小心,不要让一个 CloudFormation 模板删除正在另一个区域使用的角色(尽管我不想删除)如果同一区域中的另一个 CloudFormation 模板正在使用它,那么我不确定哪些区域与它有关)。因此,只要我在通过 CloudFormation 创建角色时使用 DeletionPolicy: Retain
,一切都应该没问题,或者至少不比使用 AWS 在以下情况下自动创建的 ecsTaskExecutionRole
角色差:我在控制台手动使用ECS。
我错过了什么吗?有没有什么方法可以使用 DeletionPolicy: Retain
通过 CloudFormation 创建 ecsTaskExecutionRole
与诱导 AWS 通过控制台运行 ECS 任务来创建相同的角色有什么不同?还有什么我没有考虑到的缺点吗?
最佳答案
从对我的问题的评论(感谢所有回复的人)中,我了解到通过 CloudFormation 管理单个帐户范围的 ECS 任务执行角色可能会比通过其他方式创建它带来更多奇怪的行为。此外,创建单个帐户范围角色来执行 ECS 任务的 AWS 方法无论如何都不是多个 CloudFormation 堆栈的最佳方法。
但是recently我发现,出于其他考虑因素,有时最好为每个服务创建任务执行角色,而不仅仅是为每个 CloudFormation 模板创建任务执行角色。最初在发布这个问题后,我为整个测试环境创建一个任务执行角色,然后将该角色用于各种服务。但如果服务从 Secrets Manager 注入(inject)密码,您将需要更细粒度的定义。
以下是您如何在 CloudFormation 中设置单个 ECS 任务执行角色以供所有服务使用:
Resources:
EcsTaskExecutionRole:
Type: AWS::IAM::Role
Properties:
RoleName: !Sub "${AWS::StackName}-${AWS::Region}-ecsTaskExecutionRole"
Description: "Role for executing tasks on ECS in region ${AWS::Region}."
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service:
- ecs-tasks.amazonaws.com
Action:
- sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
您甚至可以将其导出以用于相关(例如每个服务)CloudFormation 模板:
Outputs:
EcsTaskExecutionRoleArn:
Description: The ARN of the IAM role for executing ECS tasks.
Value: !Ref EcsTaskExecutionRole
Export:
Name: !Sub "${AWS::StackName}-${AWS::Region}:ecsTaskExecutionRoleArn"
在您需要将 secret 注入(inject)服务之前,这一切都很好。 AWS 托管 AmazonECSTaskExecutionRolePolicy
允许这些操作:
ecr:GetAuthorizationToken
ecr:BatchCheckLayerAvailability
ecr:GetDownloadUrlForLayer
ecr:BatchGetImage
日志:CreateLogStream
日志:PutLogEvents
请注意,secretsmanager:GetSecretValue
操作不在其中。假设您希望从 Secrets Manager 注入(inject)密码,以便 Spring Boot 应用程序与 DocumentDB 对话,如 Using Secrets Manager 中所述。并在 Disable Spring Boot Data MongoDB retryable writes in AWS ECS Fargate with CloudFormation 中进行说明:
Secrets:
- Name: SPRING_DATA_MONGODB_USERNAME
ValueFrom: !Sub "${DbCredentials}:username::"
- Name: SPRING_DATA_MONGODB_PASSWORD
ValueFrom: !Sub "${DbCredentials}:password::"
使用上面定义的 EcsTaskExecutionRole
是行不通的。您需要定义一个单独的角色,其中包含 secretsmanager:GetSecretValue
,如 IAM policy examples for secrets in AWS Secrets Manager 中所述。 。您可以继续将 secretsmanager:GetSecretValue
添加到您的自定义角色,但您可能不希望让所有服务都可以访问仅适用于其他服务的 secret (即 PoLP )。在这种情况下,最好为每个需要注入(inject) secret 的服务定义一个单独的角色。以下示例假设您将注入(inject) AWS::SecretsManager::Secret
上面引用的 DbCredentials
(如 https://stackoverflow.com/a/75999386 所示)
ServiceTaskExecutionRole:
Type: AWS::IAM::Role
Properties:
RoleName: !Sub "my-service-${AWS::Region}-taskExecRole"
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service:
- ecs-tasks.amazonaws.com
Action:
- sts:AssumeRole
Policies:
- PolicyName: !Sub "my-service-${AWS::Region}-secret-access-policy"
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- secretsmanager:GetSecretValue
Resource:
- !Ref DbCredentials
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
这将设置与本答案开头所示的相同的 ECS 任务执行角色,并具有仅访问 DbCredentials
key 的权限。
如果有人知道如何使用共享 EcsTaskExecutionRole
并仅根据具体情况添加检索 DbCredentials
的权限,而不创建新角色,请让我知道。
关于amazon-web-services - 通过 CloudFormation 创建 ECS ecsTaskExecutionRole 的 AWS 区域注意事项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75870686/
我有一个几乎可以构建的Maven / Grails应用,但在web.xml上找不到[my-app]\webapp\WEB-INF\web.xml。但是目录结构像往常一样包含web-app文件夹,而不是
正如我在标题中提到的:我想知道 web-service 和 web-socket 之间的区别?我们什么时候使用每一个? 谢谢! 最佳答案 一个web service是一个响应客户端 SOAP/REST
让我们看一个示例场景: 客户端打开一个网站并找到他从文本框中输入的两个数字的总和。然后单击“添加”按钮。两个参数通过 HTTP GET 发送到服务器,在服务器上写入 PHP 代码以添加数字,结果为回声
我知道这是一个老问题,肯定已经被回答了数百次,但我还无法找到令人满意的答案。 我正在创建一个应用程序,其他应用程序(移动/网络)将使用该应用程序来获取数据。现在我有两个选择: 将我的应用程序创建为简单
通过 Web 作业部署新功能有 3 种方法: 创建一个新的 Web 应用,并部署一个包含该函数的 Web 作业。 向现有 Web 作业添加一项新函数(这样您现在在一个 Web 作业中就拥有了多个函数)
我收到来自网络场景的通知,上面写着“问题”和“确定”。我想在问题发生时包含网络响应的内容。我不担心标题值,只担心网页的内容. 这是我可以在通知设置中引用的变量吗? 最佳答案 不幸的是 zabbix 不
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
嗨,这是一个理论问题,但我真的无法弄清楚 Web 应用程序、基于 Web 的应用程序和基于云的应用程序之间的区别。这个你能帮我吗。 最佳答案 @Matt 是对的 - 这真的无关紧要,但是,为了清楚起见
我正在尝试使用多个 Web 服务,这些服务在它们的 wsdl 中重新定义了一些相同的公共(public)类。我目前在网站中引用了它们,但我想转换为 Web 应用程序。 由于一些相同的类是从多个 Web
一个。我必须考虑哪些事项?b.当前应用程序正在执行多个存储过程。如果我创建等效的方法来执行这些过程,会有什么风险或挑战。 最佳答案 在架构上,将网络应用程序转换为网络服务时必须考虑的一件事是,对方法和
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 5年前关闭。 Improve thi
网络 API 和网络服务之间有什么区别吗?或者它们是同一个吗? 最佳答案 网络服务通常提供 WSDL您可以从中自动创建客户端 stub 。 Web 服务基于 SOAP protocol 。ASP.NE
我已经获得了我需要的所有资源。我将 Web 服务放入应用程序服务环境中,然后将 NSG 连接到应用程序服务环境使用的子网。然后,我允许 VNET 内的应用程序与 Web 服务进行通信,但它无法正常工作
我已经获得了我需要的所有资源。我将 Web 服务放入应用程序服务环境中,然后将 NSG 连接到应用程序服务环境使用的子网。然后,我允许 VNET 内的应用程序与 Web 服务进行通信,但它无法正常工作
我正在使用 stub 将我的网络服务相关测试与实际网络服务隔离开来。 你/我应该如何合并测试以确保我制作的响应与实际的网络服务匹配(我无法控制它)? 我不想知道怎么做,而是何时何地? 我应该为测试数据
我在互联网上搜索了很多,但我仍然没有得到网络服务和网络 API 之间的明显区别?我在某处读到所有 Web 服务都是 API,但所有 API 都不是 Web 服务。如何? 我所知道的是两者都允许利用其他
假设我已经完成了使用 JavaEE 制作的 Web 应用程序。这个 Web 应用程序包含登录系统,但最后它是非常基本的 Web 应用程序。我使用的是 GlassFish 3.1.2.2。 我想知道一旦
我希望设计者能够打开与我相同的解决方案文件。这可以通过 Expressions Web 实现吗? 最佳答案 简短的回答是“不”;但这是一个非常常见的请求,我知道很多人都希望下一个版本(无论何时)对此有
我正在尝试在 CF10 中创建一个 Web 服务对象。我已验证它在 SoapUI 中按预期工作。但是,当我在 CF 中运行它时,我得到一个错误,它无法找到在 WSDL 的导入语句中导入的 XSD。这是
我的要求是开发一个 Web 服务,充当外部 Web 服务和客户端之间的中间人。 我知道,我可以为我的服务设计一个wsdl,然后将外部wsdl映射到代码中我的wsdl。我的问题是有一个开源 api/工具
我是一名优秀的程序员,十分优秀!