転送アクセスセッション (FAS) リクエストとアクセス許可の評価
CloudFormation スタックを作成、更新、削除する場合、ユーザーはオプションで IAM ロール ARN を指定できます。ロールが指定されていない場合、CloudFormation はデフォルトのサービスメカニズムを使用して他の AWS サービスとやり取りします。このシナリオでは、呼び出し元は管理対象のリソースに必要なアクセス許可を持っている必要があります。または、ユーザーが独自の IAM ロールを提供すると、CloudFormation はそのロールを引き受けて、ユーザーに代わってサービスのやり取りを実行します。
ユーザーが IAM ロールを提供するかどうかにかかわらず、CloudFormation はリソースオペレーションごとに新しいスコープが限定された FAS トークンを生成します。その結果、aws:ViaAWSService
を含む FAS 関連の条件キーは、両方のシナリオで入力されます。
FAS の使用は、CloudFormation オペレーション中の IAM ポリシーの評価方法に影響します。FAS 関連の条件キーの影響を受けるリソースを含むテンプレートを使用してスタックを作成すると、アクセス許可が拒否される場合があります。
IAM ポリシーの例
次の IAM ポリシーを検討してください。Statement2
は CloudFormation での AWS::KMS::Key
リソースの作成を一貫して禁止します。スタックオペレーション中に IAM ロールが指定されているかどうかにかかわらず、制限は一貫して適用されます。これは、FAS の使用により、aws:ViaAWSService
条件キーが常に true
に設定されているためです。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": [ "*" ], "Resource": [ "*" ] }, { "Sid": "Statement2", "Effect": "Deny", "Action": [ "kms:CreateKey" ], "Resource": [ "*" ], "Condition": { "Bool": { "aws:ViaAWSService": "true" } } } ] }
スタックテンプレートの例
例えば、ユーザーが次のサンプルテンプレートを使用してスタックを作成すると、 aws:ViaAWSService
は true
に設定され、ロールのアクセス許可は FAS ポリシーによって上書きされます。スタックの作成は、CreateKey
アクションを拒否する IAM ポリシーの Statement2
の影響を受けます。その結果、アクセス許可拒否エラーが発生します。
Resources: myPrimaryKey: Type: AWS::KMS::Key Properties: Description: An example multi-Region primary key KeyPolicy: Version: '2012-10-17' Id: key-default-1 Statement: - Sid: Enable IAM User Permissions Effect: Allow Principal: AWS: !Join - '' - - 'arn:aws:iam::' - !Ref AWS::AccountId - ':root' Action: kms:* Resource: '*'
FAS の詳細については、「IAM ユーザーガイド」の「転送アクセスセッション」を参照してください。
注記
ほとんどのリソースはこの動作に従います。ただし、リソースの作成、更新、削除時に予期しない成功または失敗が発生し、IAM ポリシーに FAS 関連の条件キーが含まれている場合、問題のリソースは、この標準的な動作に従わないリソースの小さなサブセットに属している可能性があります。