Snow ファミリーコンソールのアクセス制御とジョブの作成 - AWS Snowball Edge 開発者ガイド

Snow ファミリーコンソールのアクセス制御とジョブの作成

すべての AWS のサービスと同様に、AWS Snowball へのアクセスには、AWS によってリクエストの認証に使用される認証情報が必要です。これらの認証情報には、Amazon S3 バケットまたは AWS Lambda 関数などの AWS リソースへのアクセス許可が必要です。AWS Snowball には、以下の 2 つの違いがあります。

  1. AWS Snowball のジョブには Amazon リソースネーム (ARN) がありません。

  2. オンプレミスのデバイスに対する物理/ネットワークアクセスコントロールは、お客様の責任で行っていただきます。

AWS Identity and Access Management (IAM) と AWS Snowball を使用して、AWS クラウド 内のリソースにアクセスできるユーザーを制御することでリソースを保護する方法と、ローカルアクセスコントロールの推奨事項については、「AWS Snow Family 向けの Identity and Access Management」を参照してください。

AWS クラウド でのリソースへのアクセス許可の管理の概要

すべての AWS リソースは AWS アカウント によって所有され、リソースの作成またはアクセスは、許可のポリシーによって管理されます。アカウント管理者は、アクセス許可ポリシーを IAM ID (ユーザー、グループ、ロール) にアタッチできます。一部のサービス (AWS Lambda など) では、アクセス許可ポリシーをリソースにアタッチすることもできます。

注記

アカウント管理者 (または管理者ユーザー) は、管理者権限を持つユーザーです。詳細については、「IAM ユーザーガイド」の「IAM のベストプラクティス」を参照してください。

リソースおよびオペレーション

AWS Snowball では、主なリソースはジョブです。AWS Snowball には、Snowball や AWS Snowball Edge デバイスなどのデバイスがありますが、これらのデバイスは既存のジョブというコンテキスト内でのみ使用できます。Amazon S3 バケットおよび Lambda 関数は、それぞれ Amazon S3 と Lambda のリソースです。

前述のとおり、ジョブには関連付けられた Amazon リソースネーム (ARN) はありません。ただし、Amazon S3 バケットなどの他のサービスのリソースには、以下の表に示すように、一意の ARN が関連付けられています。

リソースタイプ ARN 形式
S3 バケット arn:aws:s3:region:account-id:BucketName/ObjectName

AWS Snowball はジョブを作成および管理するための一連のアクションを提供します。使用可能なオペレーションのリストについては、AWS Snowball API リファレンスを参照してください。

リソース所有権について

AWS アカウントは、誰がリソースを作成したかにかかわらず、アカウントで作成されたリソースを所有します。具体的には、リソース所有者は、リソースの作成リクエストを認証するプリンシパルエンティティ (ルートアカウント、IAM ユーザー、またはIAM ロール) の AWS アカウント です。次の例は、この仕組みを示しています。

  • お客様の AWS アカウント ルートアカウントの認証情報を使用して S3 バケットを作成する場合、その AWS アカウント がリソースの所有者となります (AWS Snowball では、リソースはジョブです)。

  • AWS アカウントで IAM ユーザーを作成し、そのユーザーに Snow Family デバイスを注文するジョブを作成するためのアクセス許可を付与すると、そのユーザーは Snow Family デバイスを注文するジョブを作成できます。ただし、ユーザーが属するお客様の AWS アカウント がジョブリソースを所有します。

  • AWS アカウントに、ジョブを作成するためのアクセス許可を持つ IAM ロールを作成すると、ロールを引き受けることのできるすべてのユーザーが Snow Family デバイスを注文するためのジョブを作成できます。ジョブリソースを所有するのは、このロールが属するお客様の AWS アカウント です。

AWS クラウド 内のリソースへのアクセスの管理

アクセス権限ポリシー では、誰が何にアクセスできるかを記述します。次のセクションで、アクセス許可ポリシーを作成するために使用可能なオプションについて説明します。

注記

このセクションでは、AWS Snowball のコンテキストでの IAM の使用について説明します。IAM サービスに関する詳しい説明はしません。完全な IAM ドキュメンテーションについては、「IAM ユーザーガイド」の「IAM とは」を参照してください。IAM ポリシー構文の詳細と説明については、「IAM ユーザーガイド」の「AWS IAM ポリシーリファレンス」を参照してください。

IAM ID にアタッチされたポリシーは ID ベースのポリシー (IAM ポリシー) と呼ばれ、リソースにアタッチされたポリシーはリソースベースのポリシーと呼ばれます。AWS Snowball は ID ベースのポリシー (IAM ポリシー) のみをサポートします。

リソースベースのポリシー

Amazon S3 などの他のサービスでは、リソースベースの許可ポリシーもサポートされています。例えば、ポリシーを S3 バケットにアタッチして、そのバケットに対する許可を管理できます。AWS Snowball はリソースベースのポリシーをサポートしていません。 

ポリシー要素 (アクション、効果、プリンシパル) の指定

各ジョブで (リソースおよびオペレーション を参照)、サービスは一連の API オペレーション (AWS Snowball API リファレンスリファレンスを参照) を定義してそのジョブを作成、管理します。こうした API オペレーションへの許可を付与するために、AWS Snowball はポリシーに定義できる一連のアクションを定義します。たとえば、ジョブの場合、次のアクションが定義されます。CreateJobCancelJob、および DescribeJob。API オペレーションを実行する場合に、複数のアクションで権限が必要となる場合があることに注意してください。

最も基本的なポリシーの要素を次に示します。

  • リソース– ポリシーで Amazon リソースネーム (ARN) を使用して、ポリシーを適用するリソースを識別します。詳細については、「リソースおよびオペレーション」を参照してください。

    注記

    これは Amazon S3、Amazon EC2、AWS Lambda、AWS KMS、その他多くのサービスでサポートされています。

    Snowball では、IAM ポリシーステートメントの Resource 要素でのリソース ARN の指定はサポートされていません。Snowball へのアクセスを許可するには、ポリシーで “Resource”: “*” を指定します。

  • アクション – アクションキーワードを使用して、許可または拒否するリソース操作を特定します。たとえば、指定した Effect に応じて、snowball:* は、すべてのオペレーションの実行をユーザーに許可または拒否します。

    注記

    これは、Amazon EC2、Amazon S3、および IAM でサポートされています。

  • 効果 – ユーザーが特定のアクションを要求する際の効果を指定します。許可または拒否のいずれかになります。リソースへのアクセスを明示的に付与 (許可) していない場合、アクセスは暗黙的に拒否されます。また、明示的にリソースへのアクセスを拒否すると、別のポリシーによってアクセスが許可されている場合でも、ユーザーはそのリソースにアクセスできなくなります。

    注記

    これは、Amazon EC2、Amazon S3、および IAM でサポートされています。

  • プリンシパル – ID ベースのポリシー (IAM ポリシー) で、ポリシーがアタッチされているユーザーが黙示的なプリンシパルとなります。リソースベースのポリシーでは、アクセス許可を受け取りたいユーザー、アカウント、サービス、またはその他のエンティティを指定します (リソースベースのポリシーにのみ適用)。AWS Snowball では、リソースベースのポリシーはサポートされていません。

IAM ポリシーの構文と記述の詳細については、「IAM ユーザーガイド」の「AWS IAM ポリシーリファレンス」を参照してください。

すべての AWS Snowball API アクションを示す表については、「AWS Snowball API のアクセス権限: アクション、リソース、条件リファレンス」を参照してください。

ポリシーでの条件の指定

許可を付与するとき、IAM ポリシー言語を使用して、ポリシーが有効になる必要がある条件を指定できます。例えば、特定の日付の後にのみ適用されるポリシーが必要になる場合があります。ポリシー言語での条件の指定の詳細については、「IAM ユーザーガイド」の「条件」を参照してください。

条件を表すには、あらかじめ定義された条件キーを使用します。AWS Snowball に固有の条件キーはありません。ただし、必要に応じて使用できる AWS 全体の条件キーがあります。AWS 全体のキーの完全なリストについては、IAM ユーザーガイド条件に利用できるキーを参照してください。

AWS Snowball Edge 用の AWS 管理 (事前定義) ポリシー

AWS は、AWSによって作成され管理されるスタンドアロンの IAM ポリシーを提供することで、多くの一般的ユースケースに対応します。マネージドポリシーは、一般的ユースケースに必要な許可を付与することで、どの許可が必要なのかをユーザーが調査する必要をなくすることができます。詳細については、「IAM ユーザーガイド」の「AWS マネージドポリシー」を参照してください。

AWS では、以下の AWS Snowball 管理ポリシーを使用できます。

Snowball Edge 用の IAM ロールポリシーの作成

IAM ロールポリシーは、Amazon S3 バケットに対する読み取り/書き込みのアクセス許可を付与して作成する必要があります。また、IAM ロールには、Snowball との信頼関係も必要です。信頼関係により、データをインポートするかエクスポートするかに応じて、AWS がSnowball または Amazon S3 バケットにデータを書き込むことができます。

AWS Snow ファミリーマネジメントコンソール で Snow Family デバイスを注文するためのジョブを作成する場合は、必要な IAM ロール の作成は [アクセス許可] セクションのステップ 4 で行います。これは自動プロセスです。Snowball に許可した IAM ロールは、お客様の転送データが入った Snowball が AWS に到着したときに、バケットにデータを書き込むためにのみ使用されます。このプロセスを以下の手順で示します。

用の IAM ロールを作成するには
  1. AWS Management Console にサインインして、https://console.aws.amazon.com/importexport/ で AWS Snowball コンソールを開きます。

  2. [ジョブの作成]を選択します。

  3. 最初のステップで、Amazon S3 へのインポートジョブの詳細を入力してから、[Next (次へ)] を選択します。

  4. 2 番目のステップでは、[Permission] で、[Create/Select IAM Role] を選択します。

    IAM マネジメントコンソールが開き、指定した Amazon S3 バケットにオブジェクトをコピーするために AWS で使用する IAM ロール が表示されます。

  5. このページで詳細を確認し、[許可] を選択します。

    AWS Snow ファミリーマネジメントコンソール に戻ります。[Selected IAM role ARN] に、作成した IAM ロールの Amazon リソースネーム (ARN) が表示されます。

  6. [Next] (次へ) を選択して、 ロールの作成を終了します。

前述の手順により、データをインポート先となる Amazon S3 バケットへの書き込み権限を持つ IAM ロールが作成されます。作成する IAM ロールは、インポートジョブ用であるか、エクスポートジョブ用であるかによって、次のいずれかの構造になります。

インポートジョブ用の IAM ロール

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:ListBucketMultipartUploads" ], "Resource": "arn:aws:s3:::*" }, { "Effect": "Allow", "Action": [ "s3:GetBucketPolicy", "s3:PutObject", "s3:AbortMultipartUpload", "s3:ListMultipartUploadParts", "s3:PutObjectAcl", "s3:ListBucket" ], "Resource": "arn:aws:s3:::*" } ] }

AWS KMS で管理されたキー (SSE-KMS) でサーバー側の暗号化を使用して、インポートジョブに関連付けられた Amazon S3 バケットを暗号化する場合は、IAM ロールに以下のステートメントも追加する必要があります。

{ "Effect": "Allow", "Action": [ "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:us-west-2:123456789012:key/abc123a1-abcd-1234-efgh-111111111111" }

オブジェクトのサイズが大きい場合、インポートプロセスに使用される Amazon S3 クライアントはマルチパートアップロードを使用します。SSE-KMS を使用してマルチパートアップロードを開始する場合、アップロードされたすべてのパートは、指定した AWS KMS キーを使用して暗号化されます。パートは暗号化されているため、マルチパートアップロードを完了するために組み立てる前に、パートを復号する必要があります。そのため、SSE-KMS を使用して Amazon S3 へのマルチパートアップロードを実行する際は、AWS KMS キー (kms:Decrypt) を復号するためのアクセス許可が必要です。

以下に示しているのは、kms:Decrypt アクセス許可が求められるインポートジョブに必要な IAM ロールの例です。

{ "Effect": "Allow", "Action": [ "kms:GenerateDataKey","kms:Decrypt" ], "Resource": "arn:aws:kms:us-west-2:123456789012:key/abc123a1-abcd-1234-efgh-111111111111" }

以下に示しているのは、エクスポートジョブに必要な IAM ロールの例です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetBucketPolicy", "s3:GetObject", "s3:ListBucket" ], "Resource": "arn:aws:s3:::*" } ] }

AWS KMS で管理されたキーでサーバー側の暗号化を使用して、エクスポートジョブに関連付けられた Amazon S3 バケットを暗号化する場合は、IAM ロールに以下のステートメントも追加する必要があります。

{ "Effect": "Allow", "Action": [ “kms:Decrypt” ], "Resource": "arn:aws:kms:us-west-2:123456789012:key/abc123a1-abcd-1234-efgh-111111111111" }

独自のカスタム IAM ポリシーを作成して、AWS Snowball ジョブ管理用の API オペレーションに対してアクセス許可を付与できます。これらのカスタムポリシーは、それらのアクセス許可が必要な IAM ユーザーまたはグループにアタッチできます。