1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【AWS】エラー:The request is rejected because the current account does not have an invitation from the requested master account の解決

Last updated at Posted at 2022-10-14

こんにちは。
AWSマルチアカウント環境を管理している者です。

AWSマスタアカウントからメンバーアカウントに対してAWS GuardDutyとAWS Security Hubを開始させる際にInvitationの問題がよく発生してましたので記録します。

エラー内容

ResourceLogicalId:Master, ResourceType:AWS::GuardDuty::Master, ResourceStatusReason:The request is rejected because the current account does not have an invitation from the requested master account. (Service: null; Status Code: 0; Error Code: null; Request ID: null; Proxy: null).
→ マスタアカウントを管理者にするGuardDutyをメンバーアカウントで開始するには、マスタアカウントよりInvitationを事前にもらう必要がありますが、そのInvitationをもらってないからこのようなエラーが発生したようです。

解決

Invitationを送って再度開始を試したら解決されました。
Invitationを送る方法はいくつかあると思いますが、コンソール画面より手動で送る方法とLambdaで自動的に送る方法を紹介します。

① コンソール画面より手動でInvitationを送る

image.png
GuardDutyを開いて「設定」>「アカウント」に入ると「招待によるアカウントの追加」ボタンがあります。これをクリックして招待したいアカウントIDとルートメールアドレスを入力したらInvitationが送られるのでメンバーアカウントがAcceptしたら招待完了です。

こちらの方法はInvitationを送るのも、メンバーアカウントがInvitationをAcceptするのも手動で手間がかかるデメリットがあります。

ちなみに左にある「自動有効化」ですが、私は組織の一部のアカウントに対してGuardDutyを開始したくこちらをOFFにしていますが、組織内の全てのアカウントに対してGuardDutyをONにしたい場合は、こちらの自動有効化をONにすると解決されると思います。

② Lambdaで自動的にInvitationを送る(create_members)

コードはpythonで書いています。
Lambdaは、指定したOUに新規アカウントが作成されたタイミングでEventBridgeをトリガーにして実行されるように設計しています。
image.png

import json
import boto3

def lambda_handler(event, context):
    guardDuty = boto3.client('guardduty')
    organizations = boto3.client('organizations')
    
    requestParameters = event["detail"]["requestParameters"]
    if requestParameters["destinationParentId"] == "指定したOU":
        accountId = requestParameters["accountId"]
        email = organizations.describe_account(
                        AccountId=accountId
                )['Account']['Email']
    
    
        response = guardDuty.create_members(
                                DetectorId='マスタアカウントのGuardDuty Detector ID',
                                AccountDetails=[
                                {
                                    'AccountId': accountId,
                                    'Email': email,
                                },
                            ]
                        )
           

このように、マスタアカウントのメンバーとして新規アカウントのGuardDutyを開始したらメンバーアカウントは特にAcceptをしなくても自動的にメンバーとしてGuardDutyが起動されます。

メンバーアカウント(新規アカウント)のGuardDutyに切り替えて確認したら以下のように表示されていましたので大丈夫そうですね。
image.png

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?