IAM ロールを使用したアクセス権限の付与 - AWS SDK for .NET (バージョン3)

本書は、 AWS SDK for .NET、主に.NET FrameworkとASP.NET 4が中心になります。x、Windows、および Visual Studio。

の最新バージョンのドキュメント https://docs.aws.amazon.com/sdk-for-net/最新/開発者ガイド/ は、主に.NET CoreとASP.NET Coreを中心としています。Windows や Visual Studio に加え、クロス・プラットフォームの開発も同じように考慮されます。

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

IAM ロールを使用したアクセス権限の付与

この .NET の例は、以下の方法を示します。

  • Amazon S3 からオブジェクトを取得するサンプルプロジェクトを作成する

  • IAM ロールを作成する

  • Amazon EC2 インスタンスを起動して IAM ロールを指定する

  • Amazon EC2 インスタンスでサンプルを実行する

シナリオ

AWS へのリクエストはすべて、AWS が発行した認証情報を使用して暗号で署名される必要があります。したがって、Amazon EC2 インスタンスで実行するソフトウェア用の認証情報を管理するための戦略が必要です。これらの認証情報を、ソフトウェアに継続してアクセスできる方法で、安全に配信、保存、およびローテーションする必要があります。

IAM ロールにより、EC2 インスタンスで実行しているソフトウェアの AWS 認証情報を効果的に管理することができます。IAM ロールを作成し、ソフトウェアに必要なアクセス許可を使用してそのロールを設定します。IAM ロールの使用の利点については、Windows インスタンスの Amazon EC2 ユーザーガイド の「Amazon EC2 の IAM ロール」および IAM ユーザーガイド の「ロール (委任とフェデレーション)」を参照してください。

アクセス権限を使用するには、ソフトウェアで AWS サービス用のクライアントオブジェクトを作成します。コンストラクタは、認証情報プロバイダーチェーンで認証情報を探します。.NET の場合、認証情報プロバイダーチェーンは次のとおりです。

  • App.config ファイル。

  • EC2 インスタンスの IAM ロールに関連付けられているインスタンスメタデータ

クライアントが App.config で認証情報を見つけることができなかった場合、インスタンスメタデータから IAM ロールに関連付けられたものと同じアクセス許可を含む一時的な認証情報を取得します。認証情報は、アプリケーションソフトウェアに代わってコンストラクタによって保存され、そのクライアントオブジェクトから AWS を呼び出す際に使用されます。この認証情報は一時的で、最終的には失効しますが、SDK クライアントは定期的に認証情報を更新して、アクセスを有効にし続けます。この定期的な更新が、アプリケーションソフトウェアに意識されることはまったくありません。

以下の例では、設定する AWS 認証情報を使用して Amazon S3 からオブジェクトを取得するサンプルプログラムを示します。IAM ロールを作成して AWS の認証情報を提供します。最後に、インスタンスで実行しているサンプルプログラムに AWS 認証情報を提供する IAM ロールでインスタンスを起動します。

Amazon S3 からオブジェクトを取得するサンプルを作成する

次のサンプルコードでは、アクセスできる Amazon S3 バケットのテキストファイルと、Amazon S3 バケットへのアクセスを提供する AWS 認証情報が必要です。

Amazon S3 バケットの作成およびオブジェクトのアップロードの詳細については、Amazon S3 入門ガイドを参照してください。AWS 認証情報の詳細については、「AWS 認証情報の設定」を参照してください。

using System; using System.IO; using System.Threading; using System.Threading.Tasks; using Amazon; using Amazon.S3; using Amazon.S3.Model; namespace S3ShowTextItem { class S3Sample { static async Task<GetObjectResponse> MyGetObjectAsync(string region, string bucket, string item) { RegionEndpoint reg = RegionEndpoint.GetBySystemName(region); AmazonS3Client s3Client = new AmazonS3Client(reg); Console.WriteLine("Retrieving (GET) an object"); GetObjectResponse response = await s3Client.GetObjectAsync(bucket, item, new CancellationToken()); return response; } public static void Main(string[] args) { if (args.Length < 4) { Console.WriteLine("You must supply a region, bucket name, text file name, and output file name"); return; } try { Task<GetObjectResponse> response = MyGetObjectAsync(args[0], args[1], args[2]); Stream responseStream = response.Result.ResponseStream; StreamReader reader = new StreamReader(responseStream); string responseBody = reader.ReadToEnd(); using(FileStream s = new FileStream(args[3], FileMode.Create)) using(StreamWriter writer = new StreamWriter(s)) { writer.WriteLine(responseBody); } } catch (AmazonS3Exception s3Exception) { Console.WriteLine(s3Exception.Message, s3Exception.InnerException); } Console.WriteLine("Press enter to continue"); Console.ReadLine(); } } }

サンプルコードをテストするには

  1. Visual Studio を開き、.NET Framework 4.5 以降を使用して Console App (.NET Framework) プロジェクトを作成します。

  2. AWSSDK.S3 NuGet パッケージをプロジェクトに追加します。

  3. Program.cs ファイル内のコードを上記のサンプルコードに置き換えます。

  4. コンパイルして、サンプルプログラムを実行します。プログラムは成功すると、以下の出力を表示し、Amazon S3 のテキストファイルから取得したテキストを含むファイルをローカルドライブに作成します。

    Retrieving (GET) an object

    プログラムが失敗した場合は、バケットに対するアクセス許可を含む認証情報を使用していることを確認してください。

  5. (オプション) 認証情報をセットアップしていない実行中の Windows インスタンスに、このサンプルプログラムを転送します。プログラムを実行して、認証情報が見つからないため失敗していることを確認します。

