gpt4 book ai didi

amazon-web-services - 如何在 .ebextension 中引用实例配置文件

转载 作者:行者123 更新时间:2023-12-05 06:44:21 26 4
gpt4 key购买 nike

我的弹性 beanstalk 应用程序中需要一个队列,因此我在我的 .ebextensions/app.conf 中使用此片段创建了队列和队列策略:

  Resources:
BackgroundTaskQueue:
Type: "AWS::SQS::Queue"
AllowWorkerSQSPolicy:
Type: "AWS::SQS::QueuePolicy"
Properties:
Queues:
-
Ref: "BackgroundTaskQueue"
PolicyDocument:
Version: "2008-10-17"
Id: "PublicationPolicy"
Statement:
-
Sid: "Allow-Create-Task"
Effect: "Allow"
Principal:
AWS: "*"
Action:
- "sqs:SendMessage"
Resource:
Fn::GetAtt:
- "BackgroundTaskQueue"
- "Arn"

不幸的是,我找不到在自动缩放组中引用我的 EC2 实例的实例配置文件的方法。 (目前队列对世界开放)我尝试了两种方法:

  1. 读取配置:

              Principal:
    AWS:
    Fn::GetOptionSetting:
    OptionName: "IamInstanceProfile"

OptionName 始终从 aws:elasticbeanstalk:customoption 命名空间中检索,但 IamInstanceProfile 是在 aws:autoscaling:launchconfiguration 命名空间中定义的据我所知。 -> 运气不好

  1. 从实际的 AWSEBAutoScalingLaunchConfiguration 资源中读取:

              Principal:
    AWS:
    Fn::GetAtt:
    - "AWSEBAutoScalingLaunchConfiguration"
    - "IamInstanceProfile"

此方法失败,因为属性 IamInstanceProfile 未公开。

有没有人找到让这样的政策发挥作用的方法?有谁知道如何指示 GetOptionSetting 查看不同的命名空间?有人找到了获取实例配置文件的方法吗?

最佳答案

您需要在 eb 环境之外设置实例配置文件。您可以使用“aws iam”命令创建策略、角色和实例配置文件 (http://docs.aws.amazon.com/cli/latest/reference/iam/index.html#cli-aws-iam),然后在选项设置中指定配置文件:

    namespace: aws:autoscaling:launchconfiguration
option_name: IamInstanceProfile
value: your-instance-profile-name

如果您使用的是 eb_deployer,则有一种独立的方法:

创建一个 CloudFormation 模板来定义您的资源堆栈,例如配置/我的资源.json:

{
"Outputs": {
"InstanceProfile": {
"Description": "defines what ec2 instance can do with aws resources",
"Value": { "Ref": "InstanceProfile" }
}
},

"Resources": {
"Role": {
"Type": "AWS::IAM::Role",
"Properties": {
"AssumeRolePolicyDocument": {
"Statement": [{
"Effect": "Allow",
"Principal": {
"Service": ["ec2.amazonaws.com"]
},
"Action": ["sts:AssumeRole"]
}]
},
"Path": "/",
"Policies": [ {
"PolicyName": "S3Access",
"PolicyDocument": {
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:Get*",
"s3:List*",
"s3:PutObject"
],
"Resource": "*"
}
]
}
}, {
"PolicyName": "SQSAccess",
"PolicyDocument": {
"Statement": [ {
"Effect": "Allow",
"Action": [
"sqs:ChangeMessageVisibility",
"sqs:DeleteMessage",
"sqs:ReceiveMessage",
"sqs:SendMessage"
],
"Resource": "*"
}]
}
}]
}
},
"InstanceProfile": {
"Type": "AWS::IAM::InstanceProfile",
"Properties": {
"Path": "/",
"Roles": [ { "Ref": "Role" } ]
}
}
}
}

在您的 eb_deployer.yml 中添加“资源”部分

  resources:
template: config/my-resources.json
capabilities:
- CAPABILITY_IAM
outputs:
InstanceProfile:
namespace: aws:autoscaling:launchconfiguration
option_name: IamInstanceProfile

在上面的示例中,我们定义了一个实例配置文件,其中包含允许对 S3 和 SQS 进行特定访问的策略。然后将实例配置文件名称(模板的输出)映射到 Elastic Beanstalk 选项设置。

看看这个:https://github.com/ThoughtWorksStudios/eb_deployer/wiki/Elastic-Beanstalk-Tips-and-Tricks#setup-instance-profile-for-your-ec2-instances

关于amazon-web-services - 如何在 .ebextension 中引用实例配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29590556/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com