

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

# スクリプトを使用して詳細な IAM の  アクションを使用するポリシーを一括移行する
<a name="migrate-iam-permissions"></a>

**注記**  
次の AWS Identity and Access Management (IAM) アクションは、2023 年 7 月に標準サポートが終了しました。  
`aws-portal` 名前空間
`purchase-orders:ViewPurchaseOrders`
`purchase-orders:ModifyPurchaseOrders`
を使用している場合は AWS Organizations、[一括ポリシー移行スクリプト](#migrate-iam-permissions)または一括ポリシー移行スクリプトを使用して、支払者アカウントからポリシーを更新できます。また、[従来のアクションから詳細なアクションへのマッピングのリファレンス](migrate-granularaccess-iam-mapping-reference.md)を使用して、追加する必要のある IAM アクションを検証することもできます。  
2023 年 3 月 6 日午前 11 時 (PDT) 以降に AWS Organizations 作成された がある場合、 AWS アカウントまたは の一部である場合、きめ細かなアクションは組織で既に有効です。

IAM ポリシーを移行して詳細なアクションとして知られる新しいアクションを使用するために、[AWS  サンプル](https://github.com/aws-samples/bulk-policy-migrator-scripts-for-account-cost-billing-consoles)のウェブサイトのスクリプトを使用できます。

これらのスクリプトを組織の支払いアカウントから実行して、組織内で古い IAM アクションを使用し、影響を受ける以下のポリシーを特定します。
+ カスタマーマネージド IAM ポリシー
+ ロール、グループ、ユーザーの IAM インラインポリシー
+ サービスコントロールポリシー (支払人のアカウントのみに適用)
+ 権限セット

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

これらのスクリプトは以下の目的で使用します。
+ ポリシーの更新が効率化され、影響を受けるポリシーを支払いアカウントから簡単に管理できます。
+ ポリシーの更新に必要な時間が短縮されます。各メンバーアカウントにサインインしてポリシーを手動で更新する必要はありません。
+ 複数の異なるメンバーアカウントの同一のポリシーをグループにまとめることができます。その場合、1 つずつ確認しなくても、すべての同じポリシーで同じ更新を確認することや適用することができます。
+ が 2023 年 7 月 AWS 6 日に古い IAM アクションを廃止した後も、ユーザーアクセスが影響を受けないようにしてください。

ポリシーとサービスコントロールポリシーの詳細については、 以下のトピックを参照してください。
+ 「IAM ユーザーガイド」の「[IAM ポリシーを管理する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html)」
+ 「*AWS Organizations User Guide*」の「[Service control policies (SCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)」
+ 「*IAM Identity Center User Guide*」の「[Custom permissions](https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetcustom.html)」

## 概要:
<a name="overview-bulk-migrate-policies"></a>

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

**Topics**
+ [概要:](#overview-bulk-migrate-policies)
+ [前提条件](#prerequisites-running-the-scripts)
+ [ステップ1: 環境の構築](#set-up-your-environment-and-download-the-scripts)
+ [ステップ 2: CloudFormation スタックセットを作成する](#create-the-cloudformation-stack)
+ [ステップ 3: 影響を受けるポリシーを特定する](#identify-the-affected-policies)
+ [ステップ 4: 推奨された変更を確認する](#review-the-affected-policies)
+ [ステップ 5: 影響を受けるポリシーを更新する](#update-the-affected-policies)
+ [ステップ 6: 変更を元に戻す (オプション)](#revert-changes)
+ [IAM ポリシーの例](#examples-of-similar-policies)

## 前提条件
<a name="prerequisites-running-the-scripts"></a>

開始するには、以下を実行する必要があります。
+ [Python 3](https://www.python.org/downloads/) をダウンロードしてインストールします。
+ 支払いアカウントへのサインイン、および次の 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: 環境の構築
<a name="set-up-your-environment-and-download-the-scripts"></a>

開始するには、[AWS  Samples](https://github.com/aws-samples/bulk-policy-migrator-scripts-for-account-cost-billing-consoles) Web サイトから必要なファイルをダウンロードします。次に、コマンドを実行して環境をセットアップします。

**使用する環境をセットアップするには**

1. [AWS Samples](https://github.com/aws-samples/bulk-policy-migrator-scripts-for-account-cost-billing-consoles) ウェブサイトからリポジトリを複製します。コマンドラインウィンドウで、次のコマンドを実行できます。

   ```
   git clone https://github.com/aws-samples/bulk-policy-migrator-scripts-for-account-cost-billing-consoles.git
   ```

1. ファイルをダウンロードしたディレクトリに移動します。以下のコマンドを使用できます。

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

   リポジトリには、以下のスクリプトとリソースがあります。
   + `billing_console_policy_migrator_role.json` – `BillingConsolePolicyMigratorRole` 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` – (オプション) 影響を受けるポリシーに加えられた変更を元に戻します。このスクリプトは、影響を受けるポリシーから新しい詳細アクションを削除します。

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

   ```
   python3 -m venv venv
   ```

   ```
   source venv/bin/activate
   ```

1.  AWS SDK for Python (Boto3) 依存関係をインストールするには、次のコマンドを実行します。

   ```
   pip install -r requirements.txt
   ```
**注記**  
 AWS Command Line Interface () を使用するように AWS 認証情報を設定する必要がありますAWS CLI。詳細については、「[AWS SDK for Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html)」を参照してください。

詳細については、[README.md](https://github.com/aws-samples/bulk-policy-migrator-scripts-for-account-cost-billing-consoles#readme) ファイルを参照してください。

## ステップ 2: CloudFormation スタックセットを作成する
<a name="create-the-cloudformation-stack"></a>

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

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

**CloudFormation スタックセットを作成するには**

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

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

1. 支払者アカウント AWS マネジメントコンソール として にサインインします。

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

   詳細については、「 *AWS CloudFormation ユーザーガイド*[」の「 AWS CloudFormation コンソールでのスタックセットの作成](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-getting-started-create.html)」を参照してください。

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](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) API オペレーションを呼び出して、`BillingConsolePolicyMigratorRole` IAM ロールを継承するための一時的な認証情報を取得します。
スクリプトは [ListAccounts](https://docs.aws.amazon.com/organizations/latest/APIReference/API_ListAccounts.html) API オペレーションを呼び出して、すべてのメンバーアカウントを取得します。
また、スクリプトは IAM API オペレーションを呼び出して、ポリシーへの読み取りアクセス許可と書き込みアクセス許可を実行します。

## ステップ 3: 影響を受けるポリシーを特定する
<a name="identify-the-affected-policies"></a>

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

**影響を受けるポリシーを特定するには**

1. スクリプトをダウンロードしたディレクトリに移動します。

   ```
   cd policy_migration_scripts/scripts
   ```

1. `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 要素 (`Effect`、`Principal`、`NotPrincipal`、`NotAction`、`Condition` など) が含まれます。
+ `SuggestedPolicyStatementsToAppend` – 新しい `SID` ブロックとして追加される新しい推奨アクションを提供します。

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

**Example `affected_policies_and_suggestions.json` ファイルの例**  
このファイルには、以下の基準に基づいて類似するポリシーがグループ化されています。  
+ 同じ古いアクションが使用されている — すべての `SID` ブロックに同じ古いアクションがあるポリシー。
+ マッチングの詳細 — 影響を受けるアクションに加えて、ポリシーには次のような同一の IAM 要素があります。
  + `Effect` (`Allow`/`Deny`)
  + `Principal` (アクセスを許可または拒否されるユーザー)
  + `NotAction` (許可されていないアクション)
  + `NotPrincipal` (アクセスが明示的に拒否されるユーザー)
  + `Resource` (ポリシーが適用される AWS リソース)
  + `Condition` (ポリシーが適用される特定の条件) 
詳細については、「[IAM ポリシーの例](#examples-of-similar-policies)」を参照してください。

**Example `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` など) を検索して、影響を受けるポリシー定義を確認できます。  

**Example 例: `detailed_affected_policies.json`**  

## ステップ 4: 推奨された変更を確認する
<a name="review-the-affected-policies"></a>

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

**影響を受けるポリシーを確認するには**

1. テキストエディタで、`affected_policies_and_suggestions.json` ファイルを開きます。

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

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

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

### 例 1: `action_mapping_config.json` ファイルを更新する
<a name="example-1-update-action-mapping-config-file"></a>

`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` ファイルを更新する
<a name="example-2-make-changes-to-affected-policy-groups"></a>

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

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

### 例 3: 特定のポリシーをカスタマイズする
<a name="example-3-customize-a-specific-policy"></a>

影響を受けるポリシーグループ内のポリシーで、推奨される更新とは異なる変更が必要であることがわかった場合は、次のことを行うことができます。
+ `identify_affected_policies.py` スクリプトから特定のアカウントを除外します。その後、除外されたアカウントを個別に確認できます。
+ 別のアクセス許可が必要な影響を受けるポリシーとアカウントを削除することによって、影響を受ける `Sid` ブロックを更新します。特定のアカウントのみを含む JSON ブロック、または現在の更新の影響を受けるポリシー実行から除外する JSON ブロックを作成します。

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

## ステップ 5: 影響を受けるポリシーを更新する
<a name="update-the-affected-policies"></a>

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

**影響を受けるポリシーを更新するには**

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

1. 次のコマンドを入力して `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* は増分カウンタ (1、2、3 など) に対応します。

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

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

**Example 例: `Sid` ブロックが追加されたポリシー**  
`BillingConsolePolicyMigrator1` ブロックと `BillingConsolePolicyMigrator2` ブロックに追加された `Sid` ブロックを確認します。

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

**Example 例: ステータスレポート**  

```
[{
    "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 を使用できます。問題が見つかった場合は、ツールを使用して前のアクションに戻すことができます。スクリプトを使用してポリシーの更新を元に戻すこともできます。  
詳細については、[影響を受けたポリシーツールの使用方法](migrate-security-iam-tool.md)「」および[AWS 「請求、コスト管理、アカウントコンソールのアクセス許可の変更](https://aws.amazon.com/blogs/aws-cloud-financial-management/changes-to-aws-billing-cost-management-and-account-consoles-permissions/)」ブログ記事を参照してください。
更新を管理するには、次の方法があります。  
各アカウントにスクリプトを個別に実行します。
類似アカウント (テストアカウント、QA アカウント、本番稼働用アカウントなど) にスクリプトをバッチで実行します。
すべてのアカウントにスクリプトを実行します。
一部のアカウントをバッチで更新し、その他のアカウントを個々に更新します。

## ステップ 6: 変更を元に戻す (オプション)
<a name="revert-changes"></a>

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

**変更を元に戻すには**

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

1. 次のコマンドを入力して `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 ポリシーの例
<a name="examples-of-similar-policies"></a>

ポリシーは、以下が同一の場合に類似しているとみなされます。
+  すべての `Sid` ブロックで影響を受けるアクション。
+  以下の IAM 要素の詳細:
  + `Effect` (`Allow`/`Deny`)
  + `Principal` (アクセスを許可または拒否されるユーザー)
  + `NotAction` (許可されていないアクション)
  + `NotPrincipal` (アクセスが明示的に拒否されるユーザー)
  + `Resource` (ポリシーが適用される AWS リソース)
  + `Condition` (ポリシーが適用される特定の条件)

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

**Example 例 1: ポリシーが類似していると見なされる場合**  
各ポリシータイプは異なりますが、どちらのポリシーにも影響を受ける同じ`Action` を含む 1 つの `Sid` ブロックがあります。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Sid": "VisualEditor0",
        "Effect": "Allow",
        "Action": [
            "aws-portal:ViewAccount",
            "aws-portal:*Billing"
        ],
        "Resource": "*"
    }]
}
```  
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Sid": "VisualEditor0",
        "Effect": "Allow",
        "Action": [
            "aws-portal:ViewAccount",
            "aws-portal:*Billing"
        ],
        "Resource": "*"
    }]
}
```

**Example 例 2: ポリシーが類似していると見なされる場合**  
どちらのポリシーにも、影響を受ける同じ `Action` を含む 1 つの `Sid` ブロックが含まれます。ポリシー 2 には追加のアクションが含まれていますが、これらのアクションは影響を受けません。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Sid": "VisualEditor0",
        "Effect": "Allow",
        "Action": [
            "aws-portal:ViewAccount",
            "aws-portal:*Billing"
        ],
        "Resource": "*"
    }]
}
```  
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Sid": "VisualEditor0",
        "Effect": "Allow",
        "Action": [
            "aws-portal:ViewAccount",
            "aws-portal:*Billing",
            "athena:*"
        ],
        "Resource": "*"
    }]
}
```

**Example 例 3: ポリシーが類似していると見なされない場合**  
どちらのポリシーにも、影響を受ける同じ `Action` を含む 1 つの `Sid` ブロックが含まれます。ただし、Policy 2 には Policy 1 に存在しない `Condition` 要素が含まれています。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Sid": "VisualEditor0",
        "Effect": "Allow",
        "Action": [
            "aws-portal:ViewAccount",
            "aws-portal:*Billing"
        ],
        "Resource": "*"
    }]
}
```  
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Sid": "VisualEditor0",
        "Effect": "Allow",
        "Action": [
            "aws-portal:ViewAccount",
            "aws-portal:*Billing",
            "athena:*"
        ],
        "Resource": "*",
        "Condition": {
            "BoolIfExists": {
                "aws:MultiFactorAuthPresent": "true"
            }
        }
    }]
}
```

**Example 例 4: ポリシーが類似していると見なされる場合**  
Policy 1 には、影響を受ける `Sid` を含む 1 つの `Action` ブロックがあります。Policy 2 には複数の `Sid` ブロックがありますが、影響を受ける `Action` は 1 つのブロックにしかありません。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Sid": "VisualEditor0",
        "Effect": "Allow",
        "Action": [
            "aws-portal:View*"
        ],
        "Resource": "*"
    }]
}
```  
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "aws-portal:View*"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "cloudtrail:Get*"
            ],
            "Resource": "*"
        }
    ]
}
```

**Example 例 5: ポリシーが類似していると見なされない場合**  
Policy 1 には、影響を受ける `Sid` を含む 1 つの `Action` ブロックがあります。Policy 2 には複数の `Sid` ブロックがあり、影響を受ける `Action` は複数のブロックにあります。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Sid": "VisualEditor0",
        "Effect": "Allow",
        "Action": [
            "aws-portal:View*"
        ],
        "Resource": "*"
    }]
}
```  
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "aws-portal:View*"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Deny",
            "Action": [
                "aws-portal:Modify*"
            ],
            "Resource": "*"
        }
    ]
}
```

**Example 例 6: ポリシーが類似していると見なされる場合**  
どちらのポリシーにも複数の `Sid` ブロックがあり、各 `Sid` ブロックに影響を受ける同じ `Action` があります。    
****  

```
{
    "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": "*"
        }
    ]
}
```  
****  

```
{
    "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": "*"
        }
    ]
}
```

**Example 例 7**  
次の 2 つのポリシーは、類似していると見なされません。  
Policy 1 には、影響を受ける `Sid` を含む 1 つの `Action` ブロックがあります。Policy 2 には、影響を受ける同じ `Action` を含む 1 つの `Sid` ブロックがあります。ただし、Policy 2 にはアクションが異なる別の `Sid` ブロックも含まれます。    
****  

```
{
    "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": "*"
        }
    ]
}
```  
****  

```
{
    "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": "*"
        }
    ]
}
```