web-dev-qa-db-ja.com

AWS STS AssumeRoleへのアクセスを有効にする方法

STSのassume roleメソッドを呼び出すとエラーが発生します。リソースxxxsts:AsumeRoleを実行する権限がユーザーにないことを示しています。

私は次のことをしました:

  1. S3バケットにアクセスするロールを作成しました。
  2. ポリシーシミュレーターでテストを実行し、正常に動作します
  3. 新しいグループを作成し、その中に、すべてのリソースに対してすべてのstsアクションを有効にする新しいポリシーを作成しました。
  4. ポリシーシミュレータを使用してテストを実行し、stsがロールを引き受け、ステップ1で作成されたロールのARNをポイントしました。そしてそれはうまく動作します
  5. 新しいユーザーを作成し、ステップ3で作成したグループに入れます
  6. 新しいユーザーの資格情報を使用して、sts asumeロールを使用して新しい資格情報を取得しようとしますが、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);
});
16

欠落していたステップがあります:ステップ1で作成された役割に信頼関係を設定します。ユーザーがどの特権を持っていても、信頼関係が設定されていない場合、STSは要求を拒否します。

IAMロールのトラブルシューティング 機能の説明。

25