AWS アカウント間で IAM ロールを使用して Amazon Elasticsearch アクセスを委任するにはどうすればよいですか?

最終更新日: 2021 年 2 月 25 日

自分のアカウントの Amazon Elasticsearch Service (Amazon ES) リソースを別のアカウントのユーザーと共有したいと考えています。どうすればよいですか?

簡単な説明

Amazon ES ドメインのクロスアカウントアクセスを有効にする最も簡単な方法は、AWS Identity and Access Management (IAM) ロールを使用してクロスアカウントコントロールを設定することです。ターゲットアカウントに IAM ロールを追加することで、信頼できるアカウントのユーザーが、ターゲットアカウントの Amazon ES ドメインにアクセスすることを許可できます。このようにして、AWS コンソールで IAM ロールを切り替えることで、組織内のさまざまなユーザーが、中央ロギング Amazon ES ステーションにアクセスして管理できます。

ユーザーが IAM ロールを使用して Amazon ES リソースにアクセスするためのプロセスは次のとおりです。

  1. ターゲットの Amazon ES ドメインへのアクセスが許可されているアカウント A にロールを作成します。
  2. アカウント A のロールを引き受けることを許可されているアカウント B にユーザーを作成します。
  3. ロールを切り替えることにより、ロールを使用してターゲットの Amazon ES ドメインにアクセスできるようにするためのアクセス権をアカウント B のユーザーに付与します。

注: アカウント A は、ターゲットの Amazon ES ドメインを持つアカウントです。アカウント B は、ユーザーが中央ロギングステーションにアクセスする際にアクセス元となるアカウントです。

解決方法

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

ロールを作成し、Amazon ES ドメインを管理するためのアクセス権限を付与する

この例では、CrossAccount-test というロールを作成し、test という Amazon ES ドメインを管理するための完全なアクセス権限を付与します。

{
    "Version": "2012-10-17",
    "Statement": [
       
        {
            "Effect": "Allow",
            "Action": [
               
        "es:*"
            ],
            "Resource": “arn:aws:es:<Region>:<Account A-ID>:domain/test/*"
       
        }
    ]
}

ロールの信頼関係を編集する

次に、 CrossAccount-test というロールの信頼関係を編集します

注: アカウント番号とユーザー名を適宜変更してください

{
 
        "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service":
        "es.amazonaws.com",
        "AWS": [
          "arn:aws:iam::<Account B-ID>:root",

         
        "arn:aws:iam::<Account B-ID>:user/<User Name>"
        ]
      },
      "Action": "sts:AssumeRole"
   
        }
  ]
}

ステップ 1 と 2 では、アカウント B のユーザーを信頼されたエンティティとして定義し、信頼できるユーザーがアカウント A の Amazon ES ドメインにアクセスできるようにするための完全なアクセス権限を付与します。

アカウント B のユーザーにアクセス権を付与する

アカウント B で、次のアクセス権限を持つユーザー/グループを作成します。

{
    "Version": "2012-10-17",
    "Statement": {
       
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "arn:aws:iam::<Account A-ID>:role/<CrossAccount-test>"
   
        }
}

このポリシーステートメントを追加すると、アカウント A の CrossAccount-test ロールで AssumeRole アクションを許可することになります。

注: リソース要素の ACCOUNT A-ID を、アカウント A の AWS アカウント ID に変更してください。

Amazon ES アクセスポリシーを編集して、ロールがドメインにアクセスできるようにする

この時点では、アカウント A のロールを引き受けるためにアカウント B を信頼しています。次に、このロールが Amazon ES ドメインにアクセスすることを許可します。

Amazon ES アクセスポリシーを編集し、次のように入力します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
     
        "Principal": {
        "AWS": [
          "arn:aws:iam::<Account A-ID>:role/<CrossAccount-test>"
       
        ]
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:<region>:<Account A-ID>:domain/<Domain Name>/*"
   
        }
  ]
}

ロールを切り替えることによってアクセスをテストする

クロスアカウントサポートを有効にしたので、ロールを切り替えてアクセスをテストします。

  1. CrossAccount-test ARN をクリップボードにコピーします。
  2. AWS コンソールを使用してアカウント B にログインします。
  3. [User] (ユーザー) タブで、ドロップダウンリストから [Switch Role] (ロールの切り替え) を選択します。
  4. [Switch Role] (ロールの切り替え) ページで、アカウント A のアカウント ID とロール名を入力します。この例では、ロール名は CrossAccount-test です。
  5. [Switch Role] (ロールの切り替え) を選択します。

注: コマンドラインにおいて、アカウント B がアカウント A 環境で機能する必要がある場合は、AWS CLI を使用してロールを切り替えることができます。詳細については、「ロールの切り替え (AWS CLI)」をご参照ください。

ユーザーのアクセス権限は、アカウント A で作成したロールで許可されているものにすぐに切り替わります。この方法でクロスアカウントアクセスを設定することで、ユーザーは異なるアカウントで個別の IAM ユーザーを作成する必要がなくなります。また、リソースにアクセスするために、あるアカウントからサインアウトし、別のアカウントにサインインする必要はありません。 


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?