1. ホーム
  2. node.js

[解決済み】AWS STS AssumeRoleへのアクセスを可能にする方法

2022-01-25 08:39:28

質問

を呼び出すと、エラーが発生します。 assume role メソッドを使用します。を実行する権限がないと表示されます。 sts:AsumeRole リソース上で xxx .

次のようにしました。

  1. S3バケットにアクセスするためのロールを作成しました。
  2. ポリシーシミュレータでテストしてみたところ、問題なく動作した
  3. 新しいグループを作成し、その中に新しいポリシーを作成しました。 は、すべてのリソースで、すべてのstsアクションを有効にします。
  4. ポリシーシミュレータで、stsがロールを引き受けるかどうか、テストしてみました。 ステップ1で作成したロールのARNを指定すると、正常に動作します。
  5. 新しいユーザーを作成し、ステップ3で作成したグループに入れました。
  6. 新しいユーザーの認証情報を使って、新しい認証情報を取得しようとしたところ sts asume roleを使用していますが、「私のユーザは、このロールを使用できません」というエラーが表示されます。 sts:AssumeRole を実行する権限があります。

私は何を間違えているのでしょうか?

グループ内のポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "some-large-id",
            "Effect": "Allow",
            "Action": [
                "sts:*"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

ロールでのポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "another-large-id",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket-name/*"
            ]
        }
    ]
}

そして最後にこのように呼び出します。

let policy = {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "new-custom-id",
            "Effect": "Allow",
            "Action": ["s3:PutObject"],
            "Resource": ["arn:aws:s3:::my-bucket-name/*"]
        }
    ]
};

let params = {
    DurationSeconds: 3600, 
    ExternalId: 'some-value', 
    Policy: JSON.stringify(policy), 
    RoleArn: "arn:aws:iam::NUMBER:role/ROLE-NAME", //Cheked, role is the same that step one
    RoleSessionName: this.makeNewSessionId()
};
let sts = new AWS.STS({ apiVersion: '2012-08-10' });

sts.assumeRole(params, (err, data) => {
    if(err) console.log(err);
    else console.log(data);
});

解決方法は?

ステップ1で作成したロールに信頼関係を設定する、というステップが抜けています。ユーザーがどのような権限を持っていても、信頼関係が設定されていなければ、STSはリクエストを拒否します。

IAMロールのトラブルシューティング がどのように機能するかを説明します。