例: ジョブタグを使用して S3 バッチオペレーション のアクセス許可をコントロールする - Amazon Simple Storage Service

例: ジョブタグを使用して S3 バッチオペレーション のアクセス許可をコントロールする

S3 バッチオペレーション ジョブの管理に役立つように、ジョブタグを追加できます。ジョブタグを使用すると、バッチオペレーション ジョブへのアクセスをコントロールでき、ジョブの作成時にタグが適用されるようにできます。

各 バッチオペレーション ジョブに最大 50 個のジョブタグを適用できます。これにより、ジョブを編集できるユーザーのセットを制限する非常に細かなポリシーを設定できます。ジョブタグを使用して、ユーザーによるジョブのキャンセル、確認状態にあるジョブの有効化、ジョブの優先度レベルの変更を許可したり制限したりできます。さらに、すべての新しいジョブにタグが適用されるようにし、タグに許可されるキーと値のペアを指定できます。これらのすべての条件を同じ IAM ポリシー言語を使用して表現できます。詳細については、「Amazon S3 のアクション、リソース、条件キー」を参照してください。

以下の例では、S3 バッチオペレーション ジョブタグを使用して、特定の部門 (財務部門やコンプライアンス部門など) 内で実行されるジョブのみを作成および編集するアクセス許可をユーザーに付与する方法を示しています。QA本番稼働など、関連する開発のステージに基づいてジョブを割り当てることもできます。

この例では、AWS Identity and Access Management (IAM) ポリシーで S3 バッチオペレーション ジョブタグを使用して、部門内で実行されるジョブのみを作成および編集するアクセス許可をユーザーに付与します。QA本番稼働など、関連する開発のステージに基づいてジョブを割り当てます。

この例では、以下の部門を使用しています。各部門では、バッチオペレーション をさまざまな方法で使用しています。

  • 財務

  • コンプライアンス

  • ビジネスインテリジェンス

  • エンジニアリング

ユーザーとリソースへのタグの割り当てによるアクセスのコントロール

このシナリオでは、管理者は属性ベースのアクセスコントロール (ABAC) を使用しています。ABAC は、IAM ユーザーと AWS リソースの両方にタグを付けることでアクセス許可を定義する IAM 承認戦略です。

ユーザーとジョブには、以下の部門タグのいずれかが割り当てられます。

キー : 値

  • department : Finance

  • department : Compliance

  • department : BusinessIntelligence

  • department : Engineering

    注記

    ジョブタグのキーと値は大文字と小文字が区別されます。

ABAC アクセスコントロール戦略を使用して、タグ department=Finance を IAM ユーザーに関連付けることで、財務部門のユーザーに、部門内で S3 バッチオペレーション ジョブを作成および管理するアクセス許可を付与します。

さらに、管理ポリシーを IAM ユーザーにアタッチして、社内のすべてのユーザーに、それぞれの部門内での S3 バッチオペレーション ジョブの作成または変更を許可できます。

この例のポリシーには、3 つのポリシーステートメントが含まれています。

  • ポリシーの最初のステートメントでは、ユーザーに対して、ジョブ作成リクエストにそれぞれの部門に一致するジョブタグが含まれている場合に、バッチオペレーション ジョブの作成を許可しています。これは、"${aws:PrincipalTag/department}" 構文を使用して表現され、ポリシー評価時に IAM ユーザーの部門タグに置き換えられます。リクエスト ("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" ] } } } ] }