スクリプトを使用して詳細な IAM の  アクションを使用するポリシーを一括移行する - AWS 請求

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

スクリプトを使用して詳細な IAM の  アクションを使用するポリシーを一括移行する

注記

次の AWS Identity and Access Management (IAM) アクションは、2023 年 7 月に標準サポートが終了しました。

  • aws-portal 名前空間

  • purchase-orders:ViewPurchaseOrders

  • purchase-orders:ModifyPurchaseOrders

を使用している場合は AWS Organizations、一括ポリシーマイグレータースクリプトまたは一括ポリシーマイグレーターを使用して、支払者アカウントからポリシーを更新できます。また、従来のアクションから詳細なアクションへのマッピングのリファレンスを使用して、追加する必要のある IAM アクションを検証することもできます。

2023 年 3 月 6 日午前 11 時 (PDT) 以降に AWS Organizations 作成された を持っている AWS アカウントか、 の一部である場合、きめ細かなアクションは組織で既に有効になっています。

IAM ポリシーを移行して詳細なアクションとして知られる新しいアクションを使用するために、AWS  サンプルのウェブサイトのスクリプトを使用できます。

これらのスクリプトを組織の支払いアカウントから実行して、組織内で古い IAM アクションを使用し、影響を受ける以下のポリシーを特定します。

  • カスタマーマネージド IAM ポリシー

  • ロール、グループ、ユーザーの IAM インラインポリシー

  • サービスコントロールポリシー (支払人のアカウントのみに適用)

  • 権限セット

スクリプトは、ポリシーで使用されている既存のアクションに対応する  の新しいアクションの提案を生成します。提案を確認し、スクリプトを使用して組織内の影響を受けるすべてのポリシーに新しいアクションを追加します。管理ポリシーや AWS 管理 SCPs ( AWS Control Tower や AWS Organizations SCPs など) を更新 AWS する必要はありません。

これらのスクリプトは以下の目的で使用します。

  • ポリシーの更新が効率化され、影響を受けるポリシーを支払いアカウントから簡単に管理できます。

  • ポリシーの更新に必要な時間が短縮されます。各メンバーアカウントにサインインしてポリシーを手動で更新する必要はありません。

  • 複数の異なるメンバーアカウントの同一のポリシーをグループにまとめることができます。その場合、1 つずつ確認しなくても、すべての同じポリシーで同じ更新を確認することや適用することができます。

  • が 2023 年 7 月 AWS 6 日に古い IAM アクションを廃止した後も、ユーザーアクセスが影響を受けないようにしてください。

ポリシーとサービスコントロールポリシーの詳細については、 以下のトピックを参照してください。

概要

このトピックに従って、次のステップを完了します。

前提条件

開始するには、以下を実行する必要があります。

  • Python 3 をダウンロードしてインストールします。

  • 支払いアカウントへのサインイン、および次の IAM 権限を持つ IAM プリンシパルがあることを確認します。

    "iam:GetAccountAuthorizationDetails", "iam:GetPolicy", "iam:GetPolicyVersion", "iam:GetUserPolicy", "iam:GetGroupPolicy", "iam:GetRole", "iam:GetRolePolicy", "iam:CreatePolicyVersion", "iam:DeletePolicyVersion", "iam:ListAttachedRolePolicies", "iam:ListPolicyVersions", "iam:PutUserPolicy", "iam:PutGroupPolicy", "iam:PutRolePolicy", "iam:SetDefaultPolicyVersion", "organizations:ListAccounts", "organizations:ListPolicies", "organizations:DescribePolicy", "organizations:UpdatePolicy", "organizations:DescribeOrganization", "sso:DescribePermissionSet", "sso:DescribePermissionSetProvisioningStatus", "sso:GetInlinePolicyForPermissionSet", "sso:ListInstances", "sso:ListPermissionSets", "sso:ProvisionPermissionSet", "sso:PutInlinePolicyToPermissionSet", "sts:AssumeRole"
ヒント

最初に、テストアカウントなどのアカウントのサブセットを使用して、提案された変更が予期された通りに行われることを確認することをお勧めします。

