我正在使用会话管理器/运行命令来访问我的一些实例,它适用于某些实例,但不适用于其他实例。
我对一些实例具有相同的配置、相同的安全组、IAM 角色、使用相同代理版本安装的代理,并且我已使用以下内容通过 AWS CLI 验证了这些实例:
aws ssm describe-instance-information \
--instance-information-filter-list key=InstanceIds,valueSet=instance-id
Run Code Online (Sandbox Code Playgroud)
我可以启动会话,它会打开终端视图,并在延迟后向我发送此错误或黑屏,
Your session has been terminated for the following reasons:
document process failed unexpectedly: document worker timed out,
check [ssm-document-worker]/[ssm-session-worker] log for the crash reason
Run Code Online (Sandbox Code Playgroud)
我尝试过更新代理版本、通过 CLI 验证代理是否已安装并处于活动状态、三重检查安全组、IAM 角色和差异,但遇到了困难。
这是其他人看到的 AWS 错误还是我的配置中遗漏了某些内容?我可能遗漏了一些东西,但我所看到的所有内容都显示了两个具有相同属性的实例,其中一个实例适用于 SSM 会话管理器,而另一个实例则不适用。
我正在尝试设置一个 AWS lambda,它将在我的 EC2 实例中启动 SSM 会话并运行命令。现在为了简单起见,我只是想运行ls。这是我的 lambda 函数:
import json
import boto3
def lambda_handler(commands, context):
"""Runs commands on remote linux instances
:param client: a boto/boto3 ssm client
:param commands: string, each one a command to execute on the instance
:return: the response from the send_command function (check the boto3 docs for ssm client.send_command() )
"""
client = boto3.client('ssm')
print ("Hello world")
resp = client.send_command(
DocumentName="AWS-RunShellScript",
# Would normally pass commands param here but hardcoding it instead for …Run Code Online (Sandbox Code Playgroud) 我有一个 EC2 实例,通常通过手动 sshing 到盒子上使用ec2-user。随着时间的推移,该盒子已经积累了各种自定义配置,例如 docker 配置和对我们私人存储库的 git 访问权限。
我尝试使用 AWS System Manager 自动执行盒子上的一些命令,但系统管理员以 登录root,缺少上述的ec2-user. 是否可以以某种方式ec2-user从系统管理员登录或在登录时更改用户?因为盒子已经定制了几个月,所以如何从头开始重新配置并不明显(也没有时间深入研究)。
已尝试通过更改用户,su ec2-user但无济于事。
作为解决方法,我只是直接在盒子上运行 SSH 命令,例如
ssh -i ~/.ssh/MYPEM.pem ec2-user@MYINSTANCE.us-east-2.compute.amazonaws.com "touch FOOFILE && git clone REPO"
但这完全避开了系统管理器,并且是不可取的。
作为最佳实践,我希望避免在 Git 中保密,并将其存储在 AWS SSM 中。
有什么方法可以从 AWS System Manager 获取值并用于创建 Kubernetes Secret?
我将策略:AmazonSSMManagedInstanceCore 添加到 Windows 实例(正在运行 SSM 代理)的实例配置文件中...但它没有显示在会话管理器下。
它一直显示:“没有与所需 IAM 角色关联的实例。” 知道是什么原因造成的吗?
(我也尝试过使用 amazon linux 2 实例——结果相同)。
编辑:是的,该实例位于私有子网中,可能无法访问互联网——所以这可能是问题。
如何从以下命令的以下输出中仅打印 Value 属性的值
aws ssm get-parameter --name "/test/ip/cidr" --profile test
{
"Parameter": {
"Name": "/test/ip/cidr",
"Type": "String",
"Value": "172.18.0.0/20",
"Version": 1,
"LastModifiedDate": 1585251360.78,
"ARN": "arn:aws:ssm:us-east-1:123233:parameter/test/ip/cidr",
"DataType": "text"
}
}
Run Code Online (Sandbox Code Playgroud)
尝试运行以下命令,但打印类似 [{"Value": "172.18.0.0/20"}] 但只想查看 172.18.0.0/20
aws ssm get-parameters --names "/test/ip/cidr" --query "Parameters[*].{Value:Value}" --profile test
[
{
"Value": "172.18.0.0/20"
}
]
Run Code Online (Sandbox Code Playgroud) Lambda 函数 - Node.js
const AWS = require('aws-sdk')
exports.handler = async (event) => {
var appconfig = new AWS.AppConfig({ apiVersion: '2019-10-09' })
var params = {
ApplicationId: '6xeris1',
ConfigurationProfileId: '0ck2ijf'
}
const data = await appconfig.getConfigurationProfile(params).promise().catch(err => {
console.log(err)
})
if (data) {
console.log(data)
const response = {
statusCode: 200,
headers: {
'Access-Control-Allow-Headers': 'Content-Type',
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
},
body: JSON.stringify(data)
}
return response
} else {
const response = {
statusCode: 500,
headers: {
'Access-Control-Allow-Headers': 'Content-Type',
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': …Run Code Online (Sandbox Code Playgroud) 我使用 CloudFormation 创建了一个 AWS SSM 文档:
SSMDocument::
Type: AWS::SSM::Document
Properties:
DocumentType: Command
Content:
schemaVersion: '2.2'
description: Run a PowerShell script
parameters:
Node1:
type: String
Node2:
type: String
List:
type: StringList
mainSteps:
- action: aws:runPowerShellScript
name: PreDeploy
precondition:
StringEquals:
- platformType
- Windows
inputs:
timeoutSeconds: '3600'
runCommand:
- |
# Retrieve values from parameters
$IpNode1 = "{{Node1}}"
$IpNode2 = "{{Node2}}"
$List = "{{EnvNames}}"
Run Code Online (Sandbox Code Playgroud)
该文档包含PowerShell在新创建的实例上执行的脚本。我正在传递参数,其中之一($List)具有 type StringList,问题是我收到错误:
Parameter "List" is "STRING_LIST" type and can't be used as …Run Code Online (Sandbox Code Playgroud) 我正在运行以下命令:
\nKEY=test\nQUERY=ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-20210430\n\naws ec2 create-key-pair --key-name $KEY --query \'KeyMaterial\' --output text > $KEY.pem\nchmod 600 $KEY.pem\n\naws ec2 create-security-group --group-name "$KEY" --description "$KEY" --output text > $KEY.sg.txt\nSGID=$(cat $KEY.sg.txt)\naws ec2 authorize-security-group-ingress --group-id $SGID --protocol tcp --port 22 --cidr 0.0.0.0/0 > $KEY.sg.json\n\nAMIID=$(aws ec2 describe-images --filters "Name=name,Values=$QUERY" --query "reverse(sort_by(Images, &CreationDate))[0].[ImageId]" --output text)\nINSTANCEID=$(aws ec2 run-instances --count 1 --instance-type t2.micro --key-name "$KEY" --security-group-ids "$KEY" --image-id $AMIID --query \'Instances[*].InstanceId\' --output text)\n\n# after a wait, instance appears running\n\naws ssm describe-instance-information --output text\n# prints nothing\n\naws ssm send-command --instance-ids "$INSTANCEID" --document-name …Run Code Online (Sandbox Code Playgroud) 他们似乎是为了同一个目的。它们都可以分解为多个步骤,每个步骤都是一个脚本。命令或自动化文档也可以都是状态管理器中 SSM 关联的一部分。所以我的问题很简单。在什么情况下我需要创建命令文档而不是自动化文档?
aws-ssm ×10
amazon-ec2 ×3
aws-lambda ×2
amazon-iam ×1
aws-cli ×1
boto3 ×1
kubernetes ×1
list ×1
powershell ×1
python ×1