バケットポリシーを使用した Amazon S3 バケットへのアクセスの管理 - AWS SDK for C++

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

バケットポリシーを使用した Amazon S3 バケットへのアクセスの管理

バケットポリシーを設定、取得、または削除して、Amazon S3 バケットへのアクセスを管理できます。

前提条件

作業を始める前に「AWS SDK for C++ の開始方法」を読むことをお勧めします。

コード例をダウンロードし、「コード例の開始方法」の説明に従ってソリューションをビルドします。

例を実行するには、リクエストに使用するユーザープロファイルに、AWS のサービスとアクションに対する適切なアクセス許可が付与されている必要があります。詳細については、「AWS 認証情報の提供」を参照してください。

バケットポリシーの設定

特定の S3 バケットに対するバケットポリシーを設定するには、S3ClientPutBucketPolicy 関数の呼び出しで、バケット名とポリシーの JSON 表現を PutBucketPolicyRequest で指定して渡します。

コード

//! Build a policy JSON string. /*! \param userArn: Aws user Amazon Resource Name (ARN). For more information, see https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns. \param bucketName: Name of a bucket. \return String: Policy as JSON string. */ Aws::String getPolicyString(const Aws::String &userArn, const Aws::String &bucketName) { return "{\n" " \"Version\":\"2012-10-17\",\n" " \"Statement\":[\n" " {\n" " \"Sid\": \"1\",\n" " \"Effect\": \"Allow\",\n" " \"Principal\": {\n" " \"AWS\": \"" + userArn + "\"\n"" },\n" " \"Action\": [ \"s3:getObject\" ],\n" " \"Resource\": [ \"arn:aws:s3:::" + bucketName + "/*\" ]\n" " }\n" " ]\n" "}"; }
bool AwsDoc::S3::putBucketPolicy(const Aws::String &bucketName, const Aws::String &policyBody, const Aws::S3::S3ClientConfiguration &clientConfig) { Aws::S3::S3Client s3Client(clientConfig); std::shared_ptr<Aws::StringStream> request_body = Aws::MakeShared<Aws::StringStream>(""); *request_body << policyBody; Aws::S3::Model::PutBucketPolicyRequest request; request.SetBucket(bucketName); request.SetBody(request_body); Aws::S3::Model::PutBucketPolicyOutcome outcome = s3Client.PutBucketPolicy(request); if (!outcome.IsSuccess()) { std::cerr << "Error: putBucketPolicy: " << outcome.GetError().GetMessage() << std::endl; } else { std::cout << "Set the following policy body for the bucket '" << bucketName << "':" << std::endl << std::endl; std::cout << policyBody << std::endl; } return outcome.IsSuccess(); }
注記

Aws::Utils::Json::JsonValue ユーティリティクラスを使用すると、有効な JSON オブジェクトをコンストラクトして PutBucketPolicy に渡すことができます。

GitHub で完全な例をご覧ください。

バケットポリシーの取得

Amazon S3 バケットのポリシーを取得するには、S3ClientGetBucketPolicy 関数の呼び出しで、バケット名を GetBucketPolicyRequest で指定して渡します。

Code

bool AwsDoc::S3::getBucketPolicy(const Aws::String &bucketName, const Aws::S3::S3ClientConfiguration &clientConfig) { Aws::S3::S3Client s3Client(clientConfig); Aws::S3::Model::GetBucketPolicyRequest request; request.SetBucket(bucketName); Aws::S3::Model::GetBucketPolicyOutcome outcome = s3Client.GetBucketPolicy(request); if (!outcome.IsSuccess()) { const Aws::S3::S3Error &err = outcome.GetError(); std::cerr << "Error: getBucketPolicy: " << err.GetExceptionName() << ": " << err.GetMessage() << std::endl; } else { Aws::StringStream policy_stream; Aws::String line; outcome.GetResult().GetPolicy() >> line; policy_stream << line; std::cout << "Retrieve the policy for bucket '" << bucketName << "':\n\n" << policy_stream.str() << std::endl; } return outcome.IsSuccess(); }

GitHub で完全な例をご覧ください。

バケットポリシーの削除

バケットポリシーを削除するには、S3ClientDeleteBucketPolicy 関数の呼び出しで、バケット名を DeleteBucketPolicyRequest で指定して渡します。

コード

bool AwsDoc::S3::deleteBucketPolicy(const Aws::String &bucketName, const Aws::S3::S3ClientConfiguration &clientConfig) { Aws::S3::S3Client client(clientConfig); Aws::S3::Model::DeleteBucketPolicyRequest request; request.SetBucket(bucketName); Aws::S3::Model::DeleteBucketPolicyOutcome outcome = client.DeleteBucketPolicy(request); if (!outcome.IsSuccess()) { const Aws::S3::S3Error &err = outcome.GetError(); std::cerr << "Error: deleteBucketPolicy: " << err.GetExceptionName() << ": " << err.GetMessage() << std::endl; } else { std::cout << "Policy was deleted from the bucket." << std::endl; } return outcome.IsSuccess(); }

バケットにポリシーが存在しない場合でも、この関数は成功します。指定した名前のバケットが存在していないか、バケットへのアクセス権がない場合は、AmazonServiceException がスローされます。

GitHub で完全な例をご覧ください。

詳細