0

アプリケーション用の AMI を作成し、AWS Marketplace に配置しています。私のアプリケーションは、アプリケーションにアップロードされたドキュメントが保存されている S3 バケットにアクセスする必要があります。アプリケーションを起動するときに、次のようにアクセス キー、秘密キー、およびバケット名を入力するようにユーザーに要求します。

docker run -d  --name ourcontainername -e UPLOAD_ACCESS=<access_key> -e UPLOAD_SECRET=<secret_key> -e UPLOAD_BUCKET=<bucket> ourimagename

ただし、AWS Marketplace ではこの方法は許可されていないようです。

ただし、AWS Marketplace の場合、アプリケーションの作成者は AWS Identity and Access Management (IAM) ロールを使用する必要があり、アクセスまたは秘密キーの使用は許可されていません。

これに IAM ロールを使用する方法を提案するこのドキュメントを読んでいます: https://d0.awsstatic.com/whitepapers/strategies-for-managing-access-to-aws-resources-in-aws-marketplace.pdfただし、彼らが提案していることを行う方法がわかりません。彼らは次のことを提案しています。

  1. 新しいインスタンス ロールを作成します。
  2. ec2.amazonaws.com がロールを引き受けることを許可する信頼関係を追加します。
  3. 必要なアクセス許可を指定する新しいポリシーを作成します。
  4. 新しいポリシーを新しいインスタンス ロールに追加します。
  5. IAM ロールを指定する新しい EC2 インスタンスを作成します。
  6. AWS SDK のいずれかを使用してアプリを構築します。SDK によって一時的な資格情報が自動的に追加されるため、メソッドを呼び出すときに資格情報を指定しないでください。

以下に、上記の各ポイントに対して私が行ったことについて言及します。

  1. 終わり
  2. 信頼関係を追加できません。「Amazon EC2」サービスロールを選択すると、「ステップ 3: 信頼の確立」が自動的に入力されます

ここに画像の説明を入力

3 と 4. 「AmazonS3FullAccess」ポリシーをアタッチします

  1. (1)で作成したロールを指定した新しいEC2インスタンスを起動しました

しかし、(6)が何を意味するのかわかりませんか?

AWS SDK のいずれかを使用してアプリを構築します。SDK によって一時的な資格情報が自動的に追加されるため、メソッドを呼び出すときに資格情報を指定しないでください。

作成した新しいインスタンスで、そうするとき

[ec2-user@ip-172-31-42-131 ~]$ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/<rolename>

ACCESS_KEY、SECRET_KEY、および TOKEN が表示されます。アプリケーションで代わりにこれらを使用する必要がありますか?

FWIW、私のアプリケーションは、docker コンテナー内の JVM で実行される Grails アプリケーションです。

4

0 に答える 0