

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

# Amazon Neptune で IAM ロールを連鎖する
<a name="bulk-load-tutorial-chain-roles"></a>

**重要**  
[エンジンリリース 1.2.1.0.R3](engine-releases-1.2.1.0.R3.md) で導入された IAM ロールの連鎖を利用する新しい一括読み込みクロスアカウント機能では、一括読み込みのパフォーマンスが低下する場合があります。そのため、この機能をサポートするエンジンリリースへのアップグレードは、問題が解決されるまで一時的に中断されました。

クラスターにロールをアタッチすると、クラスターはそのロールを引き受けて、Amazon S3 に保存されているデータにアクセスできるようになります。[エンジンリリース 1.2.1.0.R3](engine-releases-1.2.1.0.R3.md) 以降では、そのロールが必要なすべてのリソースにアクセスできない場合、クラスターが他のリソースにアクセスできるように引き受けることができる 1 つ以上の追加のロールを連鎖できます。チェーン内の各ロールは、クラスターがチェーンの末尾のロールを引き受けるまで、チェーン内の次のロールを引き受けます。

ロールを連鎖するには、ロール間で信頼関係を確立します。例えば、`RoleB` を `RoleA` に連鎖するには、`RoleA` は `RoleB` の引き受けを許可するアクセス許可ポリシーを持っている必要があり、`RoleB` はそのアクセス許可を `RoleA` に戻すことを許可する信頼ポリシーが必要です。詳細については、「[IAM ロールの使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html)」を参照してください。

チェーン内の最初のロールは、データをロードするクラスターにアタッチされる必要があります。

最初のロールと、チェーン内の次のロールを引き受ける後続の各ロールには、以下のものが必要です。
+ `sts:AssumeRole` アクションに対する `Allow` 効果を持つ特定のステートメントを含むポリシー。
+ `Resource` 要素内の次のロールの Amazon リソースネーム (ARN)。

**注記**  
ターゲット Amazon S3 バケットは、クラスターと同じ AWS リージョンにある必要があります。

## 連鎖したロールを使用したクロスアカウントアクセス
<a name="bulk-load-tutorial-chain-cross-account"></a>

別のアカウントに属する 1 つまたは複数のロールを連鎖することによって、クロスアカウントアクセスを付与できます。クラスターが別のアカウントに属するロールを一時的に引き受けると、そのアカウントのリソースにアクセスできるようになります。

例えば、**アカウント A** が**アカウント B** に属する Amazon S3 バケットのデータにアクセスしたいとします。
+ **アカウント A **は、 という名前の Neptune AWS のサービスロールを作成し`RoleA`、クラスターにアタッチします。
+ **アカウント B** は、**アカウント B** バケット内のデータにアクセスすることが承認されている `RoleB` という名前のロールを作成します。
+ **アカウント A** は、`RoleB` を引き受けることを許可するアクセス許可ポリシーを `RoleA` にアタッチします。
+ **アカウント B** は、`RoleB`アクセス許可を渡すことができる信頼ポリシーをアタッチします。`RoleA`
+ **アカウント B** バケットのデータにアクセスするには、**アカウント A** は `RoleA` と `RoleB` を連鎖する `iamRoleArn` パラメータを使用してローダーコマンドを実行します。ローダー操作の継続期間中、`RoleA` は一時的に `RoleB` を引き受けて、**アカウント B** で Amazon S3 バケットにアクセスします。

![連鎖したロールを使用したクロスアカウントアクセスの図](http://docs.aws.amazon.com/ja_jp/neptune/latest/userguide/images/cross-account-bulk-load.png)


例えば、`RoleA` には、Neptune との信頼関係を確立する信頼ポリシーがあるとします。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
          "Service": "rds.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

`RoleA` には、**アカウント B** が所有する `RoleB` を引き受けることを許可するアクセス許可ポリシーもあります。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Stmt1487639602000",
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": "arn:aws:iam::{{111122223333}}:role/RoleB"
        }
    ]
}
```

------

逆に、`RoleB` には、`RoleA` との信頼関係を確立する次のような信頼ポリシーがあるとします。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Principal": {
                "AWS": "arn:aws:iam::{{111122223333}}:role/RoleA"
            }
        }
    ]
}
```

