AWS Boto3:请求中包含的安全令牌无效

时间:2017-10-28 14:03:29

标签: amazon-web-services amazon-ec2 ssh boto3

阅读此问题How to SSH and run commands in EC2 using boto3? 后,我尝试使用class TreeNode(val n: Int, val points: Array[Double], val center: Double) extends Tree{ override def elem: TreeNode = ??? // write here your implementation instead of "???" } 在EC2实例上自动运行命令。但是,当我写这样的代码时

SSM

它提醒我

def excute_command_on_instance(client, command, instance_id): response = client.send_command( DocumentName="AWS-RunShellScript", # One of AWS' preconfigured documents Parameters={'commands': command}, InstanceIds=instance_id, ) return response # Using SSM in boto3 to send command to EC2 instances. ssm_client = boto3.client('ssm') commands = ['echo "hello world'] instance_id = running_instance[0:1] excute_command_on_instance(ssm_client, commands, instance_id)

使用botocore.exceptions.ClientError: An error occurred (AccessDeniedException) when calling the SendCommand operation: User: arn:aws:iam::62771xxxx946:user/Python_CloudComputing is not authorized to perform: ssm:SendCommand on resource: arn:aws:ec2:eu-west-2:6277xxxx3946:instance/i-074f862c3xxxxfc07 生成SST的凭据后,我得到了如下代码。

client

然而,这次它让我想起了

def excute_command_on_instance(client, command, instance_id): response = client.send_command( DocumentName="AWS-RunShellScript", # One of AWS' preconfigured documents Parameters={'commands': command}, InstanceIds=instance_id, ) return response # Using SSM in boto3 to send command to EC2 instances. sts = boto3.client('sts') sts_response = sts.get_session_token() ACCESS_KEY = sts_response['Credentials']['AccessKeyId'] SECRET_KEY = sts_response['Credentials']['SecretAccessKey'] ssm_client = boto3.client( 'ssm', aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY, ) commands = ['echo "hello world'] instance_id = running_instance[0:1] excute_command_on_instance(ssm_client, commands, instance_id)

有谁能告诉我如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

您缺少IAM用户或访问SSM的角色的权限。

您还尝试使用STS来获取访问权限,这使您需要执行的操作过于复杂。 STS需要承担的策略需要相同的权限。使用STS(最小特权规则)有很多好的案例,但我认为你不需要STS。

亚马逊为SSM提供了预定义的策略,您可以将其快速添加到策略或角色中,例如:

AmazonEC2RoleForSSM
AmazonSSMFullAccess
AmazonSSMReadOnlyAccess

此链接将帮助您配置对Systems Manager的访问:

Configuring Access to Systems Manager