2

EC2 インスタンスに s3 バケットへのアクセスを許可したいと考えています。

この ec2 インスタンスで、アプリケーションを含むコンテナーが起動されます。現在、s3 バケットに対する権限がありません。

これが私のバケットポリシーです

{
"Version": "2012-10-17",
"Id": "Policy1462808223348",
"Statement": [
    {
        "Sid": "Stmt1462808220978",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::714656454815:role/ecsInstanceRole"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::bucket-name/*",
        "Condition": {
            "IpAddress": {
                "aws:SourceIp": "private-ip/32"
            }
        }
    }
]
}

しかし、バケットに全員がアクセスできる許可を与えるまでは機能しません。

ec2 インスタンス内から s3 バケット内のファイルをカールしようとしましたが、これも機能しません。

4

5 に答える 5

1

わかった……。

ec2 インスタンスのパブリック IP でのみ機能します。

于 2016-05-10T10:34:35.930 に答える
1

「EC2」インスタンスに AWS サーバーへのアクセスを許可する直接的な方法はありませんが、次の方法を試すことができます。

  1. AWS IAM で新しいユーザーを作成し、資格情報ファイルをダウンロードします。
  2. このユーザーは EC2 サーバーを表します。
  3. ユーザーに S3 バケットへのアクセス許可を付与します。
  4. 次に、資格情報ファイルを次の場所に配置します 。-
    EC2 - Windows インスタンス:
    資格情報ファイルを任意の場所に配置します。(例: C:/credentials)
    b. 環境変数AWS_CREDENTIAL_PROFILES_FILEを作成し、資格情報ファイルを置くパスとして値を入れます (例: C:/credentials)
    EC2 - Linux インスタンス
    a.
    a. Windows インスタンスの手順に従います。app-server のルート フォルダー内にフォルダー.awsを作成します (例: /usr/share/tomcat6 )。
    c. 環境変数と.awsフォルダー の間にシンボリック リンクを作成します。 sudo ln -s $AWS_CREDENTIAL_PROFILES_FILE /usr/share/tomcat6/.aws/credentials

  5. 認証情報ファイルが配置されたので、Java コードを使用してバケットにアクセスできます。
    : これには AWS-SDK ライブラリが必要です



    AWSCredentials credentials = null;
            try {
                credentials = new ProfileCredentialsProvider().getCredentials();
            } catch (Exception e) {
                LOG.error("Unable to load credentials " + e);
                failureMsg = "Cannot connect to file server.";
                throw new AmazonClientException(
                        "Cannot load the credentials from the credential profiles file. " +
                        "Please make sure that your credentials file is at the correct " +
                        "location (environment variable : AWS_CREDENTIAL_PROFILES_FILE), and is in valid format.",
                        e);
            }

            AmazonS3 s3 = new AmazonS3Client(credentials);
            Region usWest2 = Region.getRegion(Regions.US_WEST_2);
            s3.setRegion(usWest2);
    ObjectListing objectListing = s3.listObjects(new ListObjectsRequest().withBucketName(bucketName).withPrefix(prefix));

bucketName = [バケット名] and prefix = [ファイルが含まれるバケット内のフォルダ構造]

それが役立つことを願っています。また、Java を使用していない場合は、他のプログラミング言語の AWS-SDK も確認できます。

于 2016-05-11T04:42:50.200 に答える
0

これを試して:

{
"Version": "2012-10-17",
"Id": "Policy1462808223348",
"Statement": [
    {
        "Sid": "Stmt1462808220978",
        "Effect": "Allow",
        "Principal": {
            "AWS": "*" 
        },
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::bucket-name/*",
        "Condition": {
            "IpAddress": {
                "aws:SourceIp": "yourIp/24"
            }
        }
    }
]
}
于 2016-05-10T10:12:51.623 に答える