IAM ロールを作成します。

Amazon S3 にアクセスするための適切なアクセス権限を持つ IAM ロールを作成します。

IAM ロールを作成するには

  1. IAM コンソールを開きます。

  2. ナビゲーションペインで [Roles] を選択し、続いて [Create New Role] を選択します。

  3. ロールの名前を入力し、[Next Step] を選択します。この名前は EC2 インスタンスを起動するときに必要になるため、覚えておいてください。

  4. [AWS Service Roles] で [Amazon EC2] を選択します。[Select Policy Template] にある [Amazon S3 Read Only Access] を選択します。ポリシーを確認し、[Next Step] を選択します。

  5. ロール情報を確認し、[ロールの作成] を選択します。

EC2 インスタンスを起動して IAM ロールを指定する

Amazon EC2 コンソールまたは AWS SDK for .NET を使用して、IAM ロールで EC2 インスタンスを起動できます。

  • コンソールを使用する。の指示に従ってください。 Windowsインスタンスの起動 の Windows インスタンスの Amazon EC2 ユーザーガイド. [Review Instance Launch] ページでは、[Edit instance details] を選択します。[IAM role] では、前に作成した IAM ロールを指定します。指示にしたがって手順を完了します。そのインスタンスに接続するには、セキュリティグループとキーペアを作成するか、または既存のものを使用する必要があります。

  • AWS SDK for .NET の使用 参照 Amazon EC2インスタンスの起動.

IAM ユーザーは、以下のポリシーによってアクセス許可が付与されていないと、IAM ロールでインスタンスを起動できません。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "iam:PassRole", "iam:ListInstanceProfiles", "ec2:*" ], "Resource": "*" }] }

EC2 インスタンスでサンプルプログラムを実行する

EC2 インスタンスにサンプルプログラムを転送するには、次の手順で説明するように、AWS マネジメントコンソールを使用してインスタンスに接続します。

注記

または、Toolkit for Visual Studio を使用して接続し (AWS Toolkit for Visual Studio の「Amazon EC2 インスタンスへの接続」を参照)、ローカルドライブからインスタンスにファイルをコピーします。インスタンスでローカルドライブを使用できるように、リモートデスクトップセッションが自動的に設定されます。

EC2 インスタンスでサンプルプログラムを実行するには

  1. Amazon EC2 コンソールを開きます。

  2. EC2 インスタンスのパスワードを取得します。

    1. ナビゲーションペインで、[インスタンス] を選択します。インスタンスを選択し、[Connect (接続)] を選択します。

    2. [Connect To Your Instance] ダイアログボックスで、[Get Password] を選択します (インスタンスの起動後、パスワードが利用可能になるまでに数分かかります)。

    3. [Browse] を選択し、インスタンスの起動時に作成したプライベートキーファイルを探します。ファイルを選択して [Open (開く)] を選択すると、ファイルの内容がコンテンツボックスにコピーされます。

    4. [パスワードの復号] を選択します。インスタンスのデフォルトの管理者パスワードが [Connect To Your Instance] ダイアログボックスに表示され、以前のパスワードが [Get Password] へのリンクに置き換えられます。

    5. デフォルトの管理者パスワードを記録するか、クリップボードにコピーします。このパスワードはインスタンスに接続するのに必要です。

  3. EC2 インスタンスに接続します。

    1. [Download Remote Desktop File] を選択します。ブラウザで要求されたら、.rdp ファイルを保存します。終了したら、[Close] を選択して [Connect To Your Instance] ダイアログボックスを閉じます。

    2. ダウンロードしたディレクトリに移動し、.rdp ファイルを右クリックして [Edit] を選択します。[Local Resources] タブの [Local devices and resources] で、[More] を選択します。[ドライブ] を選択してローカルドライブをインスタンスで使用できるようにします。次に、[OK] を選択します。

    3. [Connect] を選択してインスタンスに接続します。リモート接続の発行元が不明であるという警告が表示されることがあります。

    4. メッセージが表示されたら、以前記録またはコピーしたデフォルトの [Administrator] アカウントとデフォルトの管理者パスワードを使って、インスタンスにサインインします。

      コンテンツをコピーアンドペーストすると、データが破損することがあります。サインイン時に "Password Failed" というエラーが発生した場合は、パスワードを手動で入力します。詳細については、Windows インスタンスの Amazon EC2 ユーザーガイド の「RDP を使用して Windows インスタンスに接続する」および「Windows インスタンスのトラブルシューティング」を参照してください。

  4. ローカルドライブからインスタンスに、プログラムと AWS アセンブリ(AWSSDK.Core.dll および AWSSDK.S3.dll)をコピーします。

  5. プログラムを実行し、IAM ロールによって提供された認証情報が正常に使用されることを確認します。

    Retrieving (GET) an object