ジョブタグを使用した S3 バッチ操作のアクセス許可の制御
S3 バッチ操作ジョブの管理に役立つように、ジョブタグを追加できます。ジョブタグを使用すると、バッチ操作ジョブへのアクセスをコントロールし、ジョブの作成時にタグが適用されるようにできます。
バッチ操作ジョブごとに最大 50 個のジョブタグを適用できます。これにより、ジョブを編集できるユーザーのセットを制限する非常に細かなポリシーを設定できます。ジョブタグを使用して、ユーザーによるジョブのキャンセル、確認状態にあるジョブの有効化、ジョブの優先度レベルの変更を許可したり制限したりできます。さらに、すべての新しいジョブにタグが適用されるようにし、タグに許可されるキーと値のペアを指定できます。これらのすべての条件を同じ IAM ポリシー言語を使用して表現できます。詳細については、「サービス認証リファレンス」の「Amazon S3 のアクション、リソース、および条件キー」を参照してください。
以下の例では、S3 バッチ操作ジョブタグを使用して、特定の部門(たとえば、財務またはコンプライアンス部門) 内で実行されるジョブのみを作成および編集するアクセス許可をユーザーに付与する方法を示しています。QA や本番稼働など、関連する開発のステージに基づいてジョブを割り当てることもできます。
この例では、AWS Identity and Access Management (IAM) ポリシーで S3 バッチ操作ジョブタグを使用して、部門内で実行されているジョブのみを作成および編集するアクセス権限をユーザーに付与します。QA や本番稼働など、関連する開発のステージに基づいてジョブを割り当てます。
この例では、以下の部門を使用しています。各部門では、バッチ操作をさまざまな方法で使用しています。
-
財務
-
コンプライアンス
-
ビジネスインテリジェンス
-
エンジニアリング
ユーザーとリソースへのタグの割り当てによるアクセスのコントロール
このシナリオでは、管理者は属性ベースのアクセスコントロール (ABAC) を使用しています。ABAC は、ユーザーと AWS リソースの両方にタグを付けることでアクセス許可を定義する IAM 認可戦略です。
ユーザーとジョブには、以下の部門タグのいずれかが割り当てられます。
キー : 値
-
department : Finance
-
department : Compliance
-
department : BusinessIntelligence
-
department : Engineering
注記
ジョブタグのキーと値は大文字と小文字が区別されます。
ABAC アクセスコントロール戦略を使用して、タグ department=Finance
をユーザーと関連付けることで、財務部門のユーザーに対して、部門内で S3 バッチ操作ジョブを作成および管理するアクセス許可を付与します。
さらにマネージドポリシーを IAM ユーザーにアタッチして、社内のすべてのユーザーに、それぞれの部門内での S3 バッチ操作ジョブの作成または変更を許可できます。
この例のポリシーには、3 つのポリシーステートメントが含まれています。
-
ポリシーの最初のステートメントでは、ユーザーに対して、ジョブ作成リクエストにそれぞれの部門に一致するジョブタグが含まれている場合に、バッチ操作ジョブの作成を許可しています。これは、
"${aws:PrincipalTag/department}"
構文を使用して表現され、ポリシー評価時にユーザーの部門タグに置き換えられます。リクエスト("aws:RequestTag/department")
の部門タグに指定した値がユーザーの部門と一致すると、条件が満たされます。 -
ポリシーの 2 番目のステートメントでは、ユーザーに対して、更新対象のジョブがそのユーザーの部門と一致する場合に、ジョブの優先度の変更、ジョブのステータスの更新を許可しています。
-
3 番目のステートメントでは、ユーザーに対して、(1) 部門タグが保持され、(2) 更新対象のジョブが部門内にある限り、
PutJobTagging
リクエストによりいつでもバッチ操作ジョブのタグを更新することを許可しています。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:CreateJob", "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/department": "${aws:PrincipalTag/department}" } } }, { "Effect": "Allow", "Action": [ "s3:UpdateJobPriority", "s3:UpdateJobStatus" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/department": "${aws:PrincipalTag/department}" } } }, { "Effect": "Allow", "Action": "s3:PutJobTagging", "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/department": "${aws:PrincipalTag/department}", "aws:ResourceTag/department": "${aws:PrincipalTag/department}" } } } ] }
バッチ操作ジョブをステージ別にタグ付けし、ジョブの優先度の制限を強制する
すべての S3 バッチ操作ジョブには数値優先順位があり、Amazon S3 がジョブを実行する順序を決定します。この例では、以下のように、ほとんどのユーザーがジョブに割り当てることができる最大優先度を制限し、高い優先度の範囲を特権のあるユーザーの限定セット用に予約します。
QA ステージの優先度の範囲 (低): 1 ~ 100
本番稼働ステージの優先度の範囲 (高): 1 ~ 300
そのためには、ジョブのステージを表す新しいタグのセットを導入します。
キー : 値
stage : QA
stage : Production
部門内での優先度の低いジョブの作成と更新
このポリシーでは、S3 バッチ操作ジョブの作成と更新に対して、部門ベースの制限に加えて 2 つの新しい制限を導入します。
ジョブにタグ
stage=QA
が含まれていることを必須とする新しい条件を使用して、ユーザーに、それぞれの部門内でジョブを作成または更新することを許可する。ユーザーに、新しい最大優先度 100 までのジョブを作成または更新することを許可する。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:CreateJob", "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/department": "${aws:PrincipalTag/department}", "aws:RequestTag/stage": "QA" }, "NumericLessThanEquals": { "s3:RequestJobPriority": 100 } } }, { "Effect": "Allow", "Action": [ "s3:UpdateJobStatus" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/department": "${aws:PrincipalTag/department}" } } }, { "Effect": "Allow", "Action": "s3:UpdateJobPriority", "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/department": "${aws:PrincipalTag/department}", "aws:ResourceTag/stage": "QA" }, "NumericLessThanEquals": { "s3:RequestJobPriority": 100 } } }, { "Effect": "Allow", "Action": "s3:PutJobTagging", "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/department" : "${aws:PrincipalTag/department}", "aws:ResourceTag/department": "${aws:PrincipalTag/department}", "aws:RequestTag/stage": "QA", "aws:ResourceTag/stage": "QA" } } }, { "Effect": "Allow", "Action": "s3:GetJobTagging", "Resource": "*" } ] }
部門内での優先度の高いジョブの作成と更新
少数のユーザーのみが QA または本番稼働で優先度の高いジョブを作成できる必要があるとします。このニーズに応えるには、前のセクションの優先度の低いポリシーを採用した管理ポリシーを作成します。
このポリシーは以下の処理を実行します。
タグ
stage=QA
またはstage=Production
のいずれかを使用して、ユーザーに、部門内でジョブを作成または更新することを許可する。ユーザーに、最大優先度 300 までのジョブを作成または更新することを許可する。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:CreateJob", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "aws:RequestTag/stage": [ "QA", "Production" ] }, "StringEquals": { "aws:RequestTag/department": "${aws:PrincipalTag/department}" }, "NumericLessThanEquals": { "s3:RequestJobPriority": 300 } } }, { "Effect": "Allow", "Action": [ "s3:UpdateJobStatus" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/department": "${aws:PrincipalTag/department}" } } }, { "Effect": "Allow", "Action": "s3:UpdateJobPriority", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "aws:ResourceTag/stage": [ "QA", "Production" ] }, "StringEquals": { "aws:ResourceTag/department": "${aws:PrincipalTag/department}" }, "NumericLessThanEquals": { "s3:RequestJobPriority": 300 } } }, { "Effect": "Allow", "Action": "s3:PutJobTagging", "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/department": "${aws:PrincipalTag/department}", "aws:ResourceTag/department": "${aws:PrincipalTag/department}" }, "ForAnyValue:StringEquals": { "aws:RequestTag/stage": [ "QA", "Production" ], "aws:ResourceTag/stage": [ "QA", "Production" ] } } } ] }