スクリプトを使用してポリシーを一括移行し、きめ細かなIAMアクションを使用する - AWS 「請求」

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

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

注記

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

  • aws-portal 名前空間

  • purchase-orders:ViewPurchaseOrders

  • purchase-orders:ModifyPurchaseOrders

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

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

きめ細かなアクションと呼ばれる新しいアクションを使用するようにIAMポリシーを移行するには、 のスクリプトを使用できます。 AWS サンプルウェブサイト。

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

  • カスタマー管理IAMポリシー

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

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

  • 許可セット

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

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

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

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

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

  • の後にユーザーアクセスが影響を受けないようにする AWS は、2023 年 7 月 6 日に古いIAMアクションを廃止します。

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

概要

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

前提条件

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

  • 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 サンプルウェブサイト。次に、コマンドを実行して環境をセットアップします。

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

    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.json – 組織のメンバーアカウントにBillingConsolePolicyMigratorRoleIAMロールを作成する CloudFormation テンプレート。スクリプトはこのロールを継承し、影響を受けるポリシーを読み取って更新することができます。

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

      それぞれの古いアクションは、複数の詳細なアクションに対応しています。ファイルで提案された新しいアクションにより、ユーザーは同じ にアクセスできます。 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 を使用するための 認証情報 AWS Command Line Interface (AWS CLI)。 詳細については、「」を参照してください。 AWS SDK for Python (Boto3).

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

ステップ 2: を作成する CloudFormation StackSet

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

注記

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

を作成するには CloudFormation StackSet
  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 を作成すると、組織内の各メンバーアカウントには BillingConsolePolicyMigratorRoleIAMロールがあります。

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"
メモ
  • 各メンバーアカウントについて、スクリプトは AssumeRoleAPIオペレーションを呼び出して、BillingConsolePolicyMigratorRoleIAMロールを引き受けるための一時的な認証情報を取得します。

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

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

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

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

影響を受けるポリシーを特定するには
  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
注記

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

スクリプトを実行すると、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 ブロックに関する情報を提供します。このセクションでは、、、、Effect、 などの古いアクションPrincipalNotPrincipalNotActionとIAM要素について説明しますCondition

  • 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ブロックを作成します。

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

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

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

影響を受けるポリシーを更新するには
  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 ファイル内の影響を受けるポリシーを推奨される新しいアクションで更新します。スクリプトは、 として識別される Sidブロックをポリシーに追加します。ここでBillingConsolePolicyMigrator## は増分カウンター (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": "*" } ] }