0

IoT サービス (発行、受信など) に接続するために、一時的なアクセス キーをクライアントに与える必要があります。sts.assumeRoleこのアクセスを提供するために、一時的な STS キーを作成するために呼び出す Lambda 関数を作成しました。これらのキーは作成されており、問題ないようです。

次のインライン ポリシーを持つロールで Lambda で assumeRole を使用しています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "iot:Connect",
                "iot:Subscribe",
                "iot:Publish",
                "iot:Receive"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "ec2:*"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}

注: 二次 (簡易) テストを試すために、ec2 権限を追加しました。

この役割にはオープンな信頼関係があります。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

ただし、私のクライアント コード (ブラウザー) では、IoT に接続できず、次のエラーが表示されます。

「wss://my-endpoint.iot.us-east-1.amazonaws.com/mqtt?X-Amz-Algorithm=AWS4-H…Signature=my-signature」への WebSocket 接続に失敗しました: WebSocket ハンドシェイク中のエラー: 予期しない応答コード: 403

簡単なテストを試みて、EC2 を使用しましたが、別の許可エラーを受け取りました。使用されるコードは以下のとおりです (browserify を使用してブラウズにバンドルします)。

const AWS = require('aws-sdk');

// connect to Lambda to retrieve accessKeyId and secretAccessKey
$.ajax({ 
    method: 'GET', 
    url: 'my-url',
    success: function(res) {

        // connect to EC2
        AWS.config.update({accessKeyId: res.accessKeyId, secretAccessKey: res.secretAccessKey, region: res.region});
        const ec2 = new AWS.EC2();

        ec2.describeInstances({}, function(err, data) {
            if (err) console.log(err, err.stack); // an error occurred
            else     console.log(data);           // successful response
        });
    });

エラー:

POST https://ec2.us-east-1.amazonaws.com/ 401 (未承認)

エラー: AWS は、提供されたアクセス資格情報を検証できませんでした(…) 「AuthFailure: AWS は、提供されたアクセス資格情報を検証できませんでした」

4

1 に答える 1