[Tip] Multi-party approval passes once the set threshold of OKs is met, even if most of the team says no

[Tip] Multi-party approval passes once the set threshold of OKs is met, even if most of the team says no

So make sure to set the threshold appropriately.
2026.04.29

This page has been translated by machine translation. View original

Hello, I'm Airaira (@eiraces) from the Consulting Department, Cloud Business Division.
Multi-party approval is one of the features of AWS Organizations, and these days I think it often appears in combination with AWS Backup in the context of ransomware countermeasures.

https://dev.classmethod.jp/articles/aws-reinforce-organizations-multi-party-approval/

This time, I'll run an experiment on a small topic related to multi-party approval and share it.

With an approval team of 5 members and a minimum number of approvals of 2, what happens when 3 people reject (NG) first, and then 2 people approve (OK)?
The documentation contains the following statement.

The team consists of approvers (effectively the party portion of multi-party approval) who receive email notifications of protected operation requests. These emails confirm that the approval session for the request has started. Approval is granted when the minimum required number of approvals is reached.

https://docs.aws.amazon.com/ja_jp/aws-backup/latest/devguide/multipartyapproval.html

Read plainly, it says approval is granted when the number of approvals reaches the threshold (2 in this case), so it appears the session would be approved at the moment the 5th person clicks OK.

Results first

As the title says, even if a majority of the team rejects, the request is approved as long as the configured threshold of OKs is met. This matches the AWS documentation.
Therefore, you need to be careful when setting the threshold. Design it according to the size of the approval team.
An approval team can have up to 20 members, but I think the minimum number of approvals should preferably be N/2 or (N+1)/2. In that case, a team size of around 5 to 8 people seems good.

Trying it out

Below, I'll experiment with an approval team of 5 members. The minimum number of approvals is set to 2.

ScreenShot 2026-04-29 at 22.18.52

Let's make a change to the team. Anything would do, but this time I'll change the minimum number of approvals from 2 to 3.

image-20260429222237963

For the first 3 people's operations, I'll click "Reject (NG)".

ScreenShot 2026-04-29 at 22.24.16