------

`RoleB` には、**アカウント B** にある Amazon S3 バケット内のデータにアクセスするアクセス許可も必要です。

## AWS Security Token Service (STS) VPC エンドポイントの作成
<a name="bulk-load-tutorial-sts-endpoint"></a>

Neptune ローダーは、プライベート IP アドレスを介して AWS STS APIs にプライベートにアクセスするために IAM ロールを連鎖させる AWS STS 場合、 の VPC エンドポイントを必要とします。Amazon VPC から VPC エンドポイント AWS STS を介して、安全でスケーラブルな方法で に直接接続できます。インターフェイス VPC エンドポイントを使用すると、アウトバウンドトラフィックのファイアウォールを開く必要がないため、セキュリティ体制が強化されます。また、Amazon VPC エンドポイントを使用する利点は他にもあります。

VPC エンドポイントを使用する場合、 へのトラフィック AWS STS はインターネット経由で送信されず、Amazon ネットワークを離れることもありません。VPC は、ネットワークトラフィックの可用性リスクや帯域幅の制約 AWS STS なしに、 に安全に接続されます。詳細については、「[AWS STS インターフェイス VPC エンドポイントの使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_sts_vpce.html)」を参照してください。

**( AWS Security Token Service STS) のアクセスを設定するには**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) で Amazon VPC コンソールを開きます。

1. ナビゲーションペインで、**[エンドポイント]** を選択します。

1. [**エンドポイントの作成**] を選択します。

1. インターフェイスタイプのエンドポイントの **サービス名** `com.amazonaws.region.sts` を選択します。

1. Neptune DB インスタンスと EC2 インスタンスが含まれている **VPC** を選択します。

1. EC2 インスタンスが存在するサブネットの横にあるチェックボックスを選択します。同じアベイラビリティーゾーンから複数のサブネットを選択することはできません。

1. [IP address type] (IP アドレスのタイプ) で、次のオプションから選択します。
   + **[IPv4]** — IPv4 アドレスをエンドポイントのネットワークインターフェイスに割り当てます。このオプションは、選択したすべてのサブネットに IPv4 アドレス範囲がある場合にのみサポートされます。
   + **[IPv6]** — IPv6 アドレスをエンドポイントのネットワークインターフェイスに割り当てます。このオプションは、選択されたすべてのサブネットが IPv6 のみのサブネットである場合にのみサポートされます。
   + **[Dualstack]** — IPv4 と IPv6 の両方のアドレスをエンドポイントのネットワークインターフェイスに割り当てます。このオプションは、選択されたすべてのサブネットに IPv4 と IPv6 両方のアドレス範囲がある場合にのみサポートされます。

1. **[セキュリティグループ]** で、VPC エンドポイントのエンドポイントネットワークインターフェイスに関連付けるセキュリティグループを選択します。Neptune DB インスタンスと EC2 インスタンスにアタッチされているすべてのセキュリティグループを選択する必要があります。

1. **[Policy]** (ポリシー) で **[Full access]** (フルアクセス) を選択して、すべてのリソースに対するすべてのプリンシパルによる VPC エンドポイント経由のすべてのオペレーションを許可します。それ以外の場合は、**[Custom]** (カスタム) を選択して、VPC エンドポイント経由でリソースに対してアクションを実行するためにプリンシパルが持つ許可を制御する VPC エンドポイントポリシーをアタッチします。このオプションは、サービスが VPC エンドポイントポリシーをサポートしている場合にのみ使用できます。詳細については、「[エンドポイントポリシー](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)」を参照してください。

1. (*オプション*) タグを追加するには、**[新しいタグを追加]** を選択し、そのタグのキーと値を入力します。

1. **エンドポイントの作成** を選択します。