その後、組織内の残りのアカウントに対してスクリプトを再度実行できます。

ステップ1: 環境の構築

開始するには、AWS  Samples Web サイトから必要なファイルをダウンロードします。次に、コマンドを実行して環境をセットアップします。

使用する環境をセットアップするには
  1. AWS Samples ウェブサイトからリポジトリを複製します。コマンドラインウィンドウで、次のコマンドを実行できます。

    git clone https://github.com/aws-samples/bulk-policy-migrator-scripts-for-account-cost-billing-consoles.git
  2. ファイルをダウンロードしたディレクトリに移動します。以下のコマンドを使用できます。

    cd bulk-policy-migrator-scripts-for-account-cost-billing-consoles

    リポジトリには、以下のスクリプトとリソースがあります。

    • billing_console_policy_migrator_role.jsonBillingConsolePolicyMigratorRole IAM ロールを組織のメンバーアカウントに作成する CloudFormation テンプレート。スクリプトはこのロールを継承し、影響を受けるポリシーを読み取って更新することができます。

    • action_mapping_config.json — 古いアクションと新しいアクションの 1 対多のマッピングが含まれます。スクリプトはこのファイルを使用して、古いアクションを含み、影響を受ける各ポリシーの新しいアクションを提案します。

      それぞれの古いアクションは、複数の詳細なアクションに対応しています。ファイルで提案された新しいアクションにより、ユーザーは移行 AWS のサービス 前に同じ にアクセスできます。

    • identify_affected_policies.py – 組織内の影響を受けるポリシーをスキャンして特定します。このスクリプトは、影響を受けるポリシーと提案された新しいアクションをリストする affected_policies_and_suggestions.json ファイルを生成します。

      古いアクションの同じセットを使用し、影響を受けるポリシーは JSON ファイルにグループ化されるため、提案された新しいアクションを確認または更新できます。

    • update_affected_policies.py – 組織内の影響を受けるポリシーを更新します。スクリプトは affected_policies_and_suggestions.json ファイルを入力し、提案された新しいアクションをポリシーに追加します。

    • rollback_affected_policies.py – (オプション) 影響を受けるポリシーに加えられた変更を元に戻します。このスクリプトは、影響を受けるポリシーから新しい詳細アクションを削除します。

  3. 仮想環境をセットアップして有効化するには、次のコマンドを実行します。

    python3 -m venv venv
    source venv/bin/activate
  4. 次のコマンドを実行して、 AWS SDK for Python (Boto3) 依存関係をインストールします。

    pip install -r requirements.txt
    注記

    AWS Command Line Interface () を使用するように AWS 認証情報を設定する必要がありますAWS CLI。詳細については、「AWS SDK for Python (Boto3)」を参照してください。

詳細については、README.md ファイルを参照してください。

ステップ 2: CloudFormation スタックセットを作成する

次の手順に従って CloudFormation スタックセットを作成します。このスタックセットは、組織内のすべてのメンバーアカウントの BillingConsolePolicyMigratorRole IAM ロールを作成します。

注記

このステップを完了する必要があるのは、管理アカウント (支払いアカウント) から 1 回だけです。

CloudFormation スタックセットを作成するには
  1. テキストエディタで billing_console_policy_migrator_role.json ファイルを開き、<management_account> の各インスタンスを支払いアカウントのアカウント ID (123456789012 など) に置き換えます。

  2. ファイルを保存します。

  3. 支払者アカウント AWS Management Console として にサインインします。

  4. CloudFormation コンソールで、更新した billing_console_policy_migrator_role.json ファイルでスタックセットを作成します。

    詳細については、「 AWS CloudFormation ユーザーガイド」のAWS CloudFormation 「コンソールでのスタックセットの作成」を参照してください。

CloudFormation がスタックセットを作成した後、組織内の各メンバーアカウントに BillingConsolePolicyMigratorRole IAM ロールが割り当てられます。

IAM ロールには以下のアクセス許可が含まれます。

