AWS サービスにアクセスしたときの、アクセス拒否または許可されていないことを示すエラーをトラブルシューティングしたいです。
簡単な説明
AWS Identity and Access Management (IAM) は、ポリシーが特定の条件要件を満たしていない場合、アクセス拒否エラーまたは不正エラーを返します。
問題を解決するには、問題の原因となっている特定の IAM ユーザーまたは IAM ロールを特定します。そのエンティティにアタッチされているアクセス許可の境界を確認してください。アクセス許可の境界を設定すると、管理ポリシーを使用して IAM エンティティの最大アクセス許可を設定できます。この機能は、アイデンティティベースのポリシーが IAM ユーザーまたはロールに付与できる最大アクセス許可を制御します。エンティティのアクセス許可の境界を設定すると、そのエンティティは両方のポリシーで許可されるアクションのみを実行できます。
注: エンティティは、アイデンティティベースのポリシーとアクセス許可の境界の両方で許可されているアクションのみを実行できます。
解決策
アクセス許可の境界でエラーが解決されない場合は、AWS アカウントのサービスコントロールポリシー (SCP) を確認してください。次に、リソースベースのポリシーに IAM エンティティの拒否が含まれているかどうかを確認します。
アクションが IAM ポリシーでは許可されているが、アクセス許可の境界では許可されていないかどうかを確認する
次の例は、IAM ポリシーでは許可されているが、アクセス許可の境界では許可されていないアクションを示しています。この例では、IAM ユーザーにはアタッチされている USER_IAM_POLICY というポリシーがあります。
IAM policy:(USER_IAM_POLICY)
“Effect”: “Allow”,
“Action”: [
“ec2:*”,
“s3:*”
],
このポリシーにより、ユーザーは Amazon Elastic Compute Cloud (Amazon EC2) と Amazon Simple Storage Service (Amazon S3) サービスへのフルアクセスが付与されます。このユーザーには USER_PB_POLICY というアクセス許可の境界も設定されています。
Permissions Boundary:(USER_PB_POLICY)
“Effect”: “Allow”,
“Action”: [
“cloudwatch:*”,
“s3:*”
],
アクセス許可の境界は、ユーザーが実行できる最大のアクセス許可を設定します。この例では、アクセス許可の境界により Amazon CloudWatch と Amazon S3 サービスへのフルアクセスが許可されています。ただし、IAM ポリシーとアクセス許可の境界の両方で許可されているサービスは Amazon S3 だけであるため、ユーザーがアクセスできるのは S3 のみです。ユーザーが Amazon EC2 にアクセスしようとすると、アクセス拒否エラーが表示されます。
このエラーを解決するには、アクセス許可の境界を編集して Amazon EC2 へのアクセスを許可します。
“Effect”: “Allow”,
“Action”: [
“cloudwatch:*”,
“s3:*”,
“ec2:*”
],
IAM コンソールを使用して、必要なすべてのアクションをアクセス許可の境界に含める
ユーザーが必要とするすべてのアクションを含むようにアクセス許可の境界を編集するには、次の手順を実行します。
- IAM コンソールを開きます。
- ナビゲーションペインで、[ロール/ユーザー] を選択します。
- 編集する IAM エンティティを選択します。
- [アクセス許可の境界] セクションで、設定を確認します。アクセス許可の境界が設定済みになっている場合は、アクセス許可の境界が設定されていることになります。このセクションには、IAM エンティティのアクセス許可の境界として機能するマネージドポリシーの名前が一覧表示されています。
- JSON ポリシーを展開し、アクセス許可の境界で必要なアクションが許可されているかどうかを確認します。アクセス許可の境界で必要なアクションが許可されていない場合は、IAM エンティティが必要とするすべてのアクションを許可するように JSON ポリシーを編集します。
ポリシーを変更する方法の詳細については、「IAM ポリシーを編集する」を参照してください。
自分の IAM ポリシーで iam:PermissionsBoundary 条件キーを使用する
iam:PermissionsBoundary 条件キーを、IAM ポリシーに追加します。この条件キーは、特定のポリシーが IAM エンティティのアクセス許可の境界としてアタッチされているかどうかをチェックします。
以下の例は、RestrictedRegionpermissionsBoundary という名前の IAM ポリシーを示しています。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "EC2RestrictRegion",
"Effect": “Allow”,
"Action": "ec2:*”
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestedRegion": [
"us-east-1"
]
}
}
}
ポリシーを作成して、ユーザーを作成する責任がある委任管理者にアタッチします。以下のサンプルポリシーを管理者にアタッチすると、管理者は RestrictedRegionPermissionsBoundary ポリシーをそのユーザーにアタッチした場合にのみ IAM ユーザーを作成できるようになります。管理者がポリシーをアタッチせずに IAM ユーザーを作成しようとすると、アクセス拒否エラーが表示されます。
{
"Sid": "CreateUser",
"Effect": "Allow",
"Action": [
"iam:CreateUser"
],
"Resource": "arn:aws:iam::444455556666:user/test1*",
"Condition": {
"StringEquals": {
"iam:PermissionsBoundary": "arn:aws:iam::444455556666:policy/RestrictedRegionPermissionsBoundary"
}
}
新規ユーザーを作成するときに、IAM ポリシーの RestrictedRegionPermissionsBoundary をアクセス許可の境界として設定するには、以下の手順を実行します。
- IAM コンソールを開きます。
- ナビゲーションペインで [ユーザー] を選択してから、[ユーザーの追加] を選択します。
- 編集するユーザー名を入力し、[AWS アクセスタイプ]、[次へ] の順に選択します。
- [アクセス許可の境界を設定] セクションを展開し、[アクセス許可の境界を使用して最大ロールのアクセス許可を制御する] を選択します。
- 検索フィールドに RestrictedRegionPermissionsBoundary と入力し、ポリシーのラジオボタンを選択します。
- [次へ: タグ] を選択します。
- 設定を確認してユーザーを作成します。
関連情報
境界を設定した場合の有効なアクセス許可の評価
AWSSupport-TroubleshootIAMAccessDeniedEvents