エンドポイント作成の詳細については、「Amazon VPC ユーザーガイド」の「[VPC エンドポイント](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html)」を参照してください。Amazon STS VPC エンドポイントは IAM ロール連鎖に必要な前提条件であることに注意してください。

 AWS STS エンドポイントへのアクセスを許可したので、データをロードする準備をすることができます。サポートされる形式の詳細については、「[データ読み込み形式](bulk-load-tutorial-format.md)」を参照してください。

## ローダーコマンド内でのロールの連鎖
<a name="bulk-load-tutorial-loader-chain"></a>

`iamRoleArn` パラメータにロールの ARN のカンマ区切りリストを含めることによって、ローダーコマンドの実行時にロールの連鎖を指定できます。

ほとんどの場合、チェーンに含める必要があるのは 2 つのロールだけですが、3 つ以上のロールを連鎖することも可能です。例えば、このローダーコマンドは次の 3 つのロールを連鎖します。

------
#### [ AWS CLI ]

```
aws neptunedata start-loader-job \
  --endpoint-url https://{{your-neptune-endpoint}}:{{port}} \
  --source "s3://{{(the target bucket name)}}/{{(the target date file name)}}" \
  --format "csv" \
  --iam-role-arn "arn:aws:iam::{{(Account A ID)}}:role/{{(RoleA)}},arn:aws:iam::{{(Account B ID)}}:role/{{(RoleB)}},arn:aws:iam::{{(Account C ID)}}:role/{{(RoleC)}}" \
  --s3-bucket-region "{{us-east-1}}"
```

詳細については、 AWS CLI 「 コマンドリファレンス」の[start-loader-job](https://docs.aws.amazon.com/cli/latest/reference/neptunedata/start-loader-job.html)」を参照してください。

------
#### [ SDK ]

```
import boto3
from botocore.config import Config

client = boto3.client(
    'neptunedata',
    endpoint_url='https://{{your-neptune-endpoint}}:{{port}}',
    config=Config(read_timeout=None, retries={'total_max_attempts': 1})
)

response = client.start_loader_job(
    source='s3://{{(the target bucket name)}}/{{(the target date file name)}}',
    format='csv',
    iamRoleArn='arn:aws:iam::{{(Account A ID)}}:role/{{(RoleA)}},arn:aws:iam::{{(Account B ID)}}:role/{{(RoleB)}},arn:aws:iam::{{(Account C ID)}}:role/{{(RoleC)}}',
    s3BucketRegion='{{us-east-1}}'
)

print(response)
```

------
#### [ awscurl ]

```
awscurl https://{{your-neptune-endpoint}}:{{port}}/loader \
  --region {{us-east-1}} \
  --service neptune-db \
  -X POST \
  -H 'Content-Type: application/json' \
  -d '{
        "source" : "s3://{{(the target bucket name)}}/{{(the target date file name)}}",
        "iamRoleArn" : "arn:aws:iam::{{(Account A ID)}}:role/{{(RoleA)}},arn:aws:iam::{{(Account B ID)}}:role/{{(RoleB)}},arn:aws:iam::{{(Account C ID)}}:role/{{(RoleC)}}",
        "format" : "csv",
        "region" : "us-east-1"
      }'
```

**注記**  
この例では、 AWS 認証情報が 環境で設定されていることを前提としています。{{us-east-1}} を Neptune クラスターのリージョンに置き換えます。

------
#### [ curl ]

```
curl -X POST https://{{your-neptune-endpoint}}:{{port}}/loader \
  -H 'Content-Type: application/json' \
  -d '{
        "source" : "s3://{{(the target bucket name)}}/{{(the target date file name)}}",
        "iamRoleArn" : "arn:aws:iam::{{(Account A ID)}}:role/{{(RoleA)}},arn:aws:iam::{{(Account B ID)}}:role/{{(RoleB)}},arn:aws:iam::{{(Account C ID)}}:role/{{(RoleC)}}",
        "format" : "csv",
        "region" : "us-east-1"
      }'
```

------