"iam:GetAccountAuthorizationDetails", "iam:GetPolicy", "iam:GetPolicyVersion", "iam:GetUserPolicy", "iam:GetGroupPolicy", "iam:GetRolePolicy", "iam:CreatePolicyVersion", "iam:DeletePolicyVersion", "iam:ListPolicyVersions", "iam:PutUserPolicy", "iam:PutGroupPolicy", "iam:PutRolePolicy", "iam:SetDefaultPolicyVersion"
メモ
  • 各メンバーアカウントに対して、スクリプトは AssumeRole API オペレーションを呼び出して、BillingConsolePolicyMigratorRole IAM ロールを継承するための一時的な認証情報を取得します。

  • スクリプトは ListAccounts API オペレーションを呼び出して、すべてのメンバーアカウントを取得します。

  • また、スクリプトは IAM API オペレーションを呼び出して、ポリシーへの読み取りアクセス許可と書き込みアクセス許可を実行します。

ステップ 3: 影響を受けるポリシーを特定する

スタックセットを作成してファイルをダウンロードしたら、identify_affected_policies.py スクリプトを実行します。このスクリプトは、各メンバーアカウントの BillingConsolePolicyMigratorRole IAM ロールを継承し、影響を受けるポリシーを特定します。

影響を受けるポリシーを特定するには
  1. スクリプトをダウンロードしたディレクトリに移動します。

    cd policy_migration_scripts/scripts
  2. identify_affected_policies.py スクリプトを実行します。

次の入力パラメータを使用できます。

  • AWS アカウント スクリプトでスキャンする 。アカウントを指定するには、次の入力パラメータを使用します。

    • --all – 組織内のすべてのメンバーアカウントをスキャンします。

      python3 identify_affected_policies.py --all
    • --accounts – 組織内のメンバーアカウントのサブセットをスキャンします。

      python3 identify_affected_policies.py --accounts 111122223333, 444455556666, 777788889999
    • --exclude-accounts – 組織内の特定のメンバーアカウントを除外します。

      python3 identify_affected_policies.py --all --exclude-accounts 111111111111, 222222222222, 333333333333
  • –-action-mapping-config-file – (オプション) action_mapping_config.json ファイルへのパスを指定します。スクリプトは、このファイルを使用して影響を受けるポリシーの推奨される更新を生成します。パスを指定しない場合、スクリプトはフォルダー内の action_mapping_config.json ファイルを使用します。

    python3 identify_affected_policies.py –-action-mapping-config-file c:\Users\username\Desktop\Scripts\action_mapping_config.json –-all
注記

このスクリプトで組織単位 (OU) を指定することはできません。

スクリプトを実行すると、Affected_Policies_<Timestamp> フォルダーに 2 つの JSON ファイルが作成されます。

  • affected_policies_and_suggestions.json

  • detailed_affected_policies.json

affected_policies_and_suggestions.json

影響を受けるポリシーと推奨される新しいアクションを一覧表示します。古いアクションの同じセットを使用し、影響を受けるポリシーは、ファイルにグループ化されます。

このファイルには次のセクションが含まれます。

  • スクリプトで指定したアカウントの概要を提供するメタデータ。これには以下が含まれます。

    • スキャンされたアカウントと identify_affected_policies.py スクリプトで使用された入力パラメータ

    • 影響を受けるアカウントの数

    • 影響を受けるポリシーの数

    • 類似ポリシーグループの数

  • 類似ポリシーグループ — アカウントのリストとポリシーの詳細 (次のセクションを含む) が含まれます。

    • ImpactedPolicies – 影響を受けるポリシーとグループに含めるポリシーを指定します

    • ImpactedPolicyStatements – 影響を受けるポリシー内で古いアクションを現在使用している Sid ブロックに関する情報を提供します。このセクションには古いアクションと IAM 要素 (EffectPrincipalNotPrincipalNotActionCondition など) が含まれます。

  • SuggestedPolicyStatementsToAppend – 新しい SID ブロックとして追加される新しい推奨アクションを提供します。

    ポリシーを更新すると、このブロックがポリシーの最後に追加されます。

affected_policies_and_suggestions.json ファイルの例

