web-dev-qa-db-ja.com

AWS Boto3:リクエストに含まれているセキュリティトークンが無効です

この質問を読んだ後 boto3を使用してEC2でコマンドをSSHで実行する方法は?SSMを使用してEC2インスタンスでコマンドを自動的に実行しようとしています。しかし、私がこのようなコードを書くとき

_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)
_

しかし、今回はそれを思い出させます

botocore.exceptions.ClientError: An error occurred (UnrecognizedClientException) when calling the SendCommand operation: The security token included in the request is invalid.

誰かがこの問題を解決する方法を教えてもらえますか?

4
Coding_Rabbit

IAMユーザーまたはロールがSSMにアクセスするためのアクセス許可がありません。

また、STSを使用してアクセスを取得しようとしていますが、これは必要な作業を複雑にしすぎています。 STSが想定する必要のあるポリシーには、同じ権限が必要です。 STS(最小特権の原則)を使用する良い例はたくさんありますが、ここではSTSは必要ないと思います。

Amazonは、次のようなポリシーまたはロールにすばやく追加できるSSMの定義済みポリシーを提供します。

AmazonEC2RoleForSSM
AmazonSSMFullAccess
AmazonSSMReadOnlyAccess

このリンクは、SystemsManagerへのアクセスを構成するのに役立ちます。

Systems Managerへのアクセスの構成

4
John Hanley