You can check your own response status from "Operation history". (You can't see the approval status of other members.)

ScreenShot 2026-04-29 at 22.29.46

By the way, if you run the aws mpa get-session command from the management account side, you can check the members' approval status.
It apparently can't be displayed from the AWS Console.

$ aws mpa get-session --session-arn arn:aws:mpa:us-east-1:000000000000:session/approve-team-e0bfdb2vd4rp/129ff60c-4bce-3049-87d6-b6774f2de2c0
{
    "SessionArn": "arn:aws:mpa:us-east-1:000000000000:session/approve-team-e0bfdb2vd4rp/129ff60c-4bce-3049-87d6-b6774f2de2c0",
    "ApprovalTeamArn": "arn:aws:mpa:us-east-1:000000000000:approval-team/approve-team-e0bfdb2vd4rp",
    "ApprovalTeamName": "approve-team",
    "ProtectedResourceArn": "arn:aws:mpa:us-east-1:000000000000:approval-team/approve-team-e0bfdb2vd4rp",
    "ApprovalStrategy": {
        "MofN": {
            "MinApprovalsRequired": 2
        }
    },
    "NumberOfApprovers": 5,
    "InitiationTime": "2026-04-29T13:22:22.825000+00:00",
    "ExpirationTime": "2026-04-30T13:22:22.825000+00:00",
    "Description": "A change to an approval team has been requested.",
    "Metadata": {
        "New minimum Approvers required": "3",
        "Old minimum Approvers required": "2"
    },
    "Status": "PENDING",
    "ActionName": "mpa:UpdateApprovalTeam",
    "RequesterServicePrincipal": "mpa.amazonaws.com",
    "RequesterPrincipalArn": "arn:aws:iam::000000000000:role/xxx",
    "RequesterAccountId": "000000000000",
    "RequesterRegion": "us-east-1",
    "ActionCompletionStrategy": "AUTO_COMPLETION_UPON_APPROVAL",
    "ApproverResponses": [
        {
            "ApproverId": "ff497bf8-085a-4293-819a-853aad27a4c2",
            "IdentitySourceArn": "arn:aws:mpa:us-east-1:000000000000:identity-source/IamIdentityCenter",
            "IdentityId": "97045ad8-00c1-7003-db10-a2cc80db58a9",
            "Response": "REJECTED",
            "ResponseTime": "2026-04-29T13:26:27.190000+00:00"
        },
        {
            "ApproverId": "4d5461b9-3b23-458f-b6c6-c9c4d8a3a587",
            "IdentitySourceArn": "arn:aws:mpa:us-east-1:000000000000:identity-source/IamIdentityCenter",
            "IdentityId": "77e46a78-70e1-7059-c3cc-f7e844a83d91",
            "Response": "REJECTED",
            "ResponseTime": "2026-04-29T13:27:37.860000+00:00"
        },
        {
            "ApproverId": "7ff74481-39e3-4338-a522-ac35baa9a1ef",
            "Response": "NO_VOTE"
        },
        {
            "ApproverId": "1e47a42a-419f-441f-9407-4436817c15f8",
            "Response": "NO_VOTE"
        },
        {
            "ApproverId": "bddb6940-eeae-4eb7-b291-397637a2c29a",
            "IdentitySourceArn": "arn:aws:mpa:us-east-1:000000000000:identity-source/IamIdentityCenter",
            "IdentityId": "37e42a38-9001-705f-05f7-98621cf905e7",
            "Response": "REJECTED",
            "ResponseTime": "2026-04-29T13:25:31.142000+00:00"
        }
    ],
    "AdditionalSecurityRequirements": [
        "APPROVER_VERIFICATION_REQUIRED"
    ]
}

As it stands, there are 3 REJECTED, and you can see the approval task itself is PENDING.

Next, the 4th and 5th people respond with OK.

ScreenShot 2026-04-29 at 22.39.04

Then, the minimum required approvals (the parameter we requested to change this time) became 3, and the task was approved.

Let's run aws mpa get-session again to check.

~ $ aws mpa get-session --session-arn arn:aws:mpa:us-east-1:000000000000:session/approve-team-e0bfdb2vd4rp/129ff60c-4bce-3049-87d6-b6774f2de2c0
{
    "SessionArn": "arn:aws:mpa:us-east-1:000000000000:session/approve-team-e0bfdb2vd4rp/129ff60c-4bce-3049-87d6-b6774f2de2c0",
    "ApprovalTeamArn": "arn:aws:mpa:us-east-1:000000000000:approval-team/approve-team-e0bfdb2vd4rp",
    "ApprovalTeamName": "approve-team",
    "ProtectedResourceArn": "arn:aws:mpa:us-east-1:000000000000:approval-team/approve-team-e0bfdb2vd4rp",
    "ApprovalStrategy": {
        "MofN": {
            "MinApprovalsRequired": 2
        }
    },
    "NumberOfApprovers": 5,
    "InitiationTime": "2026-04-29T13:22:22.825000+00:00",
    "ExpirationTime": "2026-04-30T13:22:22.825000+00:00",
    "CompletionTime": "2026-04-29T13:38:03.090000+00:00",
    "Description": "A change to an approval team has been requested.",
    "Metadata": {
        "New minimum Approvers required": "3",
        "Old minimum Approvers required": "2"
    },
    "Status": "APPROVED",
    "ExecutionStatus": "EXECUTED",
    "ActionName": "mpa:UpdateApprovalTeam",
    "RequesterServicePrincipal": "mpa.amazonaws.com",
    "RequesterPrincipalArn": "arn:aws:iam::000000000000:role/xxx",
    "RequesterAccountId": "000000000000",
    "RequesterRegion": "us-east-1",
    "ActionCompletionStrategy": "AUTO_COMPLETION_UPON_APPROVAL",
    "ApproverResponses": [
        {
            "ApproverId": "ff497bf8-085a-4293-819a-853aad27a4c2",
            "IdentitySourceArn": "arn:aws:mpa:us-east-1:000000000000:identity-source/IamIdentityCenter",
            "IdentityId": "97045ad8-00c1-7003-db10-a2cc80db58a9",
            "Response": "REJECTED",
            "ResponseTime": "2026-04-29T13:26:27.190000+00:00"
        },
        {
            "ApproverId": "4d5461b9-3b23-458f-b6c6-c9c4d8a3a587",
            "IdentitySourceArn": "arn:aws:mpa:us-east-1:000000000000:identity-source/IamIdentityCenter",
            "IdentityId": "77e46a78-70e1-7059-c3cc-f7e844a83d91",
            "Response": "REJECTED",
            "ResponseTime": "2026-04-29T13:27:37.860000+00:00"
        },
        {
            "ApproverId": "7ff74481-39e3-4338-a522-ac35baa9a1ef",
            "IdentitySourceArn": "arn:aws:mpa:us-east-1:000000000000:identity-source/IamIdentityCenter",
            "IdentityId": "67d4aa68-10c1-7036-b588-478fbf70317c",
            "Response": "APPROVED",
            "ResponseTime": "2026-04-29T13:37:52.842000+00:00"
        },
        {
            "ApproverId": "1e47a42a-419f-441f-9407-4436817c15f8",
            "IdentitySourceArn": "arn:aws:mpa:us-east-1:000000000000:identity-source/IamIdentityCenter",
            "IdentityId": "37e42ac8-50d1-7040-0bb3-51020bd50a30",
            "Response": "APPROVED",
            "ResponseTime": "2026-04-29T13:37:15.004000+00:00"
        },
        {
            "ApproverId": "bddb6940-eeae-4eb7-b291-397637a2c29a",
            "IdentitySourceArn": "arn:aws:mpa:us-east-1:000000000000:identity-source/IamIdentityCenter",
            "IdentityId": "37e42a38-9001-705f-05f7-98621cf905e7",
            "Response": "REJECTED",
            "ResponseTime": "2026-04-29T13:25:31.142000+00:00"
        }
    ],
    "AdditionalSecurityRequirements": [
        "APPROVER_VERIFICATION_REQUIRED"
    ]
}
(END)

There are 3 REJECTED and 2 APPROVED, but since the minimum number of approvals was 2, the task was APPROVED/EXECUTED.

Conclusion

It feels a bit odd that the task is approved even though there are more NGs. To prevent this, it's important to set an appropriate threshold.
You can choose a minimum number of approvals starting from 2, but set an appropriate number according to the size of the approval team.

I hope this entry helps someone.
This was Airaira from the Consulting Department, Cloud Business Division!


そのマルチアカウント運用、気合いで支えていませんか

Organizations や Control Tower で土台は作れても、アカウントもポリシーも増えるほど、運用は「詳しい一人」に寄りかかっていく。属人化が限界を迎える前に、組織として回す仕組み=CCoEへ。5,600社の支援から得た立ち上げの型を、無料資料にまとめました。

CCoE総合支援

組織で回す仕組みの資料をもらう

Share this article

AWSのお困り事はクラスメソッドへ