このファイルには、以下の基準に基づいて類似するポリシーがグループ化されています。

  • 同じ古いアクションが使用されている — すべての SID ブロックに同じ古いアクションがあるポリシー。

  • マッチングの詳細 — 影響を受けるアクションに加えて、ポリシーには次のような同一の IAM 要素があります。

    • Effect (Allow/Deny)

    • Principal (アクセスを許可または拒否されるユーザー)

    • NotAction (許可されていないアクション)

    • NotPrincipal (アクセスが明示的に拒否されるユーザー)

    • Resource (ポリシーが適用される AWS リソース)

    • Condition (ポリシーが適用される特定の条件)

注記

詳細については、「IAM ポリシーの例」を参照してください。

affected_policies_and_suggestions.json の例
[{ "AccountsScanned": [ "111111111111", "222222222222" ], "TotalAffectedAccounts": 2, "TotalAffectedPolicies": 2, "TotalSimilarPolicyGroups": 2 }, { "GroupName": "Group1", "ImpactedPolicies": [{ "Account": "111111111111", "PolicyType": "UserInlinePolicy", "PolicyName": "Inline-Test-Policy-Allow", "PolicyIdentifier": "1111111_1-user:Inline-Test-Policy-Allow" }, { "Account": "222222222222", "PolicyType": "UserInlinePolicy", "PolicyName": "Inline-Test-Policy-Allow", "PolicyIdentifier": "222222_1-group:Inline-Test-Policy-Allow" } ], "ImpactedPolicyStatements": [ [{ "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "aws-portal:ViewAccounts" ], "Resource": "*" }] ], "SuggestedPolicyStatementsToAppend": [{ "Sid": "BillingConsolePolicyMigrator0", "Effect": "Allow", "Action": [ "account:GetAccountInformation", "account:GetAlternateContact", "account:GetChallengeQuestions", "account:GetContactInformation", "billing:GetContractInformation", "billing:GetIAMAccessPreference", "billing:GetSellerOfRecord", "payments:ListPaymentPreferences" ], "Resource": "*" }] }, { "GroupName": "Group2", "ImpactedPolicies": [{ "Account": "111111111111", "PolicyType": "UserInlinePolicy", "PolicyName": "Inline-Test-Policy-deny", "PolicyIdentifier": "1111111_2-user:Inline-Test-Policy-deny" }, { "Account": "222222222222", "PolicyType": "UserInlinePolicy", "PolicyName": "Inline-Test-Policy-deny", "PolicyIdentifier": "222222_2-group:Inline-Test-Policy-deny" } ], "ImpactedPolicyStatements": [ [{ "Sid": "VisualEditor0", "Effect": "deny", "Action": [ "aws-portal:ModifyAccount" ], "Resource": "*" }] ], "SuggestedPolicyStatementsToAppend": [{ "Sid": "BillingConsolePolicyMigrator1", "Effect": "Deny", "Action": [ "account:CloseAccount", "account:DeleteAlternateContact", "account:PutAlternateContact", "account:PutChallengeQuestions", "account:PutContactInformation", "billing:PutContractInformation", "billing:UpdateIAMAccessPreference", "payments:UpdatePaymentPreferences" ], "Resource": "*" }] } ]
detailed_affected_policies.json

メンバーアカウントに対して identify_affected_policies.py スクリプトが識別した影響を受けるすべてのアカウントの定義が含まれます。

ファイルには類似するポリシーがグループ化されています。このファイルを参照として使用すると、各メンバーアカウントにサインインして各ポリシーとアカウントの更新をここに確認する必要なく、ポリシーの変更を確認および管理できます。

ファイルでポリシー名 (YourCustomerManagedReadOnlyAccessBillingUser など) を検索して、影響を受けるポリシー定義を確認できます。

例: detailed_affected_policies.json
[{ "Account": "111111111111", "PolicyType": "CustomerManagedPolicy", "PolicyName": "AwsPortalviewAccount", "PolicyIdentifier": "arn:aws:iam::111111111111:policy/AwsPortalviewAccount", "PolicyDocument": { "Version": "2012-10-17", "Statement": [{ "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "aws-portal:ViewAccount" ], "Resource": "*" }] } }, { "Account": "222222222222", "PolicyType": "CustomerManagedPolicy", "PolicyName": "AwsPortalviewAccount", "PolicyIdentifier": "arn:aws:iam::222222222222:policy/AwsPortalviewAccount", "PolicyDocument": { "Version": "2012-10-17", "Statement": [{ "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "aws-portal:ViewAccount" ], "Resource": "*" }] } }, { "Account": "111111111111", "PolicyType": "CustomerManagedPolicy", "PolicyName": "AwsPortalModifyAccount", "PolicyIdentifier": "arn:aws:iam::111111111111:policy/AwsPortalModifyAccount", "PolicyDocument": { "Version": "2012-10-17", "Statement": [{ "Sid": "VisualEditor0", "Effect": "Deny", "Action": [ "aws-portal:ModifyAccount" ], "Resource": "*" }] } }, { "Account": "222222222222", "PolicyType": "CustomerManagedPolicy", "PolicyName": "AwsPortalModifyAccount", "PolicyIdentifier": "arn:aws:iam::222222222222:policy/AwsPortalModifyAccount", "PolicyDocument": { "Version": "2012-10-17", "Statement": [{ "Sid": "VisualEditor0", "Effect": "Deny", "Action": [ "aws-portal:ModifyAccount" ], "Resource": "*" }] } } ]

ステップ 4: 推奨された変更を確認する

スクリプトによって作成された affected_policies_and_suggestions.json ファイルを確認して変更を加えます。

影響を受けるポリシーを確認するには
  1. テキストエディタで、affected_policies_and_suggestions.json ファイルを開きます。

  2. AccountsScanned セクションで、スキャンされたアカウント全体で識別された類似グループの数が予期されることを確認します。

  3. 影響を受けるポリシーに追加される推奨詳細アクションを確認します。

  4. 必要に応じてファイルを更新して保存します。

例 1: action_mapping_config.json ファイルを更新する

action_mapping_config.json の推奨マッピングは更新できます。ファイルを更新した後、identify_affected_policies.py スクリプトを再実行します。このスクリプトは、絵協を受けるポリシーの更新された候補を生成します。

action_mapping_config.json ファイルの複数のバージョンを作成して、さまざまなアクセス許可を持つさまざまなアカウントのポリシーを変更できます。例えば、テストアカウントのアクセス許可を移行する action_mapping_config_testing.json という名前のファイルを作成し、本番稼働用アカウント用の action_mapping_config_production.json を作成します。

例 2: affected_policies_and_suggestions.json ファイルを更新する

affected_policies_and_suggestions.json ファイル内の推奨される変更セクションを直接編集して、影響を受ける特定のポリシーグループの推奨される変更を変更できます。

このセクションで行った変更は、影響を受ける特定のポリシーグループ内のすべてのポリシーに適用されます。

例 3: 特定のポリシーをカスタマイズする

影響を受けるポリシーグループ内のポリシーで、推奨される更新とは異なる変更が必要であることがわかった場合は、次のことを行うことができます。

  • identify_affected_policies.py スクリプトから特定のアカウントを除外します。その後、除外されたアカウントを個別に確認できます。

  • 別のアクセス許可が必要な影響を受けるポリシーとアカウントを削除することによって、影響を受ける Sid ブロックを更新します。特定のアカウントのみを含む JSON ブロック、または現在の更新の影響を受けるポリシー実行から除外する JSON ブロックを作成します。

    identify_affected_policies.py スクリプトを再実行すると、更新されたブロックに関連アカウントのみが表示されます。その後、その特定の Sid ブロックに推奨される変更を絞り込むことができます。

ステップ 5: 影響を受けるポリシーを更新する

推奨される変更を確認して修正した後、update_affected_policies.py スクリプトを実行します。スクリプトは入力として affected_policies_and_suggestions.json ファイルを取ります。このスクリプトは、affected_policies_and_suggestions.json ファイルにリストされている影響を受けるポリシーを更新する BillingConsolePolicyMigratorRole IAM ロールを継承します。

影響を受けるポリシーを更新するには
  1. まだ開いていない場合は、 AWS CLI のコマンドラインウィンドウを開きます。

  2. 次のコマンドを入力して update_affected_policies.py スクリプトを実行します。次の入力パラメータを入力できます。

  • 更新対象となる影響を受けるポリシーのリストを含む affected_policies_and_suggestions.json ファイルのディレクトリパス。このファイルは前のステップの出力です。

python3 update_affected_policies.py --affected-policies-directory Affected_Policies_<Timestamp>

update_affected_policies.py スクリプトは、affected_policies_and_suggestions.json ファイル内の影響を受けるポリシーを推奨される新しいアクションで更新します。スクリプトは BillingConsolePolicyMigrator# として識別されるポリシーに Sid ブロックを追加します。ここで、# は増分カウンタ (1、2、3 など) に対応します。

例えば、古いアクションを使用し、影響を受けるポリシー内に複数の Sid ブロックがある場合、スクリプトは、各 Sid ブロックに対応する複数の Sid ブロック (BillingConsolePolicyMigrator# として表示) を追加します。

重要
  • このスクリプトは、ポリシーから古い IAM アクションを削除することや、ポリシー内の既存の Sid ブロックを変更することはありません。代わりに、Sid ブロックを作成してポリシーの最後に追加します。これらの新しい Sid ブロックには、JSON ファイルの推奨される新しいアクションが含まれています。元のポリシーのアクセス許可は変更されません。

  • 変更を元に戻す必要がある場合に備えて、BillingConsolePolicyMigrator# Sid ブロックの名前を変更しないことを推奨します。

例: Sid ブロックが追加されたポリシー

BillingConsolePolicyMigrator1 ブロックと BillingConsolePolicyMigrator2 ブロックに追加された Sid ブロックを確認します。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ce:*", "aws-portal:ViewAccount" ], "Resource": "*", "Principal": { "AWS": "arn:aws:iam::111111111111:BillingRole" }, "Condition": { "BoolIfExists": { "aws:MultiFactorAuthPresent": "true" } } }, { "Sid": "BillingConsolePolicyMigrator1", "Effect": "Allow", "Action": [ "account:GetAccountInformation", "account:GetAlternateContact", "account:GetChallengeQuestions", "account:GetContactInformation", "billing:GetContractInformation", "billing:GetIAMAccessPreference", "billing:GetSellerOfRecord", "payments:ListPaymentPreferences" ], "Resource": "*", "Principal": { "AWS": "arn:aws:iam::111111111111:BillingRole" }, "Condition": { "BoolIfExists": { "aws:MultiFactorAuthPresent": "true" } } }, { "Sid": "BillingConsolePolicyMigrator2", "Effect": "Deny", "Action": [ "account:CloseAccount", "account:DeleteAlternateContact", "account:PutAlternateContact", "account:PutChallengeQuestions", "account:PutContactInformation", "billing:PutContractInformation", "billing:UpdateIAMAccessPreference", "payments:UpdatePaymentPreferences" ], "Resource": "*" } ] }

スクリプトは、失敗したオペレーションを含むステータスレポートを生成し、JSON ファイルをローカルに出力します。

例: ステータスレポート
[{ "Account": "111111111111", "PolicyType": "Customer Managed Policy" "PolicyName": "AwsPortalViewPaymentMethods", "PolicyIdentifier": "identifier", "Status": "FAILURE", // FAILURE or SKIPPED "ErrorMessage": "Error message details" }]
重要
  • identify_affected_policies.py スクリプトと update_affected_policies.py スクリプトを再実行すると、BillingConsolePolicyMigratorRole#Sid ブロックを含むすべてのポリシーがスキップされます。スクリプトでは、これらのポリシーが以前にスキャンおよび更新されていること、および追加の更新は必要ないことが想定されています。これにより、スクリプトがポリシー内の同じアクションを複製することが防止されます。

  • 影響を受けるポリシーを更新した後、影響を受けるポリシーツールを使用して新しい IAM を使用できます。問題が見つかった場合は、ツールを使用して前のアクションに戻すことができます。スクリプトを使用してポリシーの更新を元に戻すこともできます。

    詳細については、影響を受けるポリシーツールの使用方法「」およびAWS 「請求、コスト管理、アカウントコンソールのアクセス許可の変更」ブログ記事を参照してください。

  • 更新を管理するには、次の方法があります。

    • 各アカウントにスクリプトを個別に実行します。

    • 類似アカウント (テストアカウント、QA アカウント、本番稼働用アカウントなど) にスクリプトをバッチで実行します。

    • すべてのアカウントにスクリプトを実行します。

    • 一部のアカウントをバッチで更新し、その他のアカウントを個々に更新します。

ステップ 6: 変更を元に戻す (オプション)

rollback_affected_policies.py スクリプトは、指定されたアカウントに関して影響を受ける各ポリシーに適用された変更を元に戻します。スクリプトは、update_affected_policies.py スクリプトが追加したすべての Sid ブロックを削除します。これらの Sid ブロックは BillingConsolePolicyMigratorRole# の形式です。

変更を元に戻すには
  1. まだ開いていない場合は、 AWS CLI のコマンドラインウィンドウを開きます。

  2. 次のコマンドを入力して rollback_affected_policies.py スクリプトを実行します。次の入力パラメータを入力できます。

  • --accounts

    • ロールバックに含める AWS アカウント IDs のカンマ区切りリストを指定します。

    • 次の の例では、指定された のポリシーをスキャンし AWS アカウント、 BillingConsolePolicyMigrator#Sidブロックを含むステートメントを削除します。

      python3 rollback_affected_policies.py –-accounts 111122223333, 555555555555, 666666666666
  • --all

    • 組織内の AWS アカウント IDsが含まれます。

    • 次の例では、組織内のすべてのポリシーがスキャンされ、BillingConsolePolicyMigratorRole# Sid ブロックを含むすべてのステートメントが削除されます。

    python3 rollback_affected_policies.py –-all
  • --exclude-accounts

    • ロールバックから除外する AWS アカウント IDs のカンマ区切りリストを指定します。

      このパラメータは、--all パラメータも指定する場合にのみ使用できます。

    • 次の の例では、指定されたアカウントを除く、組織 AWS アカウント 内のすべての のポリシーをスキャンします。

      python3 rollback_affected_policies.py --all --exclude-accounts 777777777777, 888888888888, 999999999999

IAM ポリシーの例

ポリシーは、以下が同一の場合に類似しているとみなされます。

  • すべての Sid ブロックで影響を受けるアクション。

  • 以下の IAM 要素の詳細:

    • Effect (Allow/Deny)

    • Principal (アクセスを許可または拒否されるユーザー)

    • NotAction (許可されていないアクション)

    • NotPrincipal (アクセスが明示的に拒否されるユーザー)

    • Resource (ポリシーが適用される AWS リソース)

    • Condition (ポリシーが適用される特定の条件)

以下の例は、IAM が相違点に基づいて類似していると見なす可能性があるポリシー、またはそうでないポリシーを示しています。

例 1: ポリシーが類似していると見なされる場合

各ポリシータイプは異なりますが、どちらのポリシーにも影響を受ける同じAction を含む 1 つの Sid ブロックがあります。

Policy 1: Group inline IAM policy
{ "Version": "2012-10-17", "Statement": [{ "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "aws-portal:ViewAccount", "aws-portal:*Billing" ], "Resource": "*" }] }
Policy 2: Customer managed IAM policy
{ "Version": "2012-10-17", "Statement": [{ "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "aws-portal:ViewAccount", "aws-portal:*Billing" ], "Resource": "*" }] }
例 2: ポリシーが類似していると見なされる場合

どちらのポリシーにも、影響を受ける同じ Action を含む 1 つの Sid ブロックが含まれます。ポリシー 2 には追加のアクションが含まれていますが、これらのアクションは影響を受けません。

Policy 1
{ "Version": "2012-10-17", "Statement": [{ "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "aws-portal:ViewAccount", "aws-portal:*Billing" ], "Resource": "*" }] }
Policy 2
{ "Version": "2012-10-17", "Statement": [{ "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "aws-portal:ViewAccount", "aws-portal:*Billing", "athena:*" ], "Resource": "*" }] }
例 3: ポリシーが類似していると見なされない場合

どちらのポリシーにも、影響を受ける同じ Action を含む 1 つの Sid ブロックが含まれます。ただし、Policy 2 には Policy 1 に存在しない Condition 要素が含まれています。

Policy 1
{ "Version": "2012-10-17", "Statement": [{ "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "aws-portal:ViewAccount", "aws-portal:*Billing" ], "Resource": "*" }] }
Policy 2
{ "Version": "2012-10-17", "Statement": [{ "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "aws-portal:ViewAccount", "aws-portal:*Billing", "athena:*" ], "Resource": "*", "Condition": { "BoolIfExists": { "aws:MultiFactorAuthPresent": "true" } } }] }
例 4: ポリシーが類似していると見なされる場合

Policy 1 には、影響を受ける Sid を含む 1 つの Action ブロックがあります。Policy 2 には複数の Sid ブロックがありますが、影響を受ける Action は 1 つのブロックにしかありません。

Policy 1
{ "Version": "2012-10-17", "Statement": [{ "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "aws-portal:View*" ], "Resource": "*" }] }}
Policy 2
{ "Version": "2012-10-17", "Statement": [{ "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "aws-portal:View*" ], "Resource": "*" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "cloudtrail:Get*" ], "Resource": "*" } ] }
例 5: ポリシーが類似していると見なされない場合

Policy 1 には、影響を受ける Sid を含む 1 つの Action ブロックがあります。Policy 2 には複数の Sid ブロックがあり、影響を受ける Action は複数のブロックにあります。

Policy 1
{ "Version": "2012-10-17", "Statement": [{ "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "aws-portal:View*" ], "Resource": "*" }] }
Policy 2
{ "Version": "2012-10-17", "Statement": [{ "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "aws-portal:View*" ], "Resource": "*" }, { "Sid": "VisualEditor1", "Effect": "Deny", "Action": [ "aws-portal:Modify*" ], "Resource": "*" } ] }
例 6: ポリシーが類似していると見なされる場合

どちらのポリシーにも複数の Sid ブロックがあり、各 Sid ブロックに影響を受ける同じ Action があります。

Policy 1
{ "Version": "2012-10-17", "Statement": [{ "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "aws-portal:*Account", "iam:Get*" ], "Resource": "*" }, { "Sid": "VisualEditor1", "Effect": "Deny", "Action": [ "aws-portal:Modify*", "iam:Update*" ], "Resource": "*" } ] }
Policy 2
{ "Version": "2012-10-17", "Statement": [{ "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "aws-portal:*Account", "athena:Get*" ], "Resource": "*" }, { "Sid": "VisualEditor1", "Effect": "Deny", "Action": [ "aws-portal:Modify*", "athena:Update*" ], "Resource": "*" } ] }
例 7

次の 2 つのポリシーは、類似していると見なされません。

Policy 1 には、影響を受ける Sid を含む 1 つの Action ブロックがあります。Policy 2 には、影響を受ける同じ Action を含む 1 つの Sid ブロックがあります。ただし、Policy 2 にはアクションが異なる別の Sid ブロックも含まれます。

Policy 1
{ "Version": "2012-10-17", "Statement": [{ "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "aws-portal:*Account", "iam:Get*" ], "Resource": "*" }, { "Sid": "VisualEditor1", "Effect": "Deny", "Action": [ "aws-portal:Modify*", "iam:Update*" ], "Resource": "*" } ] }
Policy 2
{ "Version": "2012-10-17", "Statement": [{ "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "aws-portal:*Account", "athena:Get*" ], "Resource": "*" }, { "Sid": "VisualEditor1", "Effect": "Deny", "Action": [ "aws-portal:*Billing", "athena:Update*" ], "Resource": "*" } ] }