メインコンテンツへスキップ

Flexsave アカウント

Flexsave アカウントは DoiT によって作成され、所有されています。これらのアカウントにはワークロードは含まれず、コスト削減プランとリザーブドインスタンスのみが含まれます。

Flexsave は、お客様が利用可能なプラン構成を調整することでコスト削減を最適化します。リソース使用状況の変化に応じて割引メカニズムの組み合わせを継続的に調整し、コスト削減額を最大化します。dedicated resold アカウントをご利用の場合、プランが調整されるたびに、Flexsave アカウントが AWS Organization に参加または離脱する様子が確認できます。

Flexsave アカウントを特定する

Flexsave アカウントは、AWS コンソール上でアカウント名が fsXXXXX となっています。次のドメイン名で表示される場合があります:doit-intl.comflexsave.marketflexsave.workflexsave.app。アカウント名でフィルターした後、アカウント ID でさらにグループ化できます。

Cloud Analytics(クラウド分析)のレポートでは、AWS Organization に追加されたすべての Flexsave アカウントが、Project/Account name Flexsave の 1 つのアイテムに集約されます。例については、Flexsave projects/accounts を参照してください。

Flexsave アカウントのアクティビティ

Flexsave アカウントは、DoiT の管理ロールによるアクションを通じて、お客様の AWS Organization に参加または離脱します。

Flexsave アカウントが Organization を離脱する際には、アカウントをクリーンアップし、関連するすべてのリソース(デフォルト VPC、ロール、ポリシー、セキュリティツールなどを含む)を削除して、最良のセキュリティ体制を確保します。クリーンアップ処理により、たとえば AWS CloudTrail ログの削除、AWS GuardDuty detector の削除、DeleteServiceLinkedRole リクエストの送信などのセキュリティ警告がトリガーされる場合があります。これらが Flexsave アカウントからのものである限り、不審なアクティビティではありません。

AWS Service Control Policies

Flexsave は AWS Service Control Policies(SCP)と互換性があります。

dedicated resold アカウントをご利用で、organizations:LeaveOrganization または organizations:DescribeOrganization アクションを拒否するポリシーを設定している場合は、DoiT の管理ロールを例外とするための Condition を追加してください(または、すべての Flexsave アカウントを OU に移動 し、その OU から SCP を除外することもできます)。

例:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": ["organizations:LeaveOrganization", "organizations:DescribeOrganization", "shield:GetSubscriptionState"],
"Resource": "*",
"Condition": {
"ArnNotEquals": {
"aws:PrincipalArn": "arn:aws:iam::*:role/doitintl-mgmt-role"
}
}
}
]
}

Flexsave アカウントを OU に移動する

アカウント管理を簡素化するために、organizational unit(OU) を使用して、すべての Flexsave アカウントをまとめてグループ化することを推奨します。たとえば、SCP を OU に添付できます。

お客様の環境に Lambda 関数をデプロイして、一致する Flexsave アカウントを任意の OU に移動できます。Lambda 関数はお客様が所有するため、DoiT に追加の権限を付与する必要はありません。

Lambda 関数

以下は Lambda 関数の例です。環境で利用する前に、ORG_ROOTDESTINATION_OU を入力するか、os.environ['ORG_ROOT']os.environ['DESTINATION_OU'] を使用して環境変数として設定してください。さらに、OU へ移動する際にアカウントへタグ付けするなど、追加のタスクのために Lambda 関数を変更することもできます。

import boto3

ORG_ROOT = "XXX"
DESTINATION_OU = "XXX"


def handle_flexsave(event, context):
details = event["detail"]

if details["eventName"] == "AcceptHandshake":
if "responseElements" in details and "handshake" in details["responseElements"]:
handshake = details["responseElements"]["handshake"]
if handshake["action"] == "INVITE" and handshake["state"] == "ACCEPTED":
account_id = next(
(
resource["value"]
for resource in handshake["resources"]
if resource["type"] == "ACCOUNT"
),
None,
)
if account_id:
handle_account(account_id)
return
print(f"can't find account in payload")
return
print("Not a relevant event")


def handle_account(account_id):
print(f"Processing event for account {account_id}")
org_client = boto3.client("organizations")

response = org_client.describe_account(AccountId=account_id)
account_name = response["Account"]["Name"]

if account_name.startswith("fs"):
org_client.move_account(
AccountId=account_id,
SourceParentId=ORG_ROOT,
DestinationParentId=DESTINATION_OU,
)
else:
print(f"Account {account_name} not associated with Flexsave")

Lambda 用ポリシー

次のポリシーを、Lambda 関数の 実行ロール に添付してください(Lambda 関数名が flexsave-move で、Lambda 関数ハンドラーが flexsave_move.handle_flexsave であると仮定しています)。

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "LogOperations",
"Effect": "Allow",
"Action": ["logs:PutLogEvents", "logs:CreateLogStream", "logs:CreateLogGroup"],
"Resource": [
"arn:aws:logs:us-east-1:XXX:log-group:/aws/lambda/flexsave-move:*:*",
"arn:aws:logs:us-east-1:XXX:log-group:/aws/lambda/flexsave-move:*"
]
},
{
"Sid": "FlexsaveManagement",
"Effect": "Allow",
"Action": ["organizations:DescribeAccount", "organizations:MoveAccount"],
"Resource": "*"
}
]
}

EventBridge トリガー

management events 用の trail を設定している場合は、以下のように EventBridge トリガーを追加し、お客様の Lambda を指定してください。

{
"source": ["aws.organizations"],
"detail-type": ["AWS API Call via CloudTrail"],
"detail": {
"eventSource": ["organizations.amazonaws.com"],
"eventName": ["AcceptHandshake"